<?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>125519</bug_id>
          
          <creation_ts>2013-12-10 09:08:29 -0800</creation_ts>
          <short_desc>Make the different flavors of integer arithmetic more explicit, and don&apos;t rely on (possibly stale) results of the backwards propagator to decide integer arithmetic semantics</short_desc>
          <delta_ts>2014-01-06 20:49:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>125523</dependson>
          <blocked>125433</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>958388</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 09:08:29 -0800</bug_when>
    <thetext>For example, the DFG works with the following kinds of addition:

- Not type-inferred addition-or-strcat.  This is represented as a ValueAdd prior to FixupPhase and as a ValueAdd with UntypedUse after FixupPhase.

- Not yet type-inferred addition.  This is represented as an ArithAdd prior to FixupPhase and doesn&apos;t exist after FixupPhase.

- Double addition.  ValueAdd or ArithAdd with NumberUses.

- Integer addition with overflow check.  ValueAdd or ArithAdd with Int32Use and !bytecodeCanTruncateInteger(node-&gt;arithModeFlags())

- Integer addition without overflow check.  ValueAdd or ArithAdd with Int32Use and bytecodeCanTruncateInteger(node-&gt;arithModeFlags())

- Machine int addition with overflow check.  ValueAdd or ArithAdd with MachineIntUse.

It seems like it would be better if after FixupPhase, ValueAdd always meant addition-or-strcat - so FixupPhase with turn ValueAdd to ArithAdd if it&apos;s a numeric addition.  It also seems like it would be better to have an IntAdd node, that means integer addition without overflow check.  ArithAdd with Int32Use&apos;s always implies overflow checking.  It also seems like ArithAdd should be called DoubleAdd so that we remember that semantically this is always a double addition, even if we&apos;ve strength-reduced it to an int addition.

This will mean we have the following opcodes, with the following meanings:

ValueAdd: not type-inferred addition-or-strcat.
DoubleAdd: a numerical addition that is semantically required to behave like a double addition, but can be speculated to various types depending on useKind (NumberUse, MachineIntUse, Int32Use).  Because this is required to provide double-equivalent semantics, the integer versions will need overflow checks.
Int32Add: an integer addition.

We can do similar things for other arithmetic operations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958389</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 09:11:55 -0800</bug_when>
    <thetext>This blocks https://bugs.webkit.org/show_bug.cgi?id=125433 because I want to be able to insert various kinds of arithmetic into the graph.  This is currently awkward to do because if you add a ValueAdd or ArithAdd, you have to make sure that the NodeFlags are set *just right* or you&apos;ll get the wrong semantics.  I don&apos;t want NodeFlags to factor into semantics for arithmetic, at least not after FixupPhase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958390</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 09:13:53 -0800</bug_when>
    <thetext>Actually, I think I&apos;ll keep the name &quot;ArithAdd&quot; rather than using the term &quot;DoubleAdd&quot;.  This is desirable because we sometimes use the word &quot;Double&quot; in DFG node types to mean that we&apos;re doing something with a value&apos;s *representation*, which isn&apos;t what I want here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964191</commentid>
    <comment_count>3</comment_count>
      <attachid>220323</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-03 11:22:41 -0800</bug_when>
    <thetext>Created attachment 220323
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964372</commentid>
    <comment_count>4</comment_count>
      <attachid>220365</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-03 20:12:19 -0800</bug_when>
    <thetext>Created attachment 220365
more correcter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964742</commentid>
    <comment_count>5</comment_count>
      <attachid>220453</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 13:47:34 -0800</bug_when>
    <thetext>Created attachment 220453
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964792</commentid>
    <comment_count>6</comment_count>
      <attachid>220466</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 16:00:33 -0800</bug_when>
    <thetext>Created attachment 220466
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964795</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-06 16:02:40 -0800</bug_when>
    <thetext>Attachment 220466 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArithMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArithMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:661:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 17 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>964805</commentid>
    <comment_count>8</comment_count>
      <attachid>220466</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-06 16:43:40 -0800</bug_when>
    <thetext>Comment on attachment 220466
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Make the different flavors of integer arithmetic more explicit, and don&apos;t rely on (possibly stale) results of the backwards propagator to decide integer arithmetic semantis

&quot;semantics&quot;

&gt; Source/JavaScriptCore/dfg/DFGArithMode.h:38
&gt; +    Unchecked, // Don&apos;t check anything and just do an integer operation.

I think this might be clearer as &quot;Int&quot; or &quot;Hardware&quot;. &quot;Unchecked&quot; doesn&apos;t really specify what *is* required, only what&apos;s *not* required.

&gt; Source/JavaScriptCore/dfg/DFGArithMode.h:41
&gt; +    DoOverflow // Even though the inputs are integers, up-convert them to doubles and return a double.

I think this might be clearer as &quot;Double&quot; or &quot;OverflowToDouble&quot;. At first, I read &quot;DoOverflow&quot; as &quot;allow the CPU to overflow in int space&quot;.

&gt; Source/JavaScriptCore/dfg/DFGArithMode.h:45
&gt; +inline bool doesOverflow(Arith::Mode mode)

I think this might be clearer as &quot;isDouble&quot; or &quot;shouldOverflowToDouble&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964843</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 19:09:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 220466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220466&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        Make the different flavors of integer arithmetic more explicit, and don&apos;t rely on (possibly stale) results of the backwards propagator to decide integer arithmetic semantis
&gt; 
&gt; &quot;semantics&quot;
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:38
&gt; &gt; +    Unchecked, // Don&apos;t check anything and just do an integer operation.
&gt; 
&gt; I think this might be clearer as &quot;Int&quot; or &quot;Hardware&quot;. &quot;Unchecked&quot; doesn&apos;t really specify what *is* required, only what&apos;s *not* required.

I still prefer &quot;Unchecked&quot;.  The actual semantics of the arithmetic operation is determined by the input type first, and the ArithMode second.  Using the input type as the primary mode selector is in line with operations that doesn&apos;t have ArithMode and never will, like CompareEq/CompareLess/etc.  So, for ArithAdd, you might have an input type like Int32Use and then an ArithMode like Unchecked.  Making the ArithMode be &quot;IntUnchecked&quot; would be tautological - the input type already told you that you&apos;re getting ints as inputs and producing an int as an output.  Making the ArithMode be &quot;Int&quot; would be both tautological and too vague.  Both CheckOverflow and CheckOverflowAndNegativeZero have to do with integer operations as well, and both also take ints as inputs and produce ints as outputs.  So &quot;Int&quot; doesn&apos;t tell me anything.  I already knew that I was dealing with integers.  The *relevant* thing is that I&apos;m doing an unchecked arithmetic operation.  I also don&apos;t like &quot;Hardware&quot; because overflow checking is a hardware thing - all of the hardware that we care about has hardware overflow bits and overflow branch instructions.

Some processors have an &quot;overflow bit&quot; on arithmetic operations, that determines whether the operation sets the overflow flag.  I think PPC worked like this.  Think of ArithMode as an overflow-bit-on-stereoids.  The &quot;bit&quot; is either false (Unchecked) or true (CheckOverflow), but it can explicitly tell you if the decision hasn&apos;t been made or is not applicable (NotSet), it can tell you if to also check negative zero (CheckOverflowAndNegativeZero), and DoOverflow is a special case for now (only UInt32ToNumber uses it).

I *almost* decided to have DoOverflow be part of a different enumeration - but that enumeration would optimally just have &quot;NotSet&quot;, &quot;CheckOverflow&quot;, and &quot;DoOverflow&quot;.  The overlap made me think that just making it part of this enumeration would be easiest.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:41
&gt; &gt; +    DoOverflow // Even though the inputs are integers, up-convert them to doubles and return a double.
&gt; 
&gt; I think this might be clearer as &quot;Double&quot; or &quot;OverflowToDouble&quot;. At first, I read &quot;DoOverflow&quot; as &quot;allow the CPU to overflow in int space&quot;.

It should be DoOverflow because it really means: overflow to something bigger than the input was.  So, optimally, Int32 would overflow to Int52 rather than overflowing to Double and there is a bug for this.

My goal is to use terms that are overloadable so that we don&apos;t have to have separate enumerations for each kind of arithmetic operation, and to avoid having to change the name of the enumeration elements when we implement optimizations.  So, when we do get around to fixing Uint32ToNumber so that it returns an Int52 on JSVALUE64, and still returns a double on JSVALUE32_64 (since JSVALUE32_64 doesn&apos;t have Int52), we won&apos;t have to add a second enumeration element.  DoesOverflow will mean:

JSVALUE64: overflow to Int52
JSVALUE32_64: overflow to double

More formally, it means &quot;overflow to the smallest type that the implementation allows for that soundly represents all possible results given the input type&quot;.

You could argue that we should apply YAGNI to the IR and call it OverflowToDouble for now, and then change the name later.  Applying YAGNI in order to make the names of things overly specific is a dangerous thing to do because it&apos;s all-too-tempting to then make OverflowToDouble be implemented as overflow-to-int52 and not change the name.  That&apos;s why I&apos;d rather the IR&apos;s terminology be a bit vague in cases like this.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:45
&gt; &gt; +inline bool doesOverflow(Arith::Mode mode)
&gt; 
&gt; I think this might be clearer as &quot;isDouble&quot; or &quot;shouldOverflowToDouble&quot;.

I think it&apos;s too specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964845</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 19:13:31 -0800</bug_when>
    <thetext>Performance results:


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

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

Collected 10 samples per benchmark/VM, with 10 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                 SimpleMath                                    
SunSpider:
   3d-cube                                            7.3425+-0.0811            7.3417+-0.0404        
   3d-morph                                           8.9055+-0.0678     ?      8.9131+-0.0951        ?
   3d-raytrace                                        9.1552+-0.0965            9.0630+-0.1288          might be 1.0102x faster
   access-binary-trees                                2.1929+-0.0938            2.1309+-0.0195          might be 1.0291x faster
   access-fannkuch                                    8.1003+-0.0619            8.0401+-0.0590        
   access-nbody                                       4.2811+-0.0076            4.2800+-0.0104        
   access-nsieve                                      4.9721+-0.0287     ?      5.0034+-0.0386        ?
   bitops-3bit-bits-in-byte                           1.8857+-0.0055            1.8836+-0.0051        
   bitops-bits-in-byte                                7.1930+-0.0799            7.1784+-0.0747        
   bitops-bitwise-and                                 2.9788+-0.0310     ?      2.9969+-0.0108        ?
   bitops-nsieve-bits                                 5.2451+-0.0106     ?      5.2472+-0.0116        ?
   controlflow-recursive                              3.1489+-0.0213            3.1365+-0.0343        
   crypto-aes                                         5.6358+-0.0743     ?      5.7304+-0.1404        ? might be 1.0168x slower
   crypto-md5                                         3.4062+-0.0660     ?      3.4250+-0.0165        ?
   crypto-sha1                                        3.0481+-0.0415            3.0376+-0.0353        
   date-format-tofte                                 12.4049+-0.2140     ^     11.8731+-0.2954        ^ definitely 1.0448x faster
   date-format-xparb                                  8.7091+-0.1368     ?      8.7171+-0.0614        ?
   math-cordic                                        4.2580+-0.0119     ?      4.2991+-0.0926        ?
   math-partial-sums                                 10.1553+-0.0585     !     10.2879+-0.0686        ! definitely 1.0131x slower
   math-spectral-norm                                 2.7913+-0.0083            2.7879+-0.0077        
   regexp-dna                                        12.9906+-0.1229     ?     13.1385+-0.1640        ? might be 1.0114x slower
   string-base64                                      5.8424+-0.0391            5.7925+-0.0236        
   string-fasta                                      10.5025+-0.1097     ?     10.5457+-0.1221        ?
   string-tagcloud                                   15.8941+-0.2660           15.5233+-0.1265          might be 1.0239x faster
   string-unpack-code                                31.2701+-0.1607     !     31.6960+-0.1320        ! definitely 1.0136x slower
   string-validate-input                              6.9808+-0.0402     !      7.0822+-0.0402        ! definitely 1.0145x slower

   &lt;arithmetic&gt; *                                     7.6650+-0.0180            7.6597+-0.0163          might be 1.0007x faster
   &lt;geometric&gt;                                        6.1451+-0.0141            6.1379+-0.0111          might be 1.0012x faster
   &lt;harmonic&gt;                                         5.0439+-0.0170            5.0349+-0.0104          might be 1.0018x faster

                                                        TipOfTree                 SimpleMath                                    
LongSpider:
   3d-cube                                         2150.4546+-12.3694        2143.2926+-8.6607        
   3d-morph                                        1501.2196+-1.2220         1500.7383+-1.0006        
   3d-raytrace                                     1520.8118+-4.8756     ^   1499.3996+-7.0579        ^ definitely 1.0143x faster
   access-binary-trees                             2463.1347+-33.8171        2456.9344+-11.4935       
   access-fannkuch                                  656.6345+-0.6609     ^    650.0602+-1.7042        ^ definitely 1.0101x faster
   access-nbody                                    1496.3347+-0.7425         1495.8375+-0.6824        
   access-nsieve                                   1551.3519+-4.1101     ?   1552.0666+-4.3783        ?
   bitops-3bit-bits-in-byte                         126.1881+-0.2789          126.1290+-0.1878        
   bitops-bits-in-byte                              601.8212+-4.0344          600.2003+-3.7405        
   bitops-nsieve-bits                              1153.1025+-14.1138        1146.5311+-1.3145        
   controlflow-recursive                           1470.6700+-0.6894     ?   1471.6143+-2.5266        ?
   crypto-aes                                      1667.1826+-5.7312     ^   1658.4624+-2.8335        ^ definitely 1.0053x faster
   crypto-md5                                      1231.7262+-1.5940     ^   1218.8118+-1.7421        ^ definitely 1.0106x faster
   crypto-sha1                                     1603.9392+-3.0255     ?   1604.2062+-2.1367        ?
   date-format-tofte                               1250.0394+-3.4309     ^   1212.0723+-7.8669        ^ definitely 1.0313x faster
   date-format-xparb                               1450.7481+-26.3399    ?   1465.7784+-10.3369       ? might be 1.0104x slower
   math-cordic                                     1736.1817+-1.6681     ?   1760.5905+-49.1727       ? might be 1.0141x slower
   math-partial-sums                               1302.5680+-1.6240     ?   1303.7958+-0.6356        ?
   math-spectral-norm                              1826.3318+-0.6865     ?   1826.8048+-0.7584        ?
   string-base64                                    590.1951+-2.4668     ^    580.3344+-2.9405        ^ definitely 1.0170x faster
   string-fasta                                     993.3437+-8.7243     ?   1010.8606+-26.5763       ? might be 1.0176x slower
   string-tagcloud                                  389.6089+-1.8526     ?    392.6470+-2.4831        ?

   &lt;arithmetic&gt;                                    1306.0722+-2.2980         1303.5076+-2.6050          might be 1.0020x faster
   &lt;geometric&gt; *                                   1125.0802+-1.3403         1122.4359+-1.9801          might be 1.0024x faster
   &lt;harmonic&gt;                                       819.4074+-0.4652     ^    817.7756+-1.1369        ^ definitely 1.0020x faster

                                                        TipOfTree                 SimpleMath                                    
V8Spider:
   crypto                                            79.4730+-0.1209           79.3952+-0.0880        
   deltablue                                        100.1944+-0.5830          100.1612+-0.6105        
   earley-boyer                                      74.1640+-0.3562           73.9167+-0.3499        
   raytrace                                          45.8946+-0.5237     ?     46.0260+-0.6167        ?
   regexp                                           101.3243+-1.4558          100.3402+-0.3020        
   richards                                         131.4362+-1.4707          131.1863+-1.1325        
   splay                                             46.0918+-0.1863     ?     46.5947+-0.3447        ? might be 1.0109x slower

   &lt;arithmetic&gt;                                      82.6540+-0.2719           82.5172+-0.1998          might be 1.0017x faster
   &lt;geometric&gt; *                                     77.3924+-0.2172           77.3649+-0.1788          might be 1.0004x faster
   &lt;harmonic&gt;                                        72.1502+-0.2256     ?     72.2434+-0.2266        ? might be 1.0013x slower

                                                        TipOfTree                 SimpleMath                                    
Octane and V8v7:
   encrypt                                           0.46858+-0.00651          0.46560+-0.00046       
   decrypt                                           8.58239+-0.01687          8.57521+-0.00892       
   deltablue                                x2       0.57146+-0.00687          0.56440+-0.00239         might be 1.0125x faster
   earley                                            0.90484+-0.00371    ?     0.90559+-0.00555       ?
   boyer                                            12.56958+-0.05931         12.56145+-0.14887       
   raytrace                                 x2       4.34413+-0.05762          4.32033+-0.05700       
   regexp                                   x2      32.79526+-0.09794    ?    32.80306+-0.10300       ?
   richards                                 x2       0.43281+-0.00682    ?     0.43476+-0.00553       ?
   splay                                    x2       0.63767+-0.00311    ?     0.63830+-0.00427       ?
   navier-stokes                            x2      10.70620+-0.00557         10.70471+-0.00400       
   closure                                           0.43741+-0.00089    ?     0.43900+-0.00205       ?
   jquery                                            6.35606+-0.00996    ?     6.39220+-0.02826       ?
   gbemu                                    x2      71.44439+-0.63168         71.21440+-0.51572       
   mandreel                                 x2     135.33489+-0.83721        135.18832+-0.57543       
   pdfjs                                    x2     101.76514+-0.38193    !   102.69376+-0.31672       ! definitely 1.0091x slower
   box2d                                    x2      34.82981+-0.16813         34.69142+-0.16835       

V8v7:
   &lt;arithmetic&gt;                                      7.59378+-0.01213          7.58994+-0.01479         might be 1.0005x faster
   &lt;geometric&gt; *                                     2.51994+-0.00810          2.51500+-0.00645         might be 1.0020x faster
   &lt;harmonic&gt;                                        1.03871+-0.00586          1.03644+-0.00497         might be 1.0022x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.34778+-0.08313    ?    31.37869+-0.07010       ? might be 1.0010x slower
   &lt;geometric&gt; *                                     6.97741+-0.01673          6.97192+-0.01090         might be 1.0008x faster
   &lt;harmonic&gt;                                        1.44707+-0.00718          1.44509+-0.00620         might be 1.0014x faster

                                                        TipOfTree                 SimpleMath                                    
Kraken:
   ai-astar                                          494.853+-0.345            494.652+-0.218         
   audio-beat-detection                              223.912+-0.451            223.754+-0.504         
   audio-dft                                         290.551+-1.035      ?     291.150+-2.381         ?
   audio-fft                                         130.804+-0.100      ^     130.531+-0.126         ^ definitely 1.0021x faster
   audio-oscillator                                  244.273+-0.464            244.153+-0.438         
   imaging-darkroom                                  289.398+-8.910      ?     293.894+-17.339        ? might be 1.0155x slower
   imaging-desaturate                                158.371+-0.162      ?     158.461+-0.440         ?
   imaging-gaussian-blur                             364.181+-1.244            363.477+-0.121         
   json-parse-financial                               81.917+-0.885      ?      83.271+-1.295         ? might be 1.0165x slower
   json-stringify-tinderbox                          104.325+-0.275      ?     104.726+-0.436         ?
   stanford-crypto-aes                                91.386+-0.613             91.002+-0.274         
   stanford-crypto-ccm                               101.869+-1.156             99.707+-1.294           might be 1.0217x faster
   stanford-crypto-pbkdf2                            261.848+-1.035      ^     257.222+-1.848         ^ definitely 1.0180x faster
   stanford-crypto-sha256-iterative                  114.908+-2.010            114.097+-0.507         

   &lt;arithmetic&gt; *                                    210.900+-0.694            210.721+-1.348           might be 1.0008x faster
   &lt;geometric&gt;                                       181.173+-0.512            180.920+-0.962           might be 1.0014x faster
   &lt;harmonic&gt;                                        156.826+-0.491            156.603+-0.739           might be 1.0014x faster

                                                        TipOfTree                 SimpleMath                                    
JSRegress:
   adapt-to-double-divide                            22.7884+-0.1218           22.7712+-0.0571        
   aliased-arguments-getbyval                         0.9983+-0.0041            0.9944+-0.0027        
   allocate-big-object                                3.1212+-0.0547            3.1010+-0.0141        
   arity-mismatch-inlining                            0.9552+-0.0040     ?      0.9621+-0.0107        ?
   array-access-polymorphic-structure                 9.9876+-0.1310            9.8635+-0.1075          might be 1.0126x faster
   array-nonarray-polymorhpic-access                 58.3292+-0.2212           58.2338+-0.1803        
   array-with-double-add                              5.7706+-0.0604     ?      5.7805+-0.0625        ?
   array-with-double-increment                        4.3656+-0.0181     ?      4.3730+-0.0203        ?
   array-with-double-mul-add                          6.8944+-0.0428            6.8841+-0.0810        
   array-with-double-sum                              8.0334+-0.0780     ?      8.0614+-0.0869        ?
   array-with-int32-add-sub                          10.5633+-0.1056           10.4389+-0.0839          might be 1.0119x faster
   array-with-int32-or-double-sum                     8.0307+-0.0746     ?      8.0694+-0.0392        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    117.8314+-0.7376     !    119.9535+-0.7459        ! definitely 1.0180x slower
   ArrayBuffer-DataView-alloc-long-lived             30.4649+-0.1837     !     30.8697+-0.1244        ! definitely 1.0133x slower
   ArrayBuffer-Int32Array-byteOffset                  6.0260+-0.0776            5.9533+-0.0800          might be 1.0122x faster
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    214.4856+-2.8123     ?    215.6500+-2.1912        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.3358+-0.8034     ?    167.1229+-1.0014        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    118.6200+-0.7279     !    120.5706+-0.9981        ! definitely 1.0164x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     48.5788+-0.2236     ?     48.8760+-0.2518        ?
   ArrayBuffer-Int8Array-alloc-long-lived            30.1490+-0.2096     !     30.6587+-0.1432        ! definitely 1.0169x slower
   ArrayBuffer-Int8Array-alloc                       26.2832+-0.4061     ?     26.5486+-0.2032        ? might be 1.0101x slower
   asmjs_bool_bug                                     9.2583+-0.1214            9.2363+-0.0526        
   basic-set                                         19.9854+-0.1107           19.8786+-0.1194        
   big-int-mul                                        5.5285+-0.0681     ?      5.5438+-0.0572        ?
   boolean-test                                       4.4320+-0.0213            4.4228+-0.0207        
   branch-fold                                        4.8935+-0.0557     ?      4.9137+-0.0068        ?
   by-val-generic                                    12.7673+-0.2038           12.5942+-0.1587          might be 1.0137x faster
   captured-assignments                               0.5824+-0.0059     ?      0.5868+-0.0054        ?
   cast-int-to-double                                12.4218+-0.1214     ?     12.4799+-0.0937        ?
   cell-argument                                     15.7493+-0.4327     ?     16.1805+-0.4144        ? might be 1.0274x slower
   cfg-simplify                                       3.9800+-0.0059     ?      3.9819+-0.0061        ?
   chain-custom-getter                              159.8061+-4.9434     ?    160.2669+-5.5892        ?
   chain-getter-access                              488.6087+-1.7341     ^    482.2610+-4.4660        ^ definitely 1.0132x faster
   cmpeq-obj-to-obj-other                            11.9984+-0.6281           11.8646+-0.4436          might be 1.0113x faster
   constant-test                                      8.9675+-0.1273            8.8831+-0.0853        
   DataView-custom-properties                       125.7240+-1.0698     ?    126.5701+-0.9567        ?
   delay-tear-off-arguments-strictmode                3.6212+-0.0103     ?      3.6252+-0.0177        ?
   destructuring-arguments-length                   172.8433+-1.8695     !    177.0964+-1.5504        ! definitely 1.0246x slower
   destructuring-arguments                            8.8240+-0.0303     ?      8.9178+-0.0939        ? might be 1.0106x slower
   destructuring-swap                                 8.6313+-0.1415            8.5639+-0.0683        
   direct-arguments-getbyval                          0.8696+-0.0130            0.8593+-0.0123          might be 1.0120x faster
   double-get-by-val-out-of-bounds                    7.4724+-0.0798            7.4666+-0.0634        
   double-pollution-getbyval                         11.0400+-0.0824     ?     11.0613+-0.1112        ?
   double-pollution-putbyoffset                       6.0900+-0.1195            6.0347+-0.0291        
   double-to-int32-typed-array-no-inline              2.6200+-0.0060     ?      2.6423+-0.0379        ?
   double-to-int32-typed-array                        2.2867+-0.0209     ?      2.2963+-0.0541        ?
   double-to-uint32-typed-array-no-inline             2.7285+-0.0060     ?      2.7293+-0.0048        ?
   double-to-uint32-typed-array                       2.4924+-0.0152     ?      2.4985+-0.0076        ?
   empty-string-plus-int                             10.9727+-0.0864     !     11.1901+-0.0962        ! definitely 1.0198x slower
   emscripten-cube2hash                              55.4718+-0.3479     ?     55.7702+-0.2664        ?
   emscripten-memops                               7042.6414+-35.6712    ?   7057.4156+-1.3689        ?
   external-arguments-getbyval                        2.1054+-0.0287            2.0644+-0.0180          might be 1.0198x faster
   external-arguments-putbyval                        3.1261+-0.0258            3.1063+-0.0218        
   fixed-typed-array-storage-var-index                1.4134+-0.0222            1.3993+-0.0065          might be 1.0100x faster
   fixed-typed-array-storage                          0.9992+-0.0327            0.9992+-0.0276        
   Float32Array-matrix-mult                           6.5657+-0.0908            6.5226+-0.0484        
   Float32Array-to-Float64Array-set                  92.7674+-0.3990     ?     92.9431+-0.6426        ?
   Float64Array-alloc-long-lived                    103.6343+-0.4517          103.2556+-0.7384        
   Float64Array-to-Int16Array-set                   117.0049+-0.5453     ?    117.3267+-1.7771        ?
   fold-double-to-int                                20.6007+-0.1023           20.5781+-0.2159        
   for-of-iterate-array-entries                       8.7196+-0.0929     ?      8.7280+-0.1776        ?
   for-of-iterate-array-keys                          3.4521+-0.0369            3.4234+-0.0536        
   for-of-iterate-array-values                        2.9749+-0.0558     ?      2.9761+-0.0539        ?
   function-dot-apply                                 3.1086+-0.0041     ?      3.1196+-0.0156        ?
   function-test                                      4.8984+-0.0484            4.8279+-0.0644          might be 1.0146x faster
   get-by-id-chain-from-try-block                     7.9750+-0.1025     ?      8.0604+-0.0497        ? might be 1.0107x slower
   get-by-id-proto-or-self                           26.0254+-0.2469           25.9218+-0.2275        
   get-by-id-self-or-proto                           23.5892+-0.5697     ?     24.1112+-0.5569        ? might be 1.0221x slower
   get-by-val-out-of-bounds                           7.2017+-0.0405     ?      7.2586+-0.0829        ?
   get_callee_monomorphic                             5.0048+-0.0284            4.9645+-0.0720        
   get_callee_polymorphic                             4.8374+-0.0195     ?      4.8529+-0.0252        ?
   global-var-const-infer-fire-from-opt               1.0596+-0.0322            1.0420+-0.0403          might be 1.0170x faster
   global-var-const-infer                             0.7934+-0.0047     ?      0.8015+-0.0148        ? might be 1.0102x slower
   HashMap-put-get-iterate-keys                      42.5726+-0.1723     ?     42.7582+-0.3977        ?
   HashMap-put-get-iterate                           54.1825+-0.2382           53.9908+-0.2194        
   HashMap-string-put-get-iterate                    51.0364+-0.2387     !     51.7064+-0.1416        ! definitely 1.0131x slower
   imul-double-only                                  17.8478+-0.2100           17.8090+-0.2026        
   imul-int-only                                     14.8675+-0.0586     ?     14.9082+-0.1298        ?
   imul-mixed                                        22.6525+-1.1861           21.8513+-0.0533          might be 1.0367x faster
   in-four-cases                                     26.0893+-0.3343           25.9324+-0.0818        
   in-one-case-false                                 12.1976+-0.1419           12.1059+-0.0934        
   in-one-case-true                                  12.1375+-0.1174     ?     12.1520+-0.1107        ?
   in-two-cases                                      12.9217+-0.0946     ?     12.9538+-0.1379        ?
   indexed-properties-in-objects                      4.1739+-0.0058     ?      4.1804+-0.0186        ?
   infer-closure-const-then-mov-no-inline            15.3281+-0.1128           15.2802+-0.1277        
   infer-closure-const-then-mov                      29.0251+-0.1101           28.9565+-0.1305        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7331+-0.1104     ?     17.8360+-0.1115        ?
   infer-closure-const-then-put-to-scope             36.1560+-0.3797           36.0647+-0.1402        
   infer-closure-const-then-reenter-no-inline   
                                                     84.3638+-0.1028     ?     84.4197+-0.1293        ?
   infer-closure-const-then-reenter                  35.8842+-0.1179           35.7842+-0.2610        
   infer-one-time-closure-ten-vars                   29.0607+-0.0876           29.0329+-0.1251        
   infer-one-time-closure-two-vars                   28.6865+-0.1169     ?     28.8179+-0.1182        ?
   infer-one-time-closure                            28.7644+-0.1554           28.6901+-0.0973        
   infer-one-time-deep-closure                       58.4586+-0.2975           58.1458+-0.4836        
   inline-arguments-access                            1.6988+-0.0201            1.6913+-0.0062        
   inline-arguments-aliased-access                    1.7984+-0.0038     ?      1.8175+-0.0292        ? might be 1.0106x slower
   inline-arguments-local-escape                     22.3476+-0.1816     !     23.1594+-0.2313        ! definitely 1.0363x slower
   inline-get-scoped-var                              7.4958+-0.0301     ?      7.5051+-0.0773        ?
   inlined-put-by-id-transition                      15.5200+-0.2314           15.3140+-0.3532          might be 1.0135x faster
   int-or-other-abs-then-get-by-val                   9.4592+-0.0713            9.4270+-0.1012        
   int-or-other-abs-zero-then-get-by-val             37.5753+-0.4658           37.4160+-0.4805        
   int-or-other-add-then-get-by-val                  10.6186+-0.1170           10.5239+-0.1398        
   int-or-other-add                                  10.9441+-0.1061     ?     10.9992+-0.1408        ?
   int-or-other-div-then-get-by-val                   6.3811+-0.0907     ?      6.3881+-0.0594        ?
   int-or-other-max-then-get-by-val                   8.8033+-0.1652            8.7307+-0.1996        
   int-or-other-min-then-get-by-val                   7.0657+-0.1118     ?      7.0900+-0.0554        ?
   int-or-other-mod-then-get-by-val                   6.1677+-0.0584     ?      6.1950+-0.0260        ?
   int-or-other-mul-then-get-by-val                   6.6599+-0.0204     ?      6.6836+-0.0370        ?
   int-or-other-neg-then-get-by-val                   7.9441+-0.0725     ?      7.9768+-0.0536        ?
   int-or-other-neg-zero-then-get-by-val             37.0841+-0.4728           36.9707+-0.1211        
   int-or-other-sub-then-get-by-val                  10.5878+-0.1879           10.5281+-0.1236        
   int-or-other-sub                                   8.8847+-0.0806     ?      8.8912+-0.0798        ?
   int-overflow-local                                 6.4179+-0.0699            6.4086+-0.0780        
   Int16Array-alloc-long-lived                       67.8005+-0.4408     ?     68.0532+-0.3504        ?
   Int16Array-bubble-sort-with-byteLength            48.9869+-0.1013           48.9125+-0.0931        
   Int16Array-bubble-sort                            47.9287+-0.1285           47.9140+-0.1042        
   Int16Array-load-int-mul                            1.8318+-0.0192            1.8238+-0.0160        
   Int16Array-to-Int32Array-set                      91.6772+-1.1026           90.8073+-1.1896        
   Int32Array-alloc-huge-long-lived                 704.7167+-3.4719     ?    706.8021+-4.6910        ?
   Int32Array-alloc-huge                            812.5910+-7.0389          808.8862+-8.5080        
   Int32Array-alloc-large-long-lived                977.4719+-8.9179          974.8927+-8.8645        
   Int32Array-alloc-large                            44.8821+-0.7305     ?     45.0096+-0.8970        ?
   Int32Array-alloc-long-lived                       81.9039+-0.4930     ^     80.6772+-0.4421        ^ definitely 1.0152x faster
   Int32Array-alloc                                   4.5365+-0.0137            4.5330+-0.0141        
   Int32Array-Int8Array-view-alloc                   15.0308+-0.1240     ?     15.0865+-0.0673        ?
   int52-spill                                       12.9146+-0.1476     ^     12.4607+-0.1318        ^ definitely 1.0364x faster
   Int8Array-alloc-long-lived                        67.2255+-0.6582           66.9081+-0.2442        
   Int8Array-load-with-byteLength                     5.0716+-0.0181            5.0697+-0.0148        
   Int8Array-load                                     5.0287+-0.0729     ?      5.0328+-0.0684        ?
   integer-divide                                    15.0604+-0.0687           15.0161+-0.0645        
   integer-modulo                                     2.0249+-0.0093     ?      2.0279+-0.0090        ?
   large-int-captured                                 9.7935+-0.1134     ?      9.9273+-0.4263        ? might be 1.0137x slower
   large-int-neg                                     26.4185+-0.1947     ^     25.4640+-0.0965        ^ definitely 1.0375x faster
   large-int                                         23.1027+-0.1549     ?     23.1228+-0.1314        ?
   logical-not                                       11.2944+-0.1161           11.1845+-0.1361        
   lots-of-fields                                    12.3774+-0.0463     ?     12.3963+-0.1072        ?
   make-indexed-storage                               4.3506+-0.0280            4.3479+-0.0180        
   make-rope-cse                                      6.0846+-0.0831     ?      6.1780+-0.1686        ? might be 1.0153x slower
   marsaglia-larger-ints                            111.8204+-0.1424     ?    111.8354+-0.1845        ?
   marsaglia-osr-entry                               47.0383+-0.1557     ?     47.0844+-0.1041        ?
   marsaglia                                        462.5316+-0.4905     ?    466.3638+-6.2116        ?
   method-on-number                                  30.2394+-0.6397           29.9569+-0.6533        
   negative-zero-divide                               0.4297+-0.0016            0.4266+-0.0016        
   negative-zero-modulo                               0.4233+-0.0174            0.4107+-0.0013          might be 1.0307x faster
   negative-zero-negate                               0.3972+-0.0027            0.3961+-0.0020        
   nested-function-parsing-random                   378.9720+-0.2362     !    383.0845+-2.8884        ! definitely 1.0109x slower
   nested-function-parsing                           47.2952+-0.0747     ?     47.4606+-0.1228        ?
   new-array-buffer-dead                              3.7938+-0.0195            3.7741+-0.0138        
   new-array-buffer-push                             10.5815+-0.1373     ?     10.6480+-0.1280        ?
   new-array-dead                                    28.5589+-0.1123     ?     28.5859+-0.0666        ?
   new-array-push                                     7.0704+-0.0991            6.9181+-0.0652          might be 1.0220x faster
   number-test                                        4.3518+-0.0083     ?      4.3749+-0.0261        ?
   object-closure-call                               13.3799+-0.1060           13.3589+-0.1282        
   object-test                                        4.6741+-0.0562     ?      4.7112+-0.0318        ?
   poly-stricteq                                     76.3901+-0.1470     ?     76.7875+-1.4595        ?
   polymorphic-structure                             20.6050+-0.2798           20.5654+-0.2373        
   polyvariant-monomorphic-get-by-id                 11.9903+-0.0818     ?     12.0390+-0.0798        ?
   proto-custom-getter                              171.6590+-10.5159         160.2037+-5.6062          might be 1.0715x faster
   proto-getter-access                              488.8543+-5.0545          486.5065+-5.7242        
   put-by-id                                         19.6309+-0.2719           19.4162+-0.4531          might be 1.0111x faster
   put-by-val-large-index-blank-indexing-type   
                                                     20.6385+-0.1173           20.5120+-0.1351        
   put-by-val-machine-int                             3.3790+-0.0144            3.3733+-0.0155        
   rare-osr-exit-on-local                            20.3731+-0.2672           20.3135+-0.1434        
   register-pressure-from-osr                        31.3959+-0.1195           31.3047+-0.1266        
   simple-activation-demo                            35.2131+-0.0815     ?     35.2404+-0.1953        ?
   simple-custom-getter                             499.9823+-0.1376     ?    502.8483+-6.4137        ?
   simple-getter-access                             785.6796+-11.1201         780.8234+-10.7176       
   slow-array-profile-convergence                     4.0207+-0.0143            4.0025+-0.0091        
   slow-convergence                                   4.5401+-0.0241            4.5347+-0.0358        
   sparse-conditional                                 1.4182+-0.0206            1.4056+-0.0101        
   splice-to-remove                                  77.5571+-0.0850     ^     77.1464+-0.1307        ^ definitely 1.0053x faster
   stepanov_container                             10174.9525+-23.9838    ?  10193.8967+-31.6146       ?
   string-concat-object                               3.1043+-0.0257            3.0884+-0.0144        
   string-concat-pair-object                          3.0250+-0.0407            3.0198+-0.0295        
   string-concat-pair-simple                         17.3161+-0.2044           17.1913+-0.2716        
   string-concat-simple                              17.1775+-0.2815     ?     17.3934+-0.1522        ? might be 1.0126x slower
   string-cons-repeat                                10.6600+-0.0166           10.6304+-0.0307        
   string-cons-tower                                 11.0881+-0.0522     ?     11.1168+-0.0333        ?
   string-equality                                   43.0957+-0.6796           42.8582+-0.3906        
   string-get-by-val-big-char                        12.6683+-0.0791     !     12.8922+-0.1098        ! definitely 1.0177x slower
   string-get-by-val-out-of-bounds-insane             5.8244+-0.1501     ?      5.8853+-0.1241        ? might be 1.0105x slower
   string-get-by-val-out-of-bounds                    5.3385+-0.0417     ?      5.3627+-0.0359        ?
   string-get-by-val                                  4.8791+-0.0523     ?      4.8974+-0.0255        ?
   string-hash                                        2.7676+-0.0017     ?      2.7685+-0.0034        ?
   string-long-ident-equality                        37.3431+-0.4742     ?     37.4205+-0.5557        ?
   string-repeat-arith                               48.4223+-0.3274     ?     48.5672+-0.3253        ?
   string-sub                                       101.5079+-0.5455     ?    101.5321+-0.5503        ?
   string-test                                        4.3558+-0.0403            4.3337+-0.0345        
   string-var-equality                               70.4319+-0.7565           70.3158+-0.5820        
   structure-hoist-over-transitions                   3.4409+-0.0109     ?      3.4517+-0.0125        ?
   switch-char-constant                               3.4822+-0.0076     ?      3.4865+-0.0051        ?
   switch-char                                        8.1621+-0.0764            8.1361+-0.0774        
   switch-constant                                    9.3953+-0.1342            9.3920+-0.1472        
   switch-string-basic-big-var                       20.4859+-0.1025     ?     20.5443+-0.1077        ?
   switch-string-basic-big                           21.4525+-0.3412     ?     21.8008+-0.7625        ? might be 1.0162x slower
   switch-string-basic-var                           20.3714+-0.0840     ?     20.4165+-0.1195        ?
   switch-string-basic                               21.9225+-0.5452           21.8629+-0.7706        
   switch-string-big-length-tower-var                28.7346+-0.1571     ?     28.9811+-0.3019        ?
   switch-string-length-tower-var                    21.9731+-0.2908     ?     22.0099+-0.2148        ?
   switch-string-length-tower                        16.5312+-0.1256           16.4957+-0.0619        
   switch-string-short                               16.5067+-0.0988     ?     16.5518+-0.1853        ?
   switch                                            13.5787+-0.1316           13.5270+-0.1202        
   tear-off-arguments-simple                          2.3921+-0.0102     ?      2.3957+-0.0203        ?
   tear-off-arguments                                 3.6885+-0.0073            3.6822+-0.0142        
   temporal-structure                                17.1693+-0.1300     ?     17.2083+-0.0624        ?
   to-int32-boolean                                  21.4740+-0.1426     ?     21.6157+-0.1456        ?
   undefined-test                                     4.5393+-0.0342     ?      4.5602+-0.0078        ?
   weird-inlining-const-prop                          2.4013+-0.0134            2.3966+-0.0125        

   &lt;arithmetic&gt;                                     133.5770+-0.2288     ?    133.6999+-0.2098        ? might be 1.0009x slower
   &lt;geometric&gt; *                                     14.6895+-0.0163           14.6819+-0.0094          might be 1.0005x faster
   &lt;harmonic&gt;                                         5.2554+-0.0177            5.2399+-0.0094          might be 1.0030x faster

                                                        TipOfTree                 SimpleMath                                    
All benchmarks:
   &lt;arithmetic&gt;                                     201.5284+-0.2470          201.4174+-0.2462          might be 1.0006x faster
   &lt;geometric&gt;                                       20.4493+-0.0180           20.4336+-0.0090          might be 1.0008x faster
   &lt;harmonic&gt;                                         4.8161+-0.0133            4.8045+-0.0090          might be 1.0024x faster

                                                        TipOfTree                 SimpleMath                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.3394+-0.0426           49.2936+-0.0655          might be 1.0009x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964847</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 19:17:08 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 220466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220466&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        Make the different flavors of integer arithmetic more explicit, and don&apos;t rely on (possibly stale) results of the backwards propagator to decide integer arithmetic semantis
&gt; 
&gt; &quot;semantics&quot;
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:38
&gt; &gt; +    Unchecked, // Don&apos;t check anything and just do an integer operation.
&gt; 
&gt; I think this might be clearer as &quot;Int&quot; or &quot;Hardware&quot;. &quot;Unchecked&quot; doesn&apos;t really specify what *is* required, only what&apos;s *not* required.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:41
&gt; &gt; +    DoOverflow // Even though the inputs are integers, up-convert them to doubles and return a double.
&gt; 
&gt; I think this might be clearer as &quot;Double&quot; or &quot;OverflowToDouble&quot;. At first, I read &quot;DoOverflow&quot; as &quot;allow the CPU to overflow in int space&quot;.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:45
&gt; &gt; +inline bool doesOverflow(Arith::Mode mode)
&gt; 
&gt; I think this might be clearer as &quot;isDouble&quot; or &quot;shouldOverflowToDouble&quot;.

I will land without changing the names, but I will change the documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964848</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 19:18:11 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 220466 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220466&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; &gt; +        Make the different flavors of integer arithmetic more explicit, and don&apos;t rely on (possibly stale) results of the backwards propagator to decide integer arithmetic semantis
&gt; &gt; 
&gt; &gt; &quot;semantics&quot;
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:38
&gt; &gt; &gt; +    Unchecked, // Don&apos;t check anything and just do an integer operation.
&gt; &gt; 
&gt; &gt; I think this might be clearer as &quot;Int&quot; or &quot;Hardware&quot;. &quot;Unchecked&quot; doesn&apos;t really specify what *is* required, only what&apos;s *not* required.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:41
&gt; &gt; &gt; +    DoOverflow // Even though the inputs are integers, up-convert them to doubles and return a double.
&gt; &gt; 
&gt; &gt; I think this might be clearer as &quot;Double&quot; or &quot;OverflowToDouble&quot;. At first, I read &quot;DoOverflow&quot; as &quot;allow the CPU to overflow in int space&quot;.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGArithMode.h:45
&gt; &gt; &gt; +inline bool doesOverflow(Arith::Mode mode)
&gt; &gt; 
&gt; &gt; I think this might be clearer as &quot;isDouble&quot; or &quot;shouldOverflowToDouble&quot;.
&gt; 
&gt; I will land without changing the names, but I will change the documentation.

New documentation:

enum Mode {
    NotSet, // Arithmetic mode is either not relevant because we&apos;re using doubles anyway or we are at a phase in compilation where we don&apos;t know what we&apos;re doing, yet. Should never see this after FixupPhase except for nodes that take doubles as inputs already.
    Unchecked, // Don&apos;t check anything and just do the direct hardware operation.
    CheckOverflow, // Check for overflow but don&apos;t bother with negative zero.
    CheckOverflowAndNegativeZero, // Check for both overflow and negative zero.
    DoOverflow // Up-convert to the smallest type that soundly represents all possible results after input type speculation.
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964861</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-06 20:49:13 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/161399</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220323</attachid>
            <date>2014-01-03 11:22:41 -0800</date>
            <delta_ts>2014-01-03 20:12:19 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38914</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjAyLDExICsyMDIsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBab21i
aWVIaW50OiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgog
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKQEAgLTM2Myw3ICszNTgsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAo
c2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE1hY2hpbmVJbnRVc2U6CkBAIC00MDEsNyArMzk2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSkgewogICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKHNob3VsZENo
ZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNYWNoaW5l
SW50VXNlOgpAQCAtNDI5LDE0ICs0MjQsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
ewogICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKHNob3VsZENoZWNr
T3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNYWNoaW5lSW50
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQ1Mik7CiAgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShT
cGVjSW50NTIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgpAQCAtNDU5LDggKzQ1
NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKCFieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KQotICAgICAgICAgICAgICAgIHx8ICFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93
KG5vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKQEAg
LTQ4MSwxMSArNDc1LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEFyaXRoSU11bDogewotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgICAgICAKICAgICBjYXNlIEFyaXRoRGl2OgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAg
Y2FzZSBBcml0aE1heDoKQEAgLTE2MjEsMTEgKzE2MTAsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKIAorICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVucmVhY2hh
YmxlOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVh
azsKLQogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNhc2UgQXJpdGhJTXVsOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0FyaXRo
TW9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkFyaXRoOjpNb2RlIG1v
ZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKU0M6OkRGRzo6QXJpdGg6Ok5v
dFNldDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RTZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSlNDOjpERkc6OkFyaXRoOjpVbmNoZWNrZWQ6CisgICAgICAgIG91dC5wcmludCgiVW5j
aGVja2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6Q2hl
Y2tPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja092ZXJmbG93Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0
aXZlWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJv
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6RG9PdmVyZmxv
dzoKKyAgICAgICAgb3V0LnByaW50KCJEb092ZXJmbG93Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0FyaXRoTW9kZV9oCisjZGVmaW5lIERGR0FyaXRoTW9kZV9oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBBcml0aDo6
TW9kZSBkZXNjcmliZXMgdGhlIG1vZGUgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24gdGhhdCBz
cGVjdWxhdGVzIGludGVnZXIuCisvLyBOb3RlIHRoYXQgbm90IGFsbCBtb2RlcyBhcmUgdmFsaWQg
Zm9yIGFsbCBvcGVyYXRpb25zLgorbmFtZXNwYWNlIEFyaXRoIHsKK2VudW0gTW9kZSB7CisgICAg
Tm90U2V0LCAvLyBBcml0aG1ldGljIG1vZGUgaXMgZWl0aGVyIG5vdCByZWxldmFudCBiZWNhdXNl
IHdlJ3JlIHVzaW5nIGRvdWJsZXMgYW55d2F5IG9yIHdlIGFyZSBhdCBhIHBoYXNlIGluIGNvbXBp
bGF0aW9uIHdoZXJlIHdlIGRvbid0IGtub3cgd2hhdCB3ZSdyZSBkb2luZywgeWV0LiBTaG91bGQg
bmV2ZXIgc2VlIHRoaXMgYWZ0ZXIgRml4dXBQaGFzZSBleGNlcHQgZm9yIG5vZGVzIHRoYXQgdGFr
ZSBkb3VibGVzIGFzIGlucHV0cyBhbHJlYWR5LgorICAgIFVuY2hlY2tlZCwgLy8gRG9uJ3QgY2hl
Y2sgYW55dGhpbmcgYW5kIGp1c3QgZG8gYW4gaW50ZWdlciBvcGVyYXRpb24uCisgICAgQ2hlY2tP
dmVyZmxvdywgLy8gQ2hlY2sgZm9yIG92ZXJmbG93IGJ1dCBkb24ndCBib3RoZXIgd2l0aCBuZWdh
dGl2ZSB6ZXJvLgorICAgIENoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8sIC8vIENoZWNrIGZv
ciBib3RoIG92ZXJmbG93IGFuZCBuZWdhdGl2ZSB6ZXJvLgorICAgIERvT3ZlcmZsb3cgLy8gRXZl
biB0aG91Z2ggdGhlIGlucHV0cyBhcmUgaW50ZWdlcnMsIHVwLWNvbnZlcnQgdGhlbSB0byBkb3Vi
bGVzIGFuZCByZXR1cm4gYSBkb3VibGUuCit9OworfSAvLyBuYW1lc3BhY2UgQXJpdGgKKworaW5s
aW5lIGJvb2wgZG9lc092ZXJmbG93KEFyaXRoOjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoICht
b2RlKSB7CisgICAgY2FzZSBBcml0aDo6Tm90U2V0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBjYXNlIEFyaXRoOjpVbmNoZWNrZWQ6CisgICAgY2FzZSBBcml0aDo6Q2hlY2tP
dmVyZmxvdzoKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvOgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcml0aDo6RG9PdmVyZmxvdzoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBJdCdzIG9ubHkgdmFsaWQgdG8gY2FsbCB0aGlzIG9uY2UgeW91
J3ZlIGRldGVybWluZWQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byAqZG8qCisvLyBvdmVyZmxvdy4g
Rm9yIG1vc3Qgbm9kZXMsIHRoYXQncyBpbXBsaWNpdC4KK2lubGluZSBib29sIHNob3VsZENoZWNr
T3ZlcmZsb3coQXJpdGg6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIEFyaXRoOjpOb3RTZXQ6CisgICAgY2FzZSBBcml0aDo6RG9PdmVyZmxvdzoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQXJp
dGg6OlVuY2hlY2tlZDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJpdGg6OkNo
ZWNrT3ZlcmZsb3c6CisgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVy
bzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBzaG91bGRDaGVja05lZ2F0aXZl
WmVybyhBcml0aDo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
QXJpdGg6Ok5vdFNldDoKKyAgICBjYXNlIEFyaXRoOjpEb092ZXJmbG93OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBBcml0aDo6
VW5jaGVja2VkOgorICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpERkc6OkFyaXRoOjpNb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FyaXRoTW9kZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lv
biAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2LDggKzEzNiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSAhPSBvdGhlck5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzQXJpdGhNb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gb3RoZXJOb2RlLT5hcml0aE1vZGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEVkZ2Ugb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQxKCk7CiAgICAg
ICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCkBAIC0xMDgyLDcgKzEwODQsNiBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEFyaXRoU3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgogICAgICAg
ICBjYXNlIEFyaXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoSU11bDoKICAgICAgICAgY2FzZSBB
cml0aE1vZDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2FzZSBBcml0aEFiczoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsMTkgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBCaXRYb3I6CiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJp
dExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hp
ZnQ6IHsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4SW50RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhJTXVsOiB7CiAgICAgICAgICAg
ICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEludEVkZ2Uobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoQXJpdGhNdWwpOworICAgICAg
ICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKE5vZGU6OlVuY2hlY2tlZCk7CisgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtMTE0LDYgKzEyMywxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBp
ZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnQzMihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0
aDo6RG9PdmVyZmxvdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0yMTAsMTAgKzIyMywyMCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRoTmVn
YXRlOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnQz
Mihub2RlKSkgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRo
TW9kZShBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlY29k
ZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93KTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9k
ZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91
bGRTcGVjdWxhdGVNYWNoaW5lSW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxN
YWNoaW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVj
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhN
b2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihu
b2RlLT5jaGlsZDEoKSk7CkBAIC0yMjQsMTEgKzI0NywyMSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSkpIHsKICAgICAgICAg
ICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGlm
IChieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpVbmNoZWNrZWQpOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0
aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5k
TmVnYXRpdmVaZXJvKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZU1hY2hpbmVJbnQobm9kZSkp
IHsKICAgICAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRo
TW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmRO
ZWdhdGl2ZVplcm8pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI0Myw2ICsy
NzYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAob3B0aW1pemVGb3JYODYoKSB8
fCBvcHRpbWl6ZUZvckFSTTY0KCkgfHwgb3B0aW1pemVGb3JBUk12N3MoKSkgewogICAgICAgICAg
ICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRo
OjpVbmNoZWNrZWQpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlY29kZUNhbkln
bm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFy
aXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMjU4LDYgKzI5NywxMCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50
MzIpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdE
aXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNr
T3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KG1faW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4s
IGNoaWxkMSwgY2hpbGQyKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE2NTUsMTIgKzE2
OTgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nh
cnkobm9kZSwgbW9kZSk7CiAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpVbmNo
ZWNrZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRo
TW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRl
TWFjaGluZUludChub2RlKSkgewogICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNlPihu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tP
dmVyZmxvdyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjEy
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk4LDYgKzE5OCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+
cHJlZGljdGlvbigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc0FycmF5TW9kZSgpKQogICAgICAgICBv
dXQucHJpbnQoY29tbWEsIG5vZGUtPmFycmF5TW9kZSgpKTsKKyAgICBpZiAobm9kZS0+aGFzQXJp
dGhNb2RlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+YXJpdGhNb2RlKCkpOwog
ICAgIGlmIChub2RlLT5oYXNWYXJOdW1iZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBu
b2RlLT52YXJOdW1iZXIoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1JlZ2lzdGVyUG9pbnRlcigpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2MTI0NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0Fic3Ry
YWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdBZGphY2VuY3lMaXN0LmgiCisjaW5jbHVkZSAiREZH
QXJpdGhNb2RlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCiAjaW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKQEAgLTExMTgsNiArMTExOSwzNCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKKyAgICBi
b29sIGhhc0FyaXRoTW9kZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAg
ICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgY2FzZSBB
cml0aE5lZ2F0ZToKKyAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2FzZSBBcml0aERp
djoKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
KyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBBcml0aDo6TW9kZSBhcml0aE1vZGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc0FyaXRoTW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFyaXRoOjpNb2Rl
PihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJpdGhNb2RlKEFyaXRoOjpN
b2RlIG1vZGUpCisgICAgeworICAgICAgICBtX29wSW5mbyA9IG1vZGU7CisgICAgfQorICAgIAog
ICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Zp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2MTI0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOTIsMTAgKzIwOTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVBcml0aE11bChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEFyaXRoSU11bDoKLSAgICAgICAgY29tcGlsZUFyaXRo
SU11bChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIEFyaXRoRGl2OiB7CiAgICAg
ICAgIGNvbXBpbGVBcml0aERpdihub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjMsMTAgKzI0MjMsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVBcml0aE11bChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEFyaXRoSU11bDoKLSAgICAgICAgY29t
cGlsZUFyaXRoSU11bChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIEFyaXRoRGl2
OiB7CiAgICAgICAgIGNvbXBpbGVBcml0aERpdihub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTcsNyArMjAxNyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVVJbnQzMlRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlQ2FuU3Bl
Y3VsYXRlSW50MzIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICBpZiAoZG9lc092ZXJm
bG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBz
b21ldGltZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQogICAg
ICAgICAvLyB0aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gbm90
IGhhdmUgd2VpcmQgY29uZGl0aW9uYWxzLgogICAgICAgICAgICAgCkBAIC0yMDM3LDcgKzIwMzcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIWJ5dGVjb2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChu
b2RlLT5hcml0aE1vZGUoKSA9PSBBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CiAKICAgICBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwpAQCAtMjA2MCw4ICsyMDYwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVEb3VibGVBc0ludDMKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICBib29s
IG5lZ1plcm9DaGVjayA9ICFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE5vZGVGbGFncygpKTsKLSAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMih2YWx1
ZUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIsIG5lZ1plcm9DaGVjayk7
CisgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUo
KSkpOworICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKAorICAgICAgICB2YWx1
ZUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIsCisgICAgICAgIHNob3Vs
ZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CiAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgZmFpbHVyZUNhc2VzKTsKIAogICAgIGlu
dDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0yNTg1LDEyICsyNTg3LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KIHsKICAgICBzd2l0Y2ggKG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewogICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgQVNTRVJU
KCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpOworICAgICAgICAK
ICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewog
ICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3co
bm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1t
MSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI2MDUsNyArMjYwOSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgICAg
IGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3co
bm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1t
MiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI2MjMsNyArMjYyNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgR1BS
UmVnIGdwcjIgPSBvcDIuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBncHJSZXN1bHQgPSByZXN1bHQu
Z3ByKCk7CiAKLSAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2Rl
LT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKICAg
ICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIyLCBncHJSZXN1bHQpOwogICAgICAgICAgICAg
ZWxzZSB7CkBAIC0yNjQ3LDYgKzI2NTEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QWRkKE5vZGUqIG5vCiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBNYWNo
aW5lSW50VXNlOiB7CisgICAgICAgIEFTU0VSVChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFy
aXRoTW9kZSgpKSk7CisgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9k
ZS0+YXJpdGhNb2RlKCkpKTsKKwogICAgICAgICAvLyBXaWxsIHdlIG5lZWQgYW4gb3ZlcmZsb3cg
Y2hlY2s/IElmIHdlIGNhbiBwcm92ZSB0aGF0IG5laXRoZXIgaW5wdXQgY2FuIGJlCiAgICAgICAg
IC8vIEludDUyIHRoZW4gdGhlIG92ZXJmbG93IGNoZWNrIHdpbGwgbm90IGJlIG5lY2Vzc2FyeS4K
ICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNvdWxkQmVUeXBl
KFNwZWNJbnQ1MikKQEAgLTI3NjAsMTIgKzI3NjcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoU3ViKE5vZAogewogICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgp
KSB7CiAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICBBU1NFUlQoIXNob3VsZENoZWNrTmVn
YXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIAogICAgICAgICBpZiAoaXNO
dW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgICAg
ICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
IHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUo
KSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihJbW0zMihpbW0yKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNzgzLDcgKzI3OTIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShJ
bW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGlmIChieXRlY29kZUNhblRy
dW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgIGlmICgh
c2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKQEAgLTI3OTYsNyArMjgwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAKLSAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5h
cml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkp
OwogICAgICAgICB9IGVsc2UKQEAgLTI4MDgsNiArMjgxNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBjYXNlIE1hY2hpbmVJbnRVc2U6IHsKKyAgICAgICAgQVNTRVJUKHNob3VsZENoZWNrT3ZlcmZs
b3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRDaGVja05lZ2F0
aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpOworCiAgICAgICAgIC8vIFdpbGwgd2UgbmVlZCBh
biBvdmVyZmxvdyBjaGVjaz8gSWYgd2UgY2FuIHByb3ZlIHRoYXQgbmVpdGhlciBpbnB1dCBjYW4g
YmUKICAgICAgICAgLy8gSW50NTIgdGhlbiB0aGUgb3ZlcmZsb3cgY2hlY2sgd2lsbCBub3QgYmUg
bmVjZXNzYXJ5LgogICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
Y291bGRCZVR5cGUoU3BlY0ludDUyKQpAQCAtMjg2NCw5ICsyODc2LDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAgICAvLyBOb3RlOiB0aGVyZSBpcyBu
byBub3Rpb24gb2YgYmVpbmcgbm90IHVzZWQgYXMgYSBudW1iZXIsIGJ1dCBzb21lb25lCiAgICAg
ICAgIC8vIGNhcmluZyBhYm91dCBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAKLSAgICAgICAgaWYg
KGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAg
ICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAg
ICAgICAgbV9qaXQubmVnMzIocmVzdWx0LmdwcigpKTsKLSAgICAgICAgZWxzZSBpZiAoYnl0ZWNv
ZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAg
IGVsc2UgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpCiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2hOZWczMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlc3VsdC5ncHIoKSkp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZikpKTsKQEAgLTI4NzksNiAr
Mjg5MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBNYWNoaW5lSW50VXNlOiB7CisgICAgICAgIEFTU0VS
VChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIAogICAg
ICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3Bl
Y0ludDUyKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlV2hpY2hldmVySW50NTJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwpAQCAtMjg4Niw3ICsyOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoTmVnYXRlKAogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgbV9qaXQubmVnNjQocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5J
Z25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAg
IGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICAgTmVnYXRp
dmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwpAQCAtMjkwMyw3ICsy
OTE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgSW50NTJPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaE5lZzY0KE1hY3JvQXNzZW1ibGVyOjpP
dmVyZmxvdywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKCFzaG91bGRD
aGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygp
LCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0R1BSKSk7CkBAIC0yOTI4LDIxICsyOTQyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAgICByZXR1cm47CiAgICAgfQogfQotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoSU11bChOb2RlKiBub2RlKQotewotICAgIFNw
ZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1
bGF0ZUludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICBH
UFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKLQotICAgIG1faml0Lm1vdmUocmVnMSwgcmVzdWx0Lmdw
cigpKTsKLSAgICBtX2ppdC5tdWwzMihyZWcyLCByZXN1bHQuZ3ByKCkpOwotICAgIGludDMyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgcmV0dXJuOwotfQotCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewpAQCAtMjk1Nyw3ICsyOTU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICAvLyBXZSBjYW4gcGVyZm9ybSB0cnVu
Y2F0ZWQgbXVsdGlwbGljYXRpb25zIGlmIHdlIGdldCB0byB0aGlzIHBvaW50LCBiZWNhdXNlIGlm
IHRoZQogICAgICAgICAvLyBmaXh1cCBwaGFzZSBjb3VsZCBub3QgcHJvdmUgdGhhdCBpdCB3b3Vs
ZCBiZSBzYWZlLCBpdCB3b3VsZCBoYXZlIHR1cm5lZCB1cyBpbnRvCiAgICAgICAgIC8vIGEgZG91
YmxlIG11bHRpcGxpY2F0aW9uLgotICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKCFzaG91bGRDaGVja092
ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShyZWcx
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQubXVsMzIocmVnMiwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI5NjcsNyArMjk2Niw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2YgdGhpcyBu
b2RlIGNhcmUgYWJvdXQgc3VjaCB0aGluZ3MuCi0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZElt
bTMyKDApKSk7CkBAIC0yOTgwLDYgKzI5NzksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhNdWwoTm9kCiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkgICAKICAgICBjYXNlIE1h
Y2hpbmVJbnRVc2U6IHsKKyAgICAgICAgQVNTRVJUKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+
YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgY2xldmVy
LiBXZSB3YW50IHRvIGRvIGFuIGludDUyIG11bHRpcGxpY2F0aW9uIGFuZCBjaGVjayB0aGUKICAg
ICAgICAgLy8gaW50NTIgb3ZlcmZsb3cgYml0LiBUaGVyZSBpcyBubyBkaXJlY3QgaGFyZHdhcmUg
c3VwcG9ydCBmb3IgdGhpcywgYnV0IHdlIGRvCiAgICAgICAgIC8vIGhhdmUgdGhlIGFiaWxpdHkg
dG8gZG8gYW4gaW50NjQgbXVsdGlwbGljYXRpb24gYW5kIGNoZWNrIHRoZSBpbnQ2NCBvdmVyZmxv
dwpAQCAtMzAxNyw3ICszMDE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRo
TXVsKE5vZAogICAgICAgICAgICAgSW50NTJPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaE11bDY0KE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ay
R1BSLCByZXN1bHRHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3Q2NCgK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCkBAIC0zMDg3LDcgKzMwODgsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhEaXYoTm9kCiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIHNhZmVEZW5vbWluYXRvciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZSwg
dGVtcCwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSk7CiAgICAgCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBpZiAoYnl0ZWNvZGVVc2VzQXNOdW1iZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZs
b3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92
ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Olplcm8sIG9wMkdQUikpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDFH
UFIsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgICAgICB9IGVsc2UgewpAQCAt
MzExNSw3ICszMTE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5v
ZAogICAgIAogICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6ZXJv
LCB0aGVuIHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAvLyB0byBwcm9k
dWNlIG5lZ2F0aXZlIHplcm8uCi0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2
ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNr
TmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICBu
dW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKQEAgLTMxMzUsNyArMzEzNiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKIAogICAgICAgICAvLyBDaGVjayB0
aGF0IHRoZXJlIHdhcyBubyByZW1haW5kZXIuIElmIHRoZXJlIGhhZCBiZWVuLCB0aGVuIHdlJ2Qg
YmUgb2JsaWdhdGVkIHRvCiAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGluc3Rl
YWQuCi0gICAgICAgIGlmIChieXRlY29kZVVzZXNBc051bWJlcihub2RlLT5hcml0aE5vZGVGbGFn
cygpKSkKKyAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkp
KQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBlZHguZ3ByKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtMzE1MCw3ICszMTUxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAgIC8v
IElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRo
YXQgd2UncmUgbm90IGFib3V0CiAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4K
LSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5v
ZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+
YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBudW1lcmF0
b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBv
cDFHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFs
dWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3Ay
R1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIG51bWVyYXRvck5vblplcm8ubGlu
aygmbV9qaXQpOwpAQCAtMzE2MCw3ICszMTYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgd2FzIG5vIHJl
bWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBvYmxpZ2F0ZWQgdG8KICAg
ICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVhZC4KLSAgICAgICAgaWYgKGJ5
dGVjb2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlm
IChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNo
TXVsMzIoSklUQ29tcGlsZXI6Ok92ZXJmbG93LCBxdW90aWVudC5ncHIoKSwgb3AyR1BSLCBtdWx0
aXBseUFuc3dlci5ncHIoKSkpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxv
dywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFs
LCBtdWx0aXBseUFuc3dlci5ncHIoKSwgb3AxR1BSKSk7CiAgICAgICAgIH0KQEAgLTMxNzYsNyAr
MzE3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKIAogICAg
ICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6ZXJvLCB0aGVuIHNwZWN1
bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAvLyB0byBwcm9kdWNlIG5lZ2F0aXZl
IHplcm8uCi0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJv
KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgb3AxR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJv
LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICBudW1lcmF0b3JOb25a
ZXJvLmxpbmsoJm1faml0KTsKQEAgLTMxODYsNyArMzE4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aERpdihOb2QKIAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIHdh
cyBubyByZW1haW5kZXIuIElmIHRoZXJlIGhhZCBiZWVuLCB0aGVuIHdlJ2QgYmUgb2JsaWdhdGVk
IHRvCiAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGluc3RlYWQuCi0gICAgICAg
IGlmIChieXRlY29kZVVzZXNBc051bWJlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAg
ICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0
LmJyYW5jaE11bDMyKEpJVENvbXBpbGVyOjpPdmVyZmxvdywgcXVvdGllbnQuZ3ByKCksIG9wMkdQ
UiwgbXVsdGlwbHlBbnN3ZXIuZ3ByKCkpKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgbXVsdGlwbHlBbnN3ZXIuZ3ByKCksIG9wMUdQUikpOwogICAgICAgICB9CkBAIC0z
Mjc0LDcgKzMyNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9k
CiAgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihkaXZpZGVuZEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVn
YXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBD
aGVjayB0aGF0IHdlJ3JlIG5vdCBhYm91dCB0byBjcmVhdGUgbmVnYXRpdmUgemVyby4KICAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBkaXZpZGVuZEdQUiwg
VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhO
ZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21w
aWxlcjo6WmVybywgcmVzdWx0R1BSKSk7CkBAIC0zMzExLDcgKzMzMTIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoZGl2aXNvciksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1f
aml0LmFzc2VtYmxlcigpLmNkcSgpOwogICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigp
LmlkaXZsX3Ioc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaWYgKCFieXRlY29kZUNhbkln
bm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDFTYXZlR1BS
LCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGls
ZXI6Olplcm8sIGVkeC5ncHIoKSkpOwogICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3JQb3Np
dGl2ZS5saW5rKCZtX2ppdCk7CkBAIC0zMzY4LDcgKzMzNjksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogLTJe
MzEgLyAtMSB3aWxsIGFjdHVhbGx5IHlpZWxkIG5lZ2F0aXZlIHplcm8sIHNvIHdlIGNvdWxkIGhh
dmUgYQogICAgICAgICAvLyBzZXBhcmF0ZSBjYXNlIGZvciB0aGF0LiBCdXQgaXQgcHJvYmFibHkg
ZG9lc24ndCBtYXR0ZXIgc28gbXVjaC4KLSAgICAgICAgaWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVy
KG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJm
bG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVy
OjpaZXJvLCBvcDJHUFIpKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3Ax
R1BSLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTM0MDcsNyArMzQwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChO
b2QKICAgICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsKIAogICAgICAgICAvLyBDaGVjayB0
aGF0IHdlJ3JlIG5vdCBhYm91dCB0byBjcmVhdGUgbmVnYXRpdmUgemVyby4KLSAgICAgICAgaWYg
KCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkp
KSB7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIs
IFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93
LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8s
IGVkeC5ncHIoKSkpOwogICAgICAgICAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluaygmbV9qaXQp
OwpAQCAtMzQyOSwxMiArMzQzMCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhNb2QoTm9kCiAgICAgICAgIEdQUlJlZyBtdWx0aXBseUFuc3dlckdQUiA9IG11bHRpcGx5QW5z
d2VyLmdwcigpOwogCiAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnNkaXYocXVvdGllbnRUaGVu
UmVtYWluZGVyR1BSLCBkaXZpZGVuZEdQUiwgZGl2aXNvckdQUik7CisgICAgICAgIC8vIEZJWE1F
OiBJdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRoaXM/
IFdoYXQgaWYgd2UgaGF2ZQorICAgICAgICAvLyBhcml0aE1vZGUoKSA9PSBBcml0aDo6VW5jaGVj
a2VkPworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2NDQ0CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaE11bDMyKEpJVENvbXBpbGVyOjpPdmVyZmxvdywgcXVvdGllbnRUaGVu
UmVtYWluZGVyR1BSLCBkaXZpc29yR1BSLCBtdWx0aXBseUFuc3dlckdQUikpOwogICAgICAgICBt
X2ppdC5hc3NlbWJsZXIoKS5zdWIocXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpZGVuZEdQ
UiwgbXVsdGlwbHlBbnN3ZXJHUFIpOwogCiAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFi
b3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAg
ICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KLSAgICAgICAgaWYgKCFieXRlY29k
ZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAg
ICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhYm91dCB0byBjcmVhdGUgbmVnYXRpdmUg
emVyby4KICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG51bWVyYXRvclBvc2l0aXZlID0g
bV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgZGl2aWRlbmRH
UFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olpl
cm8sIHF1b3RpZW50VGhlblJlbWFpbmRlckdQUikpOwpAQCAtMzQ1MiwxMiArMzQ1NiwxNSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIEdQUlJlZyBt
dWx0aXBseUFuc3dlckdQUiA9IG11bHRpcGx5QW5zd2VyLmdwcigpOwogCiAgICAgICAgIG1faml0
LmFzc2VtYmxlcigpLnNkaXY8MzI+KHF1b3RpZW50VGhlblJlbWFpbmRlckdQUiwgZGl2aWRlbmRH
UFIsIGRpdmlzb3JHUFIpOworICAgICAgICAvLyBGSVhNRTogSXQgc2VlbXMgbGlrZSB0aGVyZSBh
cmUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0aGlzPyBXaGF0IGlmIHdlIGhhdmUKKyAgICAg
ICAgLy8gYXJpdGhNb2RlKCkgPT0gQXJpdGg6OlVuY2hlY2tlZD8KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjQ0NAogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hNdWwzMihK
SVRDb21waWxlcjo6T3ZlcmZsb3csIHF1b3RpZW50VGhlblJlbWFpbmRlckdQUiwgZGl2aXNvckdQ
UiwgbXVsdGlwbHlBbnN3ZXJHUFIpKTsKICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuc3ViPDMy
PihxdW90aWVudFRoZW5SZW1haW5kZXJHUFIsIGRpdmlkZW5kR1BSLCBtdWx0aXBseUFuc3dlckdQ
Uik7CiAKICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywg
dGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKICAgICAgICAgLy8gdG8gcHJvZHVj
ZSBuZWdhdGl2ZSB6ZXJvLgotICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVa
ZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja05l
Z2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBkaXZpZGVuZEdQUiwgVHJ1c3RlZEltbTMyKDAp
KTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgcXVvdGllbnRUaGVuUmVt
YWluZGVyR1BSKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNTIsNyArMjA1Miw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aFN1YihOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlQXJpdGhOZWdhdGUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUq
KTsKLSAgICB2b2lkIGNvbXBpbGVBcml0aElNdWwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFy
aXRoRGl2KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE1vZChOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRlcihOb2RlKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220365</attachid>
            <date>2014-01-03 20:12:19 -0800</date>
            <delta_ts>2014-01-06 13:47:34 -0800</delta_ts>
            <desc>more correcter</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54965</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2MTI0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNiArOTUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCiAgICAgZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR0FyaXRoTW9kZS5j
cHAKICAgICBkZmcvREZHQXJyYXlNb2RlLmNwcAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmNwcAogICAgIGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIx
MSw2ICsyMTEsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhH
ZW5lcmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw2
ICszNTEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SGVh
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RWYWx1
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXJpdGhNb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
cnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0F2YWlsYWJpbGl0eS5jcHAiIC8+CkBAIC04NDksNiArODUwLDcgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudFBvc2l0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiIC8+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYxMjQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsOCBAQAogCQkwRjQ2ODBEMzE0QkJEMTY3
MDBCRkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NjgwRDQx
NEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcy
IC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2ODBENTE0QkJEMjRCMDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjQ4NTMyMTE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDg1MzFGMTg3NzUw
NTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwICovOyB9OworCQkwRjQ4NTMyMjE4Nzc1MDU2
MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQ4NTMyMDE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4
QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENF
M0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CkBAIC0xNTc4LDYgKzE1ODAsOCBAQAog
CQkwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50RGF0YS5oOyBwYXRoID0gbGxpbnQvTExJbnREYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDg1MzFGMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
QXJpdGhNb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcml0aE1vZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQ4NTMyMDE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyaXRoTW9kZS5oOyBwYXRo
ID0gZGZnL0RGR0FyaXRoTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5
M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NTQxQUYxNjEzQzFGQjAwQ0Uz
RTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNwZWNpYWxQb2ludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM4NTUsOCArMzg1OSw2IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJBQ0NGM0RDMTg1
RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwICovLAotCQkJ
CTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
aCAqLywKIAkJCQlBNzdBNDIzNjE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNw
cCAqLywKIAkJCQlBNzdBNDIzNzE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
Ki8sCiAJCQkJQTcwNEQ4RkUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaCAqLywKQEAgLTM4NjksNiArMzg3MSw4IEBACiAJCQkJMEYxRTNBNDMxNTM0Q0JBRDAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLywKIAkJCQkwRjE2MDE1QTE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEYx
NjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLywKKwkJCQkwRjQ4NTMxRjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmNwcCAq
LywKKwkJCQkwRjQ4NTMyMDE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggKi8sCiAJ
CQkJMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLywKIAkJCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCAqLywKIAkJCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8s
CkBAIC00MDQzLDYgKzQwNDcsOCBAQAogCQkJCTBGQzIwQ0I4MTg1NTZBMzUwMEM5RTk1NCAvKiBE
RkdTU0FMb3dlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovLAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdG
OCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCisJCQkJMkFDQ0YzREMxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8sCisJCQkJMkFDQ0YzREQx
ODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAogCQkJ
CTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5oICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmggKi8sCkBAIC00Nzk5LDYgKzQ4MDUsNyBAQAogCQkJCUE3QzBDNEFD
MTY4MTAzMDIwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0
aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyog
SlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTAzLDYgKzU1MTAsNyBAQAog
CQkJCTBGODMzNUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3QThBRjM0MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1
ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQgLyog
QXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNDg1MzIxMTg3NzUwNTYw
MDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYx
MDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdCREFFQzYxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJ
dGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDExICsyMDIs
NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAg
ICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRo
ZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgogICAgICAgICBBU1NFUlQoIW1fc3Rh
dGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKQEAgLTM0MSwxMiArMzM2LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICBK
U1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKLSAgICAgICAg
aWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigp
ICsgcmlnaHQuYXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAg
ICAgICAgQVNTRVJUKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
QEAgLTM1NiwyMyArMzQ1LDQxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICBjYXNlIEFyaXRoQWRkOiB7CiAgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAg
aWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc0ludDMyKCkgJiYgcmlnaHQuaXNJbnQzMigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9k
ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChqc051bWJlcihsZWZ0LmFz
SW50MzIoKSArIHJpZ2h0LmFzSW50MzIoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigpKTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVy
Zmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6
CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTWFjaGluZUludCgpICYm
IHJpZ2h0LmlzTWFjaGluZUludCgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihsZWZ0LmFzTWFjaGluZUludCgpICsgcmlnaHQuYXNNYWNoaW5lSW50KCkpOwor
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNNYWNoaW5lSW50KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQ1Mik7CiAgICAgICAgICAgICBpZiAoIWZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmlzVHlwZShTcGVjSW50MzIpCiAgICAgICAgICAgICAgICAgfHwgIWZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmlzVHlwZShTcGVjSW50MzIpKQogICAgICAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50
KG5vZGUsIGpzTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Z1
bGxSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQog
ICAgICAgICAgICAgICAgICYmIGlzRnVsbFJlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjRG91YmxlUmVhbCk7CkBAIC0zOTQsMjMgKzQwMSw0MSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBBcml0aFN1YjogewogICAgICAg
ICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAg
ICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKLSAgICAg
ICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJl
cigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
ICAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJ
bnQzMlVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNJbnQzMigp
ICYmIHJpZ2h0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tP
dmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQoanNOdW1iZXIobGVmdC5hc0ludDMyKCkgKyByaWdodC5hc0ludDMyKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1i
ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoIWJ5dGVj
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAg
ICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBNYWNoaW5lSW50VXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYg
bGVmdC5pc01hY2hpbmVJbnQoKSAmJiByaWdodC5pc01hY2hpbmVJbnQoKSkgeworICAgICAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVmdC5hc01hY2hpbmVJbnQoKSAtIHJp
Z2h0LmFzTWFjaGluZUludCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTWFjaGlu
ZUludCgpIHx8ICFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCByZXN1bHQpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDUyKTsKICAgICAgICAgICAgIGlmICgh
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuaXNUeXBlKFNwZWNJbnQzMikKICAgICAgICAgICAgICAg
ICB8fCAhZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuaXNUeXBlKFNwZWNJbnQzMikpCiAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxl
ZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwganNOdW1iZXIobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIo
KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CkBAIC00MjgsMTggKzQ1Myw1MSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAg
IGlmIChjaGlsZCAmJiBjaGlsZC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90
IGludFJlc3VsdCA9IC1jaGlsZC5hc0ludDMyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFzaG91
bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcigtY2hpbGQuYXNJbnQzMigpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBk
b3VibGUgZG91YmxlUmVzdWx0OworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0
aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZVJl
c3VsdCA9IC1jaGlsZC5hc051bWJlcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgZG91YmxlUmVzdWx0ID0gMCAtIGNoaWxkLmFzTnVtYmVyKCk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3VsdCA9IGpzTnVtYmVyKGRvdWJsZVJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVzdWx0LmlzSW50MzIoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCB2YWx1ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKCFieXRl
Y29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAgICAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5p
c01hY2hpbmVJbnQoKSkgeworICAgICAgICAgICAgICAgIGRvdWJsZSBkb3VibGVSZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9k
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0ID0gLWNoaWxkLmFzTnVtYmVy
KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1
bHQgPSAwIC0gY2hpbGQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
UmVzdWx0ID0ganNOdW1iZXIoZG91YmxlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWVSZXN1bHQuaXNNYWNoaW5lSW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwgdmFsdWVSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDUyKTsKICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpCiAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAoc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKSkgewor
ICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKC1jaGlsZC5hc051bWJl
cigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTQ1OSw4ICs1MTcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5UcnVuY2F0
ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKLSAgICAgICAgICAgICAgICB8fCAhYnl0
ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAg
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6CkBAIC00ODEsMTEgKzUzOCw2IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBBcml0aElNdWw6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBBcml0
aERpdjoKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6CkBAIC0xNjIxLDEx
ICsxNjczLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNl
IFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIExhc3ROb2RlVHlw
ZToKKyAgICBjYXNlIEFyaXRoSU11bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcml0aE1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJpdGhNb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJpdGhNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBcml0aE1vZGUuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkFyaXRoOjpN
b2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKU0M6OkRGRzo6QXJp
dGg6Ok5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RTZXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNDOjpERkc6OkFyaXRoOjpVbmNoZWNrZWQ6CisgICAgICAgIG91dC5wcmlu
dCgiVW5jaGVja2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0
aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja092ZXJmbG93Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6Q2hlY2tPdmVyZmxvd0Fu
ZE5lZ2F0aXZlWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja092ZXJmbG93QW5kTmVnYXRp
dmVaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6RG9P
dmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJEb092ZXJmbG93Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0FyaXRoTW9kZV9oCisjZGVmaW5lIERGR0FyaXRoTW9kZV9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBB
cml0aDo6TW9kZSBkZXNjcmliZXMgdGhlIG1vZGUgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24g
dGhhdCBzcGVjdWxhdGVzIGludGVnZXIuCisvLyBOb3RlIHRoYXQgbm90IGFsbCBtb2RlcyBhcmUg
dmFsaWQgZm9yIGFsbCBvcGVyYXRpb25zLgorbmFtZXNwYWNlIEFyaXRoIHsKK2VudW0gTW9kZSB7
CisgICAgTm90U2V0LCAvLyBBcml0aG1ldGljIG1vZGUgaXMgZWl0aGVyIG5vdCByZWxldmFudCBi
ZWNhdXNlIHdlJ3JlIHVzaW5nIGRvdWJsZXMgYW55d2F5IG9yIHdlIGFyZSBhdCBhIHBoYXNlIGlu
IGNvbXBpbGF0aW9uIHdoZXJlIHdlIGRvbid0IGtub3cgd2hhdCB3ZSdyZSBkb2luZywgeWV0LiBT
aG91bGQgbmV2ZXIgc2VlIHRoaXMgYWZ0ZXIgRml4dXBQaGFzZSBleGNlcHQgZm9yIG5vZGVzIHRo
YXQgdGFrZSBkb3VibGVzIGFzIGlucHV0cyBhbHJlYWR5LgorICAgIFVuY2hlY2tlZCwgLy8gRG9u
J3QgY2hlY2sgYW55dGhpbmcgYW5kIGp1c3QgZG8gYW4gaW50ZWdlciBvcGVyYXRpb24uCisgICAg
Q2hlY2tPdmVyZmxvdywgLy8gQ2hlY2sgZm9yIG92ZXJmbG93IGJ1dCBkb24ndCBib3RoZXIgd2l0
aCBuZWdhdGl2ZSB6ZXJvLgorICAgIENoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8sIC8vIENo
ZWNrIGZvciBib3RoIG92ZXJmbG93IGFuZCBuZWdhdGl2ZSB6ZXJvLgorICAgIERvT3ZlcmZsb3cg
Ly8gRXZlbiB0aG91Z2ggdGhlIGlucHV0cyBhcmUgaW50ZWdlcnMsIHVwLWNvbnZlcnQgdGhlbSB0
byBkb3VibGVzIGFuZCByZXR1cm4gYSBkb3VibGUuCit9OworfSAvLyBuYW1lc3BhY2UgQXJpdGgK
KworaW5saW5lIGJvb2wgZG9lc092ZXJmbG93KEFyaXRoOjpNb2RlIG1vZGUpCit7CisgICAgc3dp
dGNoIChtb2RlKSB7CisgICAgY2FzZSBBcml0aDo6Tm90U2V0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBjYXNlIEFyaXRoOjpVbmNoZWNrZWQ6CisgICAgY2FzZSBBcml0aDo6
Q2hlY2tPdmVyZmxvdzoKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVa
ZXJvOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcml0aDo6RG9PdmVyZmxvdzoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBJdCdzIG9ubHkgdmFsaWQgdG8gY2FsbCB0aGlzIG9u
Y2UgeW91J3ZlIGRldGVybWluZWQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byAqZG8qCisvLyBvdmVy
Zmxvdy4gRm9yIG1vc3Qgbm9kZXMsIHRoYXQncyBpbXBsaWNpdC4KK2lubGluZSBib29sIHNob3Vs
ZENoZWNrT3ZlcmZsb3coQXJpdGg6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEFyaXRoOjpOb3RTZXQ6CisgICAgY2FzZSBBcml0aDo6RG9PdmVyZmxvdzoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgQXJpdGg6OlVuY2hlY2tlZDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJp
dGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0
aXZlWmVybzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBzaG91bGRDaGVja05l
Z2F0aXZlWmVybyhBcml0aDo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAg
IGNhc2UgQXJpdGg6Ok5vdFNldDoKKyAgICBjYXNlIEFyaXRoOjpEb092ZXJmbG93OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBB
cml0aDo6VW5jaGVja2VkOgorICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVa
ZXJvOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkFyaXRoOjpNb2RlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FyaXRoTW9k
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDggKzEzNiwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSAhPSBvdGhlck5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzQXJpdGhNb2RlKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gb3RoZXJOb2RlLT5hcml0aE1vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEVkZ2Ugb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQxKCk7
CiAgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCkBAIC0xMDgyLDcgKzEwODQsNiBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgog
ICAgICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoSU11bDoKICAgICAgICAg
Y2FzZSBBcml0aE1vZDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2FzZSBBcml0
aEFiczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBCaXRYb3I6CiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBj
YXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBjYXNlIEJp
dFVSU2hpZnQ6IHsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhJTXVsOiB7CiAgICAg
ICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEludEVk
Z2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoQXJpdGhNdWwpOwor
ICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpVbmNoZWNrZWQpOworICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExNCw2ICsxMjMsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50MzIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJm
bG93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1v
ZGUoQXJpdGg6OkRvT3ZlcmZsb3cpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtMjEwLDEwICsyMjMsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBB
cml0aE5lZ2F0ZTogewogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3Vs
YXRlSW50MzIobm9kZSkpIHsKICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Ynl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxv
dyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRB
cml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8pOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVn
YXRlU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludChub2RlKSkgewogICAgICAgICAgICAgICAgIGZp
eEVkZ2U8TWFjaGluZUludFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGlm
IChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJm
bG93KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaXhFZGdlPE51bWJl
clVzZT4obm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjI0LDExICsyNDcsMjEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUpKSB7CiAg
ICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6VW5jaGVj
a2VkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZl
WmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVy
Zmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50
KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNlPihub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVa
ZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJm
bG93QW5kTmVnYXRpdmVaZXJvKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2RlLT5jaGlsZDEoKSk7CkBAIC0y
NDMsNiArMjc2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG9wdGltaXplRm9y
WDg2KCkgfHwgb3B0aW1pemVGb3JBUk02NCgpIHx8IG9wdGltaXplRm9yQVJNdjdzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9k
ZShBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZWNv
ZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8pOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKQEAgLTI1OCw2ICsyOTcsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChEb3Vi
bGVBc0ludDMyKTsKICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVk
Z2UobmV3RGl2aXNpb24sIEtub3duTnVtYmVyVXNlKSwgRWRnZSgpLCBFZGdlKCkpOworICAgICAg
ICAgICAgICAgIGlmIChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5v
ZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRo
OjpDaGVja092ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVy
byk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShtX2luZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2Rl
T3JpZ2luLCBjaGlsZDEsIGNoaWxkMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjU1
LDEyICsxNjk4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50c0lm
TmVjZXNzYXJ5KG5vZGUsIG1vZGUpOwogICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0
aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNw
ZWN1bGF0ZU1hY2hpbmVJbnQobm9kZSkpIHsKICAgICAgICAgICAgIGZpeEVkZ2U8TWFjaGluZUlu
dFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNl
Pihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6
OkNoZWNrT3ZlcmZsb3cpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgU3BlY3VsYXRpb25EdW1w
KG5vZGUtPnByZWRpY3Rpb24oKSkpOwogICAgIGlmIChub2RlLT5oYXNBcnJheU1vZGUoKSkKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5hcnJheU1vZGUoKSk7CisgICAgaWYgKG5vZGUt
Pmhhc0FyaXRoTW9kZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPmFyaXRoTW9k
ZSgpKTsKICAgICBpZiAobm9kZS0+aGFzVmFyTnVtYmVyKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgbm9kZS0+dmFyTnVtYmVyKCkpOwogICAgIGlmIChub2RlLT5oYXNSZWdpc3RlclBvaW50
ZXIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjEy
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJE
RkdBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHQWRqYWNlbmN5TGlzdC5oIgorI2luY2x1
ZGUgIkRGR0FyaXRoTW9kZS5oIgogI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgiCkBAIC0xMTE4LDYgKzEx
MTksMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CisgICAgYm9vbCBoYXNBcml0aE1vZGUoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhOZWdhdGU6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgIGNhc2Ug
QXJpdGhEaXY6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6CisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgQXJpdGg6Ok1vZGUgYXJpdGhNb2RlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNBcml0aE1vZGUoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcml0
aDo6TW9kZT4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyaXRoTW9kZShB
cml0aDo6TW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgbV9vcEluZm8gPSBtb2RlOworICAgIH0K
KyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
NjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDEwICsyMDkyLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlQXJpdGhNdWwobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBBcml0aElNdWw6Ci0gICAgICAgIGNvbXBp
bGVBcml0aElNdWwobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBBcml0aERpdjog
ewogICAgICAgICBjb21waWxlQXJpdGhEaXYobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDcw
Miw2ICs0Njk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICBjYXNl
IENoZWNrSW5Cb3VuZHM6CisgICAgY2FzZSBBcml0aElNdWw6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyMywxMCArMjQyMyw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGlsZUFyaXRoTXVsKG5v
ZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQXJpdGhJTXVsOgotICAgICAgICBjb21w
aWxlQXJpdGhJTXVsKG5vZGUpOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2UgQXJpdGhEaXY6
IHsKICAgICAgICAgY29tcGlsZUFyaXRoRGl2KG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTUw
MDIsNiArNDk5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAg
ICAgY2FzZSBDaGVja0luQm91bmRzOgorICAgIGNhc2UgQXJpdGhJTXVsOgogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTcsNyArMjAxNyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVVJbnQzMlRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlQ2FuU3BlY3Vs
YXRlSW50MzIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICBpZiAoZG9lc092ZXJmbG93
KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21l
dGltZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQogICAgICAg
ICAvLyB0aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gbm90IGhh
dmUgd2VpcmQgY29uZGl0aW9uYWxzLgogICAgICAgICAgICAgCkBAIC0yMDM3LDcgKzIwMzcsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5hcml0aE1vZGUoKSA9PSBBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CiAKICAgICBTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwpAQCAtMjA2MCw4ICsyMDYwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVEb3VibGVBc0ludDMKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICBib29sIG5l
Z1plcm9DaGVjayA9ICFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5v
ZGVGbGFncygpKTsKLSAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMih2YWx1ZUZQ
UiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIsIG5lZ1plcm9DaGVjayk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkp
OworICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKAorICAgICAgICB2YWx1ZUZQ
UiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIsCisgICAgICAgIHNob3VsZENo
ZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CiAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgZmFpbHVyZUNhc2VzKTsKIAogICAgIGludDMy
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0yNTg1LDEyICsyNTg3LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KIHsKICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgewogICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgQVNTRVJUKCFz
aG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpOworICAgICAgICAKICAg
ICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewogICAg
ICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
IAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9k
ZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMSks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI2MDUsNyArMjYwOSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgICAgIGlu
dDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9k
ZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMiks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI2MjMsNyArMjYyNyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgR1BSUmVn
IGdwcjIgPSBvcDIuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBncHJSZXN1bHQgPSByZXN1bHQuZ3By
KCk7CiAKLSAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5h
cml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKICAgICAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihncHIyLCBncHJSZXN1bHQpOwogICAgICAgICAgICAgZWxz
ZSB7CkBAIC0yNjQ3LDYgKzI2NTEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRk
KE5vZGUqIG5vCiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBNYWNoaW5l
SW50VXNlOiB7CisgICAgICAgIEFTU0VSVChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRo
TW9kZSgpKSk7CisgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+
YXJpdGhNb2RlKCkpKTsKKwogICAgICAgICAvLyBXaWxsIHdlIG5lZWQgYW4gb3ZlcmZsb3cgY2hl
Y2s/IElmIHdlIGNhbiBwcm92ZSB0aGF0IG5laXRoZXIgaW5wdXQgY2FuIGJlCiAgICAgICAgIC8v
IEludDUyIHRoZW4gdGhlIG92ZXJmbG93IGNoZWNrIHdpbGwgbm90IGJlIG5lY2Vzc2FyeS4KICAg
ICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNw
ZWNJbnQ1MikKQEAgLTI2NzMsNiArMjY4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBZGQoTm9kZSogbm8KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogICAgIAogICAgIGNhc2Ug
TnVtYmVyVXNlOiB7CisgICAgICAgIEFTU0VSVChkb2VzT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2Rl
KCkpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpA
QCAtMjc2MCwxMiArMjc2OCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhT
dWIoTm9kCiB7CiAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKICAgICBjYXNl
IEludDMyVXNlOiB7CisgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9k
ZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgaW50MzJfdCBpbW0y
ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgICAgIGlmIChieXRlY29k
ZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAg
ICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgICAgIG1faml0LnN1YjMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKQEAgLTI3ODMsNyArMjc5Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKGltbTEpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092
ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihv
cDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIo
KSkpOwpAQCAtMjc5Niw3ICsyODA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoU3ViKE5vZAogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAg
ICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
IHsKKyAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkg
ewogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIH0g
ZWxzZQpAQCAtMjgwOCw2ICsyODE4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoU3ViKE5vZAogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgTWFjaGlu
ZUludFVzZTogeworICAgICAgICBBU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0
aE1vZGUoKSkpOworICAgICAgICBBU1NFUlQoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTW9kZSgpKSk7CisKICAgICAgICAgLy8gV2lsbCB3ZSBuZWVkIGFuIG92ZXJmbG93IGNo
ZWNrPyBJZiB3ZSBjYW4gcHJvdmUgdGhhdCBuZWl0aGVyIGlucHV0IGNhbiBiZQogICAgICAgICAv
LyBJbnQ1MiB0aGVuIHRoZSBvdmVyZmxvdyBjaGVjayB3aWxsIG5vdCBiZSBuZWNlc3NhcnkuCiAg
ICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShT
cGVjSW50NTIpCkBAIC0yODM0LDYgKzI4NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhTdWIoTm9kCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogICAgIGNhc2UgTnVt
YmVyVXNlOiB7CisgICAgICAgIEFTU0VSVChkb2VzT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkp
KTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTI4NjQs
OSArMjg3OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAg
ICAgICAgLy8gTm90ZTogdGhlcmUgaXMgbm8gbm90aW9uIG9mIGJlaW5nIG5vdCB1c2VkIGFzIGEg
bnVtYmVyLCBidXQgc29tZW9uZQogICAgICAgICAvLyBjYXJpbmcgYWJvdXQgbmVnYXRpdmUgemVy
by4KICAgICAgICAgCi0gICAgICAgIGlmIChieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5v
ZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgIG1faml0Lm5lZzMyKHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgIGVsc2UgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICBlbHNlIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVpl
cm8obm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoTmVnMzIoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93LCByZXN1bHQuZ3ByKCkpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKDB4
N2ZmZmZmZmYpKSk7CkBAIC0yODc5LDYgKzI4OTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhOZWdhdGUoCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgTWFjaGlu
ZUludFVzZTogeworICAgICAgICBBU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0
aE1vZGUoKSkpOworICAgICAgICAKICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpIHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZVdoaWNoZXZlckludDUyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTI4ODYsNyArMjkwMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQ
UiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1faml0Lm5lZzY0KHJlc3VsdEdQUik7Ci0gICAg
ICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAg
ICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHRHUFIpKTsKQEAgLTI5MDMsNyArMjkxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aE5lZ2F0ZSgKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
IEludDUyT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hOZWc2NChNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlc3VsdEdQUikpOwotICAgICAgICBp
ZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KSB7CisgICAgICAgIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2Rl
KCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIE5l
Z2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwpAQCAtMjkxNCw2ICsy
OTMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIAogICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAg
ICAgIEFTU0VSVChkb2VzT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKQEAgLTI5MjgsMjEgKzI5NDUsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiB9Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhJTXVsKE5vZGUq
IG5vZGUpCi17Ci0gICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyByZWcxID0g
b3AxLmdwcigpOwotICAgIEdQUlJlZyByZWcyID0gb3AyLmdwcigpOwotCi0gICAgbV9qaXQubW92
ZShyZWcxLCByZXN1bHQuZ3ByKCkpOwotICAgIG1faml0Lm11bDMyKHJlZzIsIHJlc3VsdC5ncHIo
KSk7Ci0gICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICByZXR1cm47Ci19
Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2RlKiBub2RlKQogewog
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CkBAIC0yOTU3LDcgKzI5NTksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgICAgIC8vIFdl
IGNhbiBwZXJmb3JtIHRydW5jYXRlZCBtdWx0aXBsaWNhdGlvbnMgaWYgd2UgZ2V0IHRvIHRoaXMg
cG9pbnQsIGJlY2F1c2UgaWYgdGhlCiAgICAgICAgIC8vIGZpeHVwIHBoYXNlIGNvdWxkIG5vdCBw
cm92ZSB0aGF0IGl0IHdvdWxkIGJlIHNhZmUsIGl0IHdvdWxkIGhhdmUgdHVybmVkIHVzIGludG8K
ICAgICAgICAgLy8gYSBkb3VibGUgbXVsdGlwbGljYXRpb24uCi0gICAgICAgIGlmIChieXRlY29k
ZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBp
ZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHJlZzEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5tdWwz
MihyZWcyLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjk2Nyw3ICsyOTY5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRo
ZSB1c2VycyBvZiB0aGlzIG5vZGUgY2FyZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgaWYg
KCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkp
KSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3Rl
ZEltbTMyKDApKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKQEAgLTI5ODAsNiArMjk4Miw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0
KSAgIAogICAgIGNhc2UgTWFjaGluZUludFVzZTogeworICAgICAgICBBU1NFUlQoc2hvdWxkQ2hl
Y2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpOworICAgICAgICAKICAgICAgICAgLy8gVGhp
cyBpcyBzdXBlciBjbGV2ZXIuIFdlIHdhbnQgdG8gZG8gYW4gaW50NTIgbXVsdGlwbGljYXRpb24g
YW5kIGNoZWNrIHRoZQogICAgICAgICAvLyBpbnQ1MiBvdmVyZmxvdyBiaXQuIFRoZXJlIGlzIG5v
IGRpcmVjdCBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGlzLCBidXQgd2UgZG8KICAgICAgICAgLy8g
aGF2ZSB0aGUgYWJpbGl0eSB0byBkbyBhbiBpbnQ2NCBtdWx0aXBsaWNhdGlvbiBhbmQgY2hlY2sg
dGhlIGludDY0IG92ZXJmbG93CkBAIC0zMDE3LDcgKzMwMjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgICAgICAgICBJbnQ1Mk92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoTXVsNjQoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCBvcDJHUFIsIHJlc3VsdEdQUikpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkp
KSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9q
aXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTMwMzUsNiAr
MzAzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTY0KQogICAgICAgICAKICAgICBjYXNlIE51bWJlclVzZTogeworICAg
ICAgICBBU1NFUlQoZG9lc092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSk7CiAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTMwODcsNyArMzA5Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgc2FmZURlbm9taW5hdG9yID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6OkFib3ZlLCB0ZW1wLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpKTsKICAgICAKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGlmIChieXRlY29kZVVz
ZXNBc051bWJlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxk
Q2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6WmVybywgb3AyR1BSKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6
RXF1YWwsIG9wMUdQUiwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgICAgIH0g
ZWxzZSB7CkBAIC0zMTE1LDcgKzMxMjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhEaXYoTm9kCiAgICAgCiAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5l
Z2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAg
IC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbkln
bm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAo
c2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAg
ICAgICAgICAgIG51bWVyYXRvck5vblplcm8ubGluaygmbV9qaXQpOwpAQCAtMzEzNSw3ICszMTQw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAg
IC8vIENoZWNrIHRoYXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4s
IHRoZW4gd2UnZCBiZSBvYmxpZ2F0ZWQgdG8KICAgICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSBy
ZXN1bHQgaW5zdGVhZC4KLSAgICAgICAgaWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5h
cml0aE1vZGUoKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGVk
eC5ncHIoKSkpOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC0zMTUw
LDcgKzMxNTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhEaXYoTm9kCiAK
ICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywgdGhlbiBz
cGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKICAgICAgICAgLy8gdG8gcHJvZHVjZSBuZWdh
dGl2ZSB6ZXJvLgotICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZl
WmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG51bWVyYXRvck5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIG9wMUdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
WmVybywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCBvcDJHUFIsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgbnVtZXJhdG9y
Tm9uWmVyby5saW5rKCZtX2ppdCk7CkBAIC0zMTYwLDcgKzMxNjUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhEaXYoTm9kCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVy
ZSB3YXMgbm8gcmVtYWluZGVyLiBJZiB0aGVyZSBoYWQgYmVlbiwgdGhlbiB3ZSdkIGJlIG9ibGln
YXRlZCB0bwogICAgICAgICAvLyBwcm9kdWNlIGEgZG91YmxlIHJlc3VsdCBpbnN0ZWFkLgotICAg
ICAgICBpZiAoYnl0ZWNvZGVVc2VzQXNOdW1iZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsK
KyAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2hNdWwzMihKSVRDb21waWxlcjo6T3ZlcmZsb3csIHF1b3RpZW50LmdwcigpLCBv
cDJHUFIsIG11bHRpcGx5QW5zd2VyLmdwcigpKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxl
cjo6Tm90RXF1YWwsIG11bHRpcGx5QW5zd2VyLmdwcigpLCBvcDFHUFIpKTsKICAgICAgICAgfQpA
QCAtMzE3Niw3ICszMTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2
KE5vZAogCiAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8s
IHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAgIC8vIHRvIHByb2R1
Y2UgbmVnYXRpdmUgemVyby4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZl
WmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhO
ZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIG51
bWVyYXRvck5vblplcm8ubGluaygmbV9qaXQpOwpAQCAtMzE4Niw3ICszMTkxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBi
ZSBvYmxpZ2F0ZWQgdG8KICAgICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVh
ZC4KLSAgICAgICAgaWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgp
KSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3Mo
KSwgMCwgbV9qaXQuYnJhbmNoTXVsMzIoSklUQ29tcGlsZXI6Ok92ZXJmbG93LCBxdW90aWVudC5n
cHIoKSwgb3AyR1BSLCBtdWx0aXBseUFuc3dlci5ncHIoKSkpOwogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBtdWx0aXBseUFuc3dlci5ncHIoKSwgb3AxR1BSKSk7CiAgICAg
ICAgIH0KQEAgLTMxOTksNiArMzIwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aERpdihOb2QKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAg
ICAgIEFTU0VSVChkb2VzT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTMyNzQsNyArMzI4MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgICAgICAgICBt
X2ppdC5uZWczMihyZXN1bHRHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKGRpdmlk
ZW5kR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJp
dGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UncmUgbm90
IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBp
bGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGRpdmlkZW5kR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwog
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRH
UFIpKTsKQEAgLTMzMTEsNyArMzMxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE1vZChOb2QKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihkaXZp
c29yKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2Rx
KCk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNr
TmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIsIFRydXN0ZWRJbW0zMigwKSk7
CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgZWR4Lmdwcigp
KSk7CiAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsoJm1faml0KTsK
QEAgLTMzNjgsNyArMzM3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1v
ZChOb2QKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiAtMl4zMSAvIC0xIHdpbGwgYWN0dWFs
bHkgeWllbGQgbmVnYXRpdmUgemVybywgc28gd2UgY291bGQgaGF2ZSBhCiAgICAgICAgIC8vIHNl
cGFyYXRlIGNhc2UgZm9yIHRoYXQuIEJ1dCBpdCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBzbyBt
dWNoLgotICAgICAgICBpZiAoYnl0ZWNvZGVVc2VzQXNOdW1iZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2Rl
KCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQUikpOwog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDFHUFIsIFRydXN0ZWRJbW0zMigt
MjE0NzQ4MzY0Ny0xKSkpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzQwNyw3ICszNDEzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogICAgICAgICAgICAgdW5s
b2NrKG9wMlRlbXBHUFIpOwogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UncmUgbm90IGFib3V0
IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJvLgotICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3Jl
TmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChzaG91
bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxU2F2ZUdQUiwgVHJ1c3RlZEltbTMyKDApKTsK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgZWR4LmdwcigpKSk7CiAgICAg
ICAgICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKCZtX2ppdCk7CkBAIC0zNDI5LDEyICszNDM1
LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAg
R1BSUmVnIG11bHRpcGx5QW5zd2VyR1BSID0gbXVsdGlwbHlBbnN3ZXIuZ3ByKCk7CiAKICAgICAg
ICAgbV9qaXQuYXNzZW1ibGVyKCkuc2RpdihxdW90aWVudFRoZW5SZW1haW5kZXJHUFIsIGRpdmlk
ZW5kR1BSLCBkaXZpc29yR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2UgdGhl
cmUgYXJlIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQgdGhpcz8gV2hhdCBpZiB3ZSBoYXZlCisg
ICAgICAgIC8vIGFyaXRoTW9kZSgpID09IEFyaXRoOjpVbmNoZWNrZWQ/CisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY0NDQKICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoTXVs
MzIoSklUQ29tcGlsZXI6Ok92ZXJmbG93LCBxdW90aWVudFRoZW5SZW1haW5kZXJHUFIsIGRpdmlz
b3JHUFIsIG11bHRpcGx5QW5zd2VyR1BSKSk7CiAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnN1
YihxdW90aWVudFRoZW5SZW1haW5kZXJHUFIsIGRpdmlkZW5kR1BSLCBtdWx0aXBseUFuc3dlckdQ
Uik7CiAKICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywg
dGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKICAgICAgICAgLy8gdG8gcHJvZHVj
ZSBuZWdhdGl2ZSB6ZXJvLgotICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVa
ZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja05l
Z2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBkaXZpZGVuZEdQUiwgVHJ1c3RlZEltbTMyKDAp
KTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgcXVvdGllbnRUaGVuUmVt
YWluZGVyR1BSKSk7CkBAIC0zNDUyLDEyICszNDYxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgR1BSUmVnIG11bHRpcGx5QW5zd2VyR1BSID0g
bXVsdGlwbHlBbnN3ZXIuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuc2Rpdjwz
Mj4ocXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpZGVuZEdQUiwgZGl2aXNvckdQUik7Cisg
ICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBk
b24ndCBuZWVkIHRoaXM/IFdoYXQgaWYgd2UgaGF2ZQorICAgICAgICAvLyBhcml0aE1vZGUoKSA9
PSBBcml0aDo6VW5jaGVja2VkPworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI2NDQ0CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaE11bDMyKEpJVENvbXBpbGVyOjpPdmVyZmxv
dywgcXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpc29yR1BSLCBtdWx0aXBseUFuc3dlckdQ
UikpOwogICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5zdWI8MzI+KHF1b3RpZW50VGhlblJlbWFp
bmRlckdQUiwgZGl2aWRlbmRHUFIsIG11bHRpcGx5QW5zd2VyR1BSKTsKIAogICAgICAgICAvLyBJ
ZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6ZXJvLCB0aGVuIHNwZWN1bGF0ZSB0aGF0
IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAvLyB0byBwcm9kdWNlIG5lZ2F0aXZlIHplcm8uCi0g
ICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFy
aXRoTW9kZSgpKSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWJvdXQg
dG8gY3JlYXRlIG5lZ2F0aXZlIHplcm8uCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
dW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIGRpdmlkZW5kR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpaZXJvLCBxdW90aWVudFRoZW5SZW1haW5kZXJHUFIpKTsKQEAgLTM0
NzIsNiArMzQ4NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIEFTU0VSVChk
b2VzT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDUyLDcgKzIwNTIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlQXJpdGhTdWIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoTmVnYXRlKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE11bChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlQXJp
dGhJTXVsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFn
ZVBvaW50ZXIoTm9kZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220453</attachid>
            <date>2014-01-06 13:47:34 -0800</date>
            <delta_ts>2014-01-06 16:00:33 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64636</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2MTI0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNiArOTUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCiAgICAgZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR0FyaXRoTW9kZS5j
cHAKICAgICBkZmcvREZHQXJyYXlNb2RlLmNwcAogICAgIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmNwcAogICAgIGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIx
MSw2ICsyMTEsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhH
ZW5lcmF0b3IuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw2
ICszNTEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SGVh
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RWYWx1
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXJpdGhNb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
cnJheU1vZGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0F2YWlsYWJpbGl0eS5jcHAiIC8+CkBAIC04NDksNiArODUwLDcgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudFBvc2l0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiIC8+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYxMjQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsOCBAQAogCQkwRjQ2ODBEMzE0QkJEMTY3
MDBCRkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NjgwRDQx
NEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcy
IC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2ODBENTE0QkJEMjRCMDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjQ4NTMyMTE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDg1MzFGMTg3NzUw
NTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwICovOyB9OworCQkwRjQ4NTMyMjE4Nzc1MDU2
MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQ4NTMyMDE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4
QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENF
M0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CkBAIC0xNTc4LDYgKzE1ODAsOCBAQAog
CQkwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50RGF0YS5oOyBwYXRoID0gbGxpbnQvTExJbnREYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDg1MzFGMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
QXJpdGhNb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcml0aE1vZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQ4NTMyMDE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyaXRoTW9kZS5oOyBwYXRo
ID0gZGZnL0RGR0FyaXRoTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5
M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NTQxQUYxNjEzQzFGQjAwQ0Uz
RTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNwZWNpYWxQb2ludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM4NTUsOCArMzg1OSw2IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJBQ0NGM0RDMTg1
RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwICovLAotCQkJ
CTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
aCAqLywKIAkJCQlBNzdBNDIzNjE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNw
cCAqLywKIAkJCQlBNzdBNDIzNzE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
Ki8sCiAJCQkJQTcwNEQ4RkUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaCAqLywKQEAgLTM4NjksNiArMzg3MSw4IEBACiAJCQkJMEYxRTNBNDMxNTM0Q0JBRDAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLywKIAkJCQkwRjE2MDE1QTE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEYx
NjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLywKKwkJCQkwRjQ4NTMxRjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmNwcCAq
LywKKwkJCQkwRjQ4NTMyMDE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggKi8sCiAJ
CQkJMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLywKIAkJCQkwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCAqLywKIAkJCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8s
CkBAIC00MDQzLDYgKzQwNDcsOCBAQAogCQkJCTBGQzIwQ0I4MTg1NTZBMzUwMEM5RTk1NCAvKiBE
RkdTU0FMb3dlcmluZ1BoYXNlLmggKi8sCiAJCQkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovLAogCQkJCTBGOUZCNEYzMTdGQ0I5MTcwMENCNjdG
OCAvKiBERkdTdGFja0xheW91dFBoYXNlLmggKi8sCisJCQkJMkFDQ0YzREMxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8sCisJCQkJMkFDQ0YzREQx
ODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAogCQkJ
CTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5oICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmggKi8sCkBAIC00Nzk5LDYgKzQ4MDUsNyBAQAogCQkJCUE3QzBDNEFD
MTY4MTAzMDIwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0
aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyog
SlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTAzLDYgKzU1MTAsNyBAQAog
CQkJCTBGODMzNUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3QThBRjM0MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1
ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQgLyog
QXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNDg1MzIxMTg3NzUwNTYw
MDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYx
MDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdCREFFQzYxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJ
dGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDExICsyMDIs
NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAg
ICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRo
ZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgogICAgICAgICBBU1NFUlQoIW1fc3Rh
dGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKQEAgLTI1NCwxOCArMjQ5LDI0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewogICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjaGls
ZC5pc0ludDMyKCkpOwotICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBjaGlsZC5hc0ludDMy
KCk7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcih2YWx1ZSkpOworICAg
ICAgICBpZiAoZG9lc092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZhbHVlID0gY2hpbGQuYXNJbnQzMigpOworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIGpzTnVtYmVyKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0
ZUludDMyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBpZiAo
Y2hpbGQgJiYgY2hpbGQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICBpbnQzMl90IHZhbHVlID0g
Y2hpbGQuYXNJbnQzMigpOworICAgICAgICAgICAgaWYgKHZhbHVlID49IDApIHsKKyAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcih2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTM0MSwxMiArMzQyLDYgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjU3RyaW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKQEAgLTM1NiwyMyArMzUxLDQxIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEFyaXRoQWRk
OiB7CiAgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVl
KCk7CiAgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1
ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShs
ZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewogICAg
ICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc0ludDMyKCkgJiYgcmlnaHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFz
aG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihsZWZ0LmFzSW50MzIoKSArIHJpZ2h0LmFz
SW50MzIoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihsZWZ0LmFzTnVtYmVy
KCkgKyByaWdodC5hc051bWJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzSW50
MzIoKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIGlmICghYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6CisgICAgICAgICAgICBpZiAo
bGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTWFjaGluZUludCgpICYmIHJpZ2h0LmlzTWFjaGluZUlu
dCgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihsZWZ0LmFz
TWFjaGluZUludCgpICsgcmlnaHQuYXNNYWNoaW5lSW50KCkpOworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNNYWNoaW5lSW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQ1Mik7CiAgICAgICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmlz
VHlwZShTcGVjSW50MzIpCiAgICAgICAgICAgICAgICAgfHwgIWZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLmlzVHlwZShTcGVjSW50MzIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAg
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNO
dW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKGxl
ZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Z1bGxSZWFsTnVtYmVyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQogICAgICAgICAgICAgICAgICYm
IGlzRnVsbFJlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVh
bCk7CkBAIC0zOTQsMjMgKzQwNyw0MSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgY2FzZSBBcml0aFN1YjogewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0g
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGxlZnQgJiYgcmln
aHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1i
ZXIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgc3dpdGNoIChu
b2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNJbnQzMigpICYmIHJpZ2h0LmlzSW50MzIo
KSkgeworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0
aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1i
ZXIobGVmdC5hc0ludDMyKCkgLSByaWdodC5hc0ludDMyKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKHNob3Vs
ZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNYWNo
aW5lSW50VXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc01hY2hp
bmVJbnQoKSAmJiByaWdodC5pc01hY2hpbmVJbnQoKSkgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIobGVmdC5hc01hY2hpbmVJbnQoKSAtIHJpZ2h0LmFzTWFjaGlu
ZUludCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTWFjaGluZUludCgpIHx8ICFz
aG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0ludDUyKTsKICAgICAgICAgICAgIGlmICghZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuaXNUeXBlKFNwZWNJbnQzMikKICAgICAgICAgICAgICAgICB8fCAhZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuaXNUeXBlKFNwZWNJbnQzMikpCiAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwganNOdW1iZXIobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CkBAIC00MjIsMjQgKzQ1Myw1MiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKICAgICAgICAgSlNW
YWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlm
IChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBKU1ZhbHVlKC1jaGlsZC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAg
ICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzSW50
MzIoKSkgeworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5h
cml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNO
dW1iZXIoLWNoaWxkLmFzSW50MzIoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZG91YmxlIGRvdWJsZVJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2Rl
KCkpKQorICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQgPSAtY2hpbGQuYXNOdW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3Vs
dCA9IDAgLSBjaGlsZC5hc051bWJlcigpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWVS
ZXN1bHQgPSBqc051bWJlcihkb3VibGVSZXN1bHQpOworICAgICAgICAgICAgICAgIGlmICh2YWx1
ZVJlc3VsdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgdmFsdWVSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVy
Zmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6
CisgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNNYWNoaW5lSW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBkb3VibGUgZG91YmxlUmVzdWx0OworICAgICAgICAgICAgICAgIGlmIChzaG91
bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZVJlc3VsdCA9IC1jaGlsZC5hc051bWJlcigpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0ID0gMCAtIGNoaWxkLmFzTnVtYmVy
KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3VsdCA9IGpzTnVtYmVyKGRvdWJs
ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVzdWx0LmlzTWFjaGluZUludCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHZhbHVlUmVzdWx0KTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQ1Mik7CiAgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShT
cGVjSW50NTIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCBqc051bWJlcigtY2hpbGQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC00
NTIsMjIgKzUxMSw0NSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgY2FzZSBBcml0aE11bDogewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNJbnQzMigpICYmIHJpZ2h0LmlzSW50MzIoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIobGVmdC5h
c0ludDMyKCkgKiByaWdodC5hc0ludDMyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRvdWJsZSBkb3VibGVSZXN1bHQg
PSBsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpOworICAgICAgICAgICAgICAgIGlm
ICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKQorICAgICAgICAg
ICAgICAgICAgICBkb3VibGVSZXN1bHQgKz0gMDsgLy8gU2FuaXRpemVzIHplcm8uCisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3VsdCA9IGpzTnVtYmVyKGRvdWJsZVJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVzdWx0LmlzSW50MzIoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCB2YWx1ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKCFieXRl
Y29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQotICAgICAgICAg
ICAgICAgIHx8ICFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVG
bGFncygpKSkKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRo
TW9kZSgpKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAgICAgICAgICAgIGlm
IChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNNYWNoaW5lSW50KCkgJiYgcmlnaHQuaXNNYWNoaW5l
SW50KCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZG91YmxlUmVzdWx0ID0gbGVmdC5hc051
bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZENo
ZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ZG91YmxlUmVzdWx0ICs9IDA7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3VsdCA9
IGpzTnVtYmVyKGRvdWJsZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVzdWx0
LmlzTWFjaGluZUludCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUs
IHZhbHVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQ1Mik7CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQg
JiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihsZWZ0LmFzTnVtYmVyKCkgKiBy
aWdodC5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoaXNGdWxsUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICB8fCBpc0Z1bGxSZWFsTnVtYmVy
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZVJlYWwpOwpAQCAtNDgwLDQ2ICs1
NjIsMTIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBjYXNlIEFyaXRoSU11bDogewotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgCisgICAgY2Fz
ZSBBcml0aERpdjogeworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkudmFsdWUoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYm
IGxlZnQuaXNJbnQzMigpICYmIHJpZ2h0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGRv
dWJsZSBkb3VibGVSZXN1bHQgPSBsZWZ0LmFzTnVtYmVyKCkgLyByaWdodC5hc051bWJlcigpOwor
ICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUo
KSkpCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCA9IHRvSW50MzIoZG91YmxlUmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8o
bm9kZS0+YXJpdGhNb2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQgKz0g
MDsgLy8gU2FuaXRpemVzIHplcm8uCisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3Vs
dCA9IGpzTnVtYmVyKGRvdWJsZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVz
dWx0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2
YWx1ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYm
IHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CisgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIobGVmdC5hc051bWJlcigpIC8gcmln
aHQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoRGl2OgotICAgIGNhc2UgQXJpdGhN
aW46Ci0gICAgY2FzZSBBcml0aE1heDoKKwogICAgIGNhc2UgQXJpdGhNb2Q6IHsKICAgICAgICAg
SlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
SlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7Ci0gICAgICAg
IGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigp
KSB7Ci0gICAgICAgICAgICBkb3VibGUgYSA9IGxlZnQuYXNOdW1iZXIoKTsKLSAgICAgICAgICAg
IGRvdWJsZSBiID0gcmlnaHQuYXNOdW1iZXIoKTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgY2FzZSBBcml0aERpdjoKLSAgICAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCBKU1ZhbHVlKGEgLyBiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIEpTVmFsdWUoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhID4gYiA/IGEgOiAoYiA+PSBhID8gYiA6IGEg
KyBiKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5p
c0ludDMyKCkgJiYgcmlnaHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGRv
dWJsZVJlc3VsdCA9IGZtb2QobGVmdC5hc051bWJlcigpLCByaWdodC5hc051bWJlcigpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkp
KQorICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQgPSB0b0ludDMyKGRvdWJsZVJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0ICs9IDA7
IC8vIFNhbml0aXplcyB6ZXJvLgorICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWVSZXN1bHQg
PSBqc051bWJlcihkb3VibGVSZXN1bHQpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZVJlc3Vs
dC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdmFs
dWVSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgeworICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKGZtb2QobGVmdC5hc051bWJlcigpLCBy
aWdodC5hc051bWJlcigpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBBcml0aE1vZDoKLSAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBKU1ZhbHVl
KGZtb2QoYSwgYikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJp
dGhNaW46IHsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LnZhbHVlKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAg
ICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0
LmlzSW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCBqc051bWJlcihzdGQ6Om1pbihsZWZ0LmFzSW50MzIoKSwgcmlnaHQuYXNJbnQz
MigpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5p
c051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUg
YSA9IGxlZnQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFz
TnVtYmVyKCk7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoYSA8
IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhN
YXg6IHsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZh
bHVlKCk7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CiAgICAgICAg
IGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0Lmlz
SW50MzIoKSAmJiByaWdodC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCBqc051bWJlcihzdGQ6Om1heChsZWZ0LmFzSW50MzIoKSwgcmlnaHQuYXNJbnQzMigp
KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJp
Z2h0LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgYSA9IGxlZnQuYXNOdW1i
ZXIoKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgYiA9IHJpZ2h0LmFzTnVtYmVyKCk7CisgICAg
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoYSA+IGIgPyBhIDogKGIgPj0g
YSA/IGIgOiBhICsgYikpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTMxLDE2ICs2ODksMjMgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aEFiczogewogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsK
LSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZmFicyhjaGlsZC5hc051bWJl
cigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkpOworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzIpOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAg
IGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQobm9kZSwganNOdW1iZXIoY2hpbGQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0x
NjIxLDExICsxNzg2LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAKKyAg
ICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIExhc3RO
b2RlVHlwZToKKyAgICBjYXNlIEFyaXRoSU11bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBcml0aE1vZGUuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkFy
aXRoOjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKU0M6OkRG
Rzo6QXJpdGg6Ok5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RTZXQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSlNDOjpERkc6OkFyaXRoOjpVbmNoZWNrZWQ6CisgICAgICAgIG91
dC5wcmludCgiVW5jaGVja2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZH
OjpBcml0aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja092ZXJmbG93
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6Q2hlY2tPdmVy
Zmxvd0FuZE5lZ2F0aXZlWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja092ZXJmbG93QW5k
TmVnYXRpdmVaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0
aDo6RG9PdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJEb092ZXJmbG93Iik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0FyaXRoTW9kZV9oCisjZGVmaW5lIERGR0FyaXRoTW9kZV9oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CisvLyBBcml0aDo6TW9kZSBkZXNjcmliZXMgdGhlIG1vZGUgb2YgYW4gYXJpdGhtZXRpYyBvcGVy
YXRpb24gdGhhdCBzcGVjdWxhdGVzIGludGVnZXIuCisvLyBOb3RlIHRoYXQgbm90IGFsbCBtb2Rl
cyBhcmUgdmFsaWQgZm9yIGFsbCBvcGVyYXRpb25zLgorbmFtZXNwYWNlIEFyaXRoIHsKK2VudW0g
TW9kZSB7CisgICAgTm90U2V0LCAvLyBBcml0aG1ldGljIG1vZGUgaXMgZWl0aGVyIG5vdCByZWxl
dmFudCBiZWNhdXNlIHdlJ3JlIHVzaW5nIGRvdWJsZXMgYW55d2F5IG9yIHdlIGFyZSBhdCBhIHBo
YXNlIGluIGNvbXBpbGF0aW9uIHdoZXJlIHdlIGRvbid0IGtub3cgd2hhdCB3ZSdyZSBkb2luZywg
eWV0LiBTaG91bGQgbmV2ZXIgc2VlIHRoaXMgYWZ0ZXIgRml4dXBQaGFzZSBleGNlcHQgZm9yIG5v
ZGVzIHRoYXQgdGFrZSBkb3VibGVzIGFzIGlucHV0cyBhbHJlYWR5LgorICAgIFVuY2hlY2tlZCwg
Ly8gRG9uJ3QgY2hlY2sgYW55dGhpbmcgYW5kIGp1c3QgZG8gYW4gaW50ZWdlciBvcGVyYXRpb24u
CisgICAgQ2hlY2tPdmVyZmxvdywgLy8gQ2hlY2sgZm9yIG92ZXJmbG93IGJ1dCBkb24ndCBib3Ro
ZXIgd2l0aCBuZWdhdGl2ZSB6ZXJvLgorICAgIENoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8s
IC8vIENoZWNrIGZvciBib3RoIG92ZXJmbG93IGFuZCBuZWdhdGl2ZSB6ZXJvLgorICAgIERvT3Zl
cmZsb3cgLy8gRXZlbiB0aG91Z2ggdGhlIGlucHV0cyBhcmUgaW50ZWdlcnMsIHVwLWNvbnZlcnQg
dGhlbSB0byBkb3VibGVzIGFuZCByZXR1cm4gYSBkb3VibGUuCit9OworfSAvLyBuYW1lc3BhY2Ug
QXJpdGgKKworaW5saW5lIGJvb2wgZG9lc092ZXJmbG93KEFyaXRoOjpNb2RlIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcml0aDo6Tm90U2V0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjYXNlIEFyaXRoOjpVbmNoZWNrZWQ6CisgICAgY2FzZSBB
cml0aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVn
YXRpdmVaZXJvOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcml0aDo6RG9PdmVy
ZmxvdzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBJdCdzIG9ubHkgdmFsaWQgdG8gY2FsbCB0
aGlzIG9uY2UgeW91J3ZlIGRldGVybWluZWQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byAqZG8qCisv
LyBvdmVyZmxvdy4gRm9yIG1vc3Qgbm9kZXMsIHRoYXQncyBpbXBsaWNpdC4KK2lubGluZSBib29s
IHNob3VsZENoZWNrT3ZlcmZsb3coQXJpdGg6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEFyaXRoOjpOb3RTZXQ6CisgICAgY2FzZSBBcml0aDo6RG9PdmVyZmxv
dzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgQXJpdGg6OlVuY2hlY2tlZDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNh
c2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvd0Fu
ZE5lZ2F0aXZlWmVybzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBzaG91bGRD
aGVja05lZ2F0aXZlWmVybyhBcml0aDo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgQXJpdGg6Ok5vdFNldDoKKyAgICBjYXNlIEFyaXRoOjpEb092ZXJmbG93Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBBcml0aDo6VW5jaGVja2VkOgorICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVn
YXRpdmVaZXJvOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkFyaXRoOjpNb2RlKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fy
aXRoTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDggKzEzNiwxMCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gb3RoZXJOb2RlLT5vcCgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSAhPSBvdGhlck5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzQXJpdGhNb2RlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gb3RoZXJOb2RlLT5hcml0
aE1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEVkZ2Ugb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hp
bGQxKCk7CiAgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCkBAIC0xMDgyLDcgKzEwODQsNiBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgogICAgICAgICBjYXNlIEFyaXRoTmVn
YXRlOgogICAgICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoSU11bDoKICAg
ICAgICAgY2FzZSBBcml0aE1vZDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2Fz
ZSBBcml0aEFiczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzU1LDYgKzM1NSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaW52YWxpZGF0ZWQgdGhlbiB3ZSBzaG91bGRuJ3QgYXR0ZW1wdCB0byBjb25z
dGFudC1mb2xkLiBIZXJlJ3MgYW4KKyAgICAgICAgICAgICAgICAvLyBleGFtcGxlOgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgIGM6IEpTQ29uc3RhbnQoNC4yKQor
ICAgICAgICAgICAgICAgIC8vICAgICB4OiBWYWx1ZVRvSW50MzIoQ2hlY2s6SW50MzI6QGNvbnN0
KQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgY29y
cmVjdCBmb3IgYW4gYW5hbHlzaXMgdG8gYXNzdW1lIHRoYXQgZXhlY3V0aW9uIGNhbm5vdAorICAg
ICAgICAgICAgICAgIC8vIHByb2NlZWQgcGFzdCBAeC4gVGhlcmVmb3JlLCBjb25zdGFudC1mb2xk
aW5nIEB4IGNvdWxkIGJlIHJhdGhlciBiYWQuIEJ1dCwKKyAgICAgICAgICAgICAgICAvLyB0aGUg
Q0ZBIG1heSByZXBvcnQgdGhhdCBpdCBmb3VuZCBhIGNvbnN0YW50IGV2ZW4gdGhvdWdoIGl0IGFs
c28gcmVwb3J0ZWQKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIGJlZW4g
aW52YWxpZGF0ZWQuIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiBpbiBhIGNvdXBsZSBvZgorICAgICAg
ICAgICAgICAgIC8vIHRoZSBjb25zdGFudCBmb2xkaW5nIGNhc2VzOyBtb3N0IG9mIHRoZW0gYXJl
IGFsc28gc2VwYXJhdGVseSBkZWZlbnNpdmUKKyAgICAgICAgICAgICAgICAvLyBhYm91dCBzdWNo
IHRoaW5ncy4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSB8fCBtX3N0YXRlLmRpZENsb2JiZXIoKSB8
fCBub2RlLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS52YWx1ZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTAgKzEwMywxOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEJpdFhvcjoKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNo
aWZ0OgotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDog
eworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBm
aXhJbnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aElNdWw6IHsKICAgICAgICAgICAgIGZp
eEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBub2RlLT5zZXRPcChBcml0aE11bCk7CisgICAgICAgICAg
ICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMTE0LDYgKzEyMywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBpZiAo
Ynl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGVDYW5TcGVjdWxhdGVJbnQzMihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6
RG9PdmVyZmxvdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC0yMTAsMTAgKzIyMywyMCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRoTmVnYXRl
OiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihu
b2RlKSkgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9k
ZShBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlY29kZUNh
bklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93KTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShB
cml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRT
cGVjdWxhdGVNYWNoaW5lSW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNYWNo
aW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2Rl
Q2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2Rl
KEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2Rl
LT5jaGlsZDEoKSk7CkBAIC0yMjQsMTEgKzI0NywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSkpIHsKICAgICAgICAgICAg
ICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAg
Zml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGlmIChi
eXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpVbmNoZWNrZWQpOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1v
ZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVn
YXRpdmVaZXJvKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZU1hY2hpbmVJbnQobm9kZSkpIHsK
ICAgICAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9k
ZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdh
dGl2ZVplcm8pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI0Myw2ICsyNzYs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAob3B0aW1pemVGb3JYODYoKSB8fCBv
cHRpbWl6ZUZvckFSTTY0KCkgfHwgb3B0aW1pemVGb3JBUk12N3MoKSkgewogICAgICAgICAgICAg
ICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpV
bmNoZWNrZWQpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChieXRlY29kZUNhbklnbm9y
ZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRo
TW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBFZGdlIGNo
aWxkMSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMjU4LDYgKzI5NywxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIp
OwogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZp
c2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CisgICAgICAgICAgICAgICAg
aWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3Zl
cmZsb3cpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG1f
aW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGNo
aWxkMSwgY2hpbGQyKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE2NTUsMTIgKzE2OTgs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nhcnko
bm9kZSwgbW9kZSk7CiAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpVbmNoZWNr
ZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9k
ZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlTWFj
aGluZUludChub2RlKSkgewogICAgICAgICAgICAgZml4RWRnZTxNYWNoaW5lSW50VXNlPihub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVy
Zmxvdyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjEyNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk4LDYgKzE5OCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+cHJl
ZGljdGlvbigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc0FycmF5TW9kZSgpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG5vZGUtPmFycmF5TW9kZSgpKTsKKyAgICBpZiAobm9kZS0+aGFzQXJpdGhN
b2RlKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+YXJpdGhNb2RlKCkpOwogICAg
IGlmIChub2RlLT5oYXNWYXJOdW1iZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2Rl
LT52YXJOdW1iZXIoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1JlZ2lzdGVyUG9pbnRlcigpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0
VmFsdWUuaCIKICNpbmNsdWRlICJERkdBZGphY2VuY3lMaXN0LmgiCisjaW5jbHVkZSAiREZHQXJp
dGhNb2RlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCiAjaW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKQEAgLTE4MCw2ICsxODEsOCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkp
CiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9u
ZSkKKyAgICAgICAgLCBtX29wSW5mbygwKQorICAgICAgICAsIG1fb3BJbmZvMigwKQogICAgIHsK
ICAgICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZs
YWdzKG9wKTsKQEAgLTE5NSw2ICsxOTgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9y
ZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBt
X29wSW5mbyhpbW0ubV92YWx1ZSkKKyAgICAgICAgLCBtX29wSW5mbzIoMCkKICAgICB7CiAgICAg
ICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhv
cCk7CkBAIC0xMTE4LDYgKzExMjIsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNBcml0aE1vZGUoKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2Ug
QXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgICAgIGNhc2UgQXJpdGhN
dWw6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgQXJpdGg6Ok1vZGUgYXJpdGhNb2Rl
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBcml0aE1vZGUoKSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBcml0aDo6TW9kZT4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldEFyaXRoTW9kZShBcml0aDo6TW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgbV9vcElu
Zm8gPSBtb2RlOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDEwICsyMDky
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBj
b21waWxlQXJpdGhNdWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBBcml0aElN
dWw6Ci0gICAgICAgIGNvbXBpbGVBcml0aElNdWwobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotCiAg
ICAgY2FzZSBBcml0aERpdjogewogICAgICAgICBjb21waWxlQXJpdGhEaXYobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtNDcwMiw2ICs0Njk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICBjYXNlIEludDUy
VG9WYWx1ZToKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CisgICAgY2FzZSBBcml0aElNdWw6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyMywxMCArMjQy
Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y29tcGlsZUFyaXRoTXVsKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQXJpdGhJ
TXVsOgotICAgICAgICBjb21waWxlQXJpdGhJTXVsKG5vZGUpOwotICAgICAgICBicmVhazsKLQog
ICAgIGNhc2UgQXJpdGhEaXY6IHsKICAgICAgICAgY29tcGlsZUFyaXRoRGl2KG5vZGUpOwogICAg
ICAgICBicmVhazsKQEAgLTUwMDIsNiArNDk5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgorICAgIGNhc2UgQXJpdGhJ
TXVsOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTcsNyArMjAx
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50MzIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAg
ICBpZiAoZG9lc092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAvLyBXZSBr
bm93IHRoYXQgdGhpcyBzb21ldGltZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRv
dWJsZSBldmVyeQogICAgICAgICAvLyB0aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1
ZW50IGNvZGUgdG8gbm90IGhhdmUgd2VpcmQgY29uZGl0aW9uYWxzLgogICAgICAgICAgICAgCkBA
IC0yMDM3LDcgKzIwMzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9O
dW1iCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIWJ5
dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChub2RlLT5hcml0aE1vZGUoKSA9PSBBcml0aDo6Q2hlY2tPdmVyZmxvdyk7
CiAKICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMjA2MCw4ICsyMDYwLDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVBc0ludDMKICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKLSAgICBib29sIG5lZ1plcm9DaGVjayA9ICFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZl
WmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKTsKLSAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91
YmxlVG9JbnQzMih2YWx1ZUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIs
IG5lZ1plcm9DaGVjayk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxvdyhu
b2RlLT5hcml0aE1vZGUoKSkpOworICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMy
KAorICAgICAgICB2YWx1ZUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIs
CisgICAgICAgIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CiAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgZmFpbHVyZUNh
c2VzKTsKIAogICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0yNTg1LDEyICsy
NTg3LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KIHsKICAg
ICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewogICAgIGNhc2UgSW50MzJVc2U6IHsK
KyAgICAgICAgQVNTRVJUKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUo
KSkpOworICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkgewogICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3Vs
ZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAg
LTI2MDUsNyArMjYwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSog
bm8KICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoIXNob3Vs
ZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAg
LTI2MjMsNyArMjYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSog
bm8KICAgICAgICAgR1BSUmVnIGdwcjIgPSBvcDIuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBncHJS
ZXN1bHQgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmICghc2hvdWxkQ2hl
Y2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIGlmIChncHIxID09
IGdwclJlc3VsdCkKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIyLCBncHJSZXN1bHQp
OwogICAgICAgICAgICAgZWxzZSB7CkBAIC0yNjQ3LDYgKzI2NTEsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgY2FzZSBNYWNoaW5lSW50VXNlOiB7CisgICAgICAgIEFTU0VSVChzaG91bGRDaGVja092
ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKTsKKwogICAgICAgICAvLyBXaWxsIHdlIG5l
ZWQgYW4gb3ZlcmZsb3cgY2hlY2s/IElmIHdlIGNhbiBwcm92ZSB0aGF0IG5laXRoZXIgaW5wdXQg
Y2FuIGJlCiAgICAgICAgIC8vIEludDUyIHRoZW4gdGhlIG92ZXJmbG93IGNoZWNrIHdpbGwgbm90
IGJlIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikKQEAgLTI3NjAsMTIgKzI3NjcsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogewogICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CiAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICBBU1NFUlQo
IXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIAog
ICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogCi0gICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhu
b2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihJbW0zMihpbW0y
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNzgzLDcgKzI3OTIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGlm
IChieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAg
ICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAg
ICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
Zmxvdywgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKQEAgLTI3OTYsNyArMjgwNSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgU3BlY3VsYXRl
SW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmICghc2hvdWxkQ2hlY2tP
dmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIob3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI4MDgsNiArMjgxNyw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6IHsKKyAgICAgICAgQVNTRVJUKHNo
b3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKCFz
aG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpOworCiAgICAgICAgIC8v
IFdpbGwgd2UgbmVlZCBhbiBvdmVyZmxvdyBjaGVjaz8gSWYgd2UgY2FuIHByb3ZlIHRoYXQgbmVp
dGhlciBpbnB1dCBjYW4gYmUKICAgICAgICAgLy8gSW50NTIgdGhlbiB0aGUgb3ZlcmZsb3cgY2hl
Y2sgd2lsbCBub3QgYmUgbmVjZXNzYXJ5LgogICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0ludDUyKQpAQCAtMjg2NCw5ICsyODc2LDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAgICAvLyBO
b3RlOiB0aGVyZSBpcyBubyBub3Rpb24gb2YgYmVpbmcgbm90IHVzZWQgYXMgYSBudW1iZXIsIGJ1
dCBzb21lb25lCiAgICAgICAgIC8vIGNhcmluZyBhYm91dCBuZWdhdGl2ZSB6ZXJvLgogICAgICAg
ICAKLSAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKQorICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhN
b2RlKCkpKQogICAgICAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0LmdwcigpKTsKLSAgICAgICAg
ZWxzZSBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpCisgICAgICAgIGVsc2UgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5h
cml0aE1vZGUoKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hOZWczMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cs
IHJlc3VsdC5ncHIoKSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZikp
KTsKQEAgLTI4NzksNiArMjg5MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0
aE5lZ2F0ZSgKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBNYWNoaW5lSW50VXNlOiB7
CisgICAgICAgIEFTU0VSVChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSk7
CisgICAgICAgIAogICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
Y291bGRCZVR5cGUoU3BlY0ludDUyKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlV2hpY2hldmVy
SW50NTJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMjg4Niw3ICsyOTAwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgbV9qaXQubmVnNjQocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGlm
ICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
IHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhN
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
ICAgICAgICAgTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikp
OwpAQCAtMjkwMyw3ICsyOTE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRo
TmVnYXRlKAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgSW50NTJPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaE5lZzY0KE1h
Y3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIGlmICghYnl0ZWNv
ZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAg
ICAgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgTmVnYXRpdmVaZXJv
LCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CkBAIC0yOTI4LDIxICsyOTQyLDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAgICByZXR1cm47
CiAgICAgfQogfQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoSU11bChOb2RlKiBu
b2RlKQotewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgcmVnMSA9IG9w
MS5ncHIoKTsKLSAgICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKLQotICAgIG1faml0Lm1vdmUo
cmVnMSwgcmVzdWx0LmdwcigpKTsKLSAgICBtX2ppdC5tdWwzMihyZWcyLCByZXN1bHQuZ3ByKCkp
OwotICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgcmV0dXJuOwotfQot
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKICAg
ICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewpAQCAtMjk1Nyw3ICsyOTU2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICAvLyBXZSBj
YW4gcGVyZm9ybSB0cnVuY2F0ZWQgbXVsdGlwbGljYXRpb25zIGlmIHdlIGdldCB0byB0aGlzIHBv
aW50LCBiZWNhdXNlIGlmIHRoZQogICAgICAgICAvLyBmaXh1cCBwaGFzZSBjb3VsZCBub3QgcHJv
dmUgdGhhdCBpdCB3b3VsZCBiZSBzYWZlLCBpdCB3b3VsZCBoYXZlIHR1cm5lZCB1cyBpbnRvCiAg
ICAgICAgIC8vIGEgZG91YmxlIG11bHRpcGxpY2F0aW9uLgotICAgICAgICBpZiAoYnl0ZWNvZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYg
KCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAg
bV9qaXQubW92ZShyZWcxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQubXVsMzIo
cmVnMiwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI5NjcsNyArMjk2Niw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUg
dXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJvdXQgc3VjaCB0aGluZ3MuCi0gICAgICAgIGlmICgh
Ynl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsK
KyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkg
ewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJ
bW0zMigwKSkpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpT
VmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
cmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7CkBAIC0yOTgwLDYgKzI5NzksOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkg
ICAKICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6IHsKKyAgICAgICAgQVNTRVJUKHNob3VsZENoZWNr
T3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFRoaXMg
aXMgc3VwZXIgY2xldmVyLiBXZSB3YW50IHRvIGRvIGFuIGludDUyIG11bHRpcGxpY2F0aW9uIGFu
ZCBjaGVjayB0aGUKICAgICAgICAgLy8gaW50NTIgb3ZlcmZsb3cgYml0LiBUaGVyZSBpcyBubyBk
aXJlY3QgaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhpcywgYnV0IHdlIGRvCiAgICAgICAgIC8vIGhh
dmUgdGhlIGFiaWxpdHkgdG8gZG8gYW4gaW50NjQgbXVsdGlwbGljYXRpb24gYW5kIGNoZWNrIHRo
ZSBpbnQ2NCBvdmVyZmxvdwpAQCAtMzAxNyw3ICszMDE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICAgICAgSW50NTJPdmVyZmxvdywgSlNWYWx1
ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaE11bDY0KE1hY3JvQXNzZW1ibGVy
OjpPdmVyZmxvdywgb3AyR1BSLCByZXN1bHRHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGlmICgh
Ynl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsK
KyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkg
ewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0
LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCkBAIC0zMDg3LDcgKzMw
ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhEaXYoTm9kCiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIHNhZmVEZW5vbWluYXRvciA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpBYm92ZSwgdGVtcCwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSk7CiAgICAg
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOwotICAgICAgICBpZiAoYnl0ZWNv
ZGVVc2VzQXNOdW1iZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNo
b3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0
MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQUikpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6OkVxdWFsLCBvcDFHUFIsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgICAg
ICB9IGVsc2UgewpAQCAtMzExNSw3ICszMTE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoRGl2KE5vZAogICAgIAogICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91
dCBuZWdhdGl2ZSB6ZXJvLCB0aGVuIHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAg
ICAgICAvLyB0byBwcm9kdWNlIG5lZ2F0aXZlIHplcm8uCi0gICAgICAgIGlmICghYnl0ZWNvZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAg
aWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7
CiAgICAgICAgICAgICBudW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKQEAgLTMxMzUsNyAr
MzEzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKIAogICAg
ICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIHdhcyBubyByZW1haW5kZXIuIElmIHRoZXJlIGhhZCBi
ZWVuLCB0aGVuIHdlJ2QgYmUgb2JsaWdhdGVkIHRvCiAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3Vi
bGUgcmVzdWx0IGluc3RlYWQuCi0gICAgICAgIGlmIChieXRlY29kZVVzZXNBc051bWJlcihub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobm9k
ZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJv
LCBlZHguZ3ByKCkpKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAt
MzE1MCw3ICszMTUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5v
ZAogCiAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8sIHRo
ZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAgIC8vIHRvIHByb2R1Y2Ug
bmVnYXRpdmUgemVyby4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVy
byhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBvcDFHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdh
dGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIG51bWVy
YXRvck5vblplcm8ubGluaygmbV9qaXQpOwpAQCAtMzE2MCw3ICszMTYxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAgIC8vIENoZWNrIHRoYXQg
dGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBv
YmxpZ2F0ZWQgdG8KICAgICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVhZC4K
LSAgICAgICAgaWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkg
ewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoTXVsMzIoSklUQ29tcGlsZXI6Ok92ZXJmbG93LCBxdW90aWVudC5ncHIo
KSwgb3AyR1BSLCBtdWx0aXBseUFuc3dlci5ncHIoKSkpOwogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBtdWx0aXBseUFuc3dlci5ncHIoKSwgb3AxR1BSKSk7CiAgICAgICAg
IH0KQEAgLTMxNzYsNyArMzE3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0
aERpdihOb2QKIAogICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6
ZXJvLCB0aGVuIHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAvLyB0byBw
cm9kdWNlIG5lZ2F0aXZlIHplcm8uCi0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENo
ZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAg
ICBudW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKQEAgLTMxODYsNyArMzE4Nyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKIAogICAgICAgICAvLyBDaGVj
ayB0aGF0IHRoZXJlIHdhcyBubyByZW1haW5kZXIuIElmIHRoZXJlIGhhZCBiZWVuLCB0aGVuIHdl
J2QgYmUgb2JsaWdhdGVkIHRvCiAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGlu
c3RlYWQuCi0gICAgICAgIGlmIChieXRlY29kZVVzZXNBc051bWJlcihub2RlLT5hcml0aE5vZGVG
bGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1v
ZGUoKSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaE11bDMyKEpJVENvbXBpbGVyOjpPdmVyZmxvdywgcXVvdGll
bnQuZ3ByKCksIG9wMkdQUiwgbXVsdGlwbHlBbnN3ZXIuZ3ByKCkpKTsKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgbXVsdGlwbHlBbnN3ZXIuZ3ByKCksIG9wMUdQUikpOwog
ICAgICAgICB9CkBAIC0zMjc0LDcgKzMyNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhNb2QoTm9kCiAgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihkaXZpZGVuZEdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVn
YXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhYm91dCB0byBjcmVhdGUgbmVnYXRp
dmUgemVyby4KICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9y
UG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCBkaXZpZGVuZEdQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5j
aFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKSk7CkBAIC0zMzExLDcgKzMzMTIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGl2aXNvciksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmNkcSgpOwogICAgICAgICAgICAgICAgIG1f
aml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaWYg
KCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJh
dG9yUG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVx
dWFsLCBvcDFTYXZlR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hU
ZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIGVkeC5ncHIoKSkpOwogICAgICAgICAgICAgICAgICAg
ICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKCZtX2ppdCk7CkBAIC0zMzY4LDcgKzMzNjksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIAogICAgICAg
ICAvLyBGSVhNRTogLTJeMzEgLyAtMSB3aWxsIGFjdHVhbGx5IHlpZWxkIG5lZ2F0aXZlIHplcm8s
IHNvIHdlIGNvdWxkIGhhdmUgYQogICAgICAgICAvLyBzZXBhcmF0ZSBjYXNlIGZvciB0aGF0LiBC
dXQgaXQgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIgc28gbXVjaC4KLSAgICAgICAgaWYgKGJ5dGVj
b2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChz
aG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKEpJVENvbXBp
bGVyOjpFcXVhbCwgb3AxR1BSLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTM0MDcsNyArMzQwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsKIAogICAg
ICAgICAvLyBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhYm91dCB0byBjcmVhdGUgbmVnYXRpdmUgemVy
by4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9k
ZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0
b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1
YWwsIG9wMVNhdmVHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklU
Q29tcGlsZXI6Olplcm8sIGVkeC5ncHIoKSkpOwogICAgICAgICAgICAgbnVtZXJhdG9yUG9zaXRp
dmUubGluaygmbV9qaXQpOwpAQCAtMzQyOSwxMiArMzQzMCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIEdQUlJlZyBtdWx0aXBseUFuc3dlckdQ
UiA9IG11bHRpcGx5QW5zd2VyLmdwcigpOwogCiAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnNk
aXYocXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpZGVuZEdQUiwgZGl2aXNvckdQUik7Cisg
ICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBk
b24ndCBuZWVkIHRoaXM/IFdoYXQgaWYgd2UgaGF2ZQorICAgICAgICAvLyBhcml0aE1vZGUoKSA9
PSBBcml0aDo6VW5jaGVja2VkPworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI2NDQ0CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaE11bDMyKEpJVENvbXBpbGVyOjpPdmVyZmxv
dywgcXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpc29yR1BSLCBtdWx0aXBseUFuc3dlckdQ
UikpOwogICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5zdWIocXVvdGllbnRUaGVuUmVtYWluZGVy
R1BSLCBkaXZpZGVuZEdQUiwgbXVsdGlwbHlBbnN3ZXJHUFIpOwogCiAgICAgICAgIC8vIElmIHRo
ZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2Un
cmUgbm90IGFib3V0CiAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KLSAgICAg
ICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFn
cygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhN
b2RlKCkpKSB7CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhYm91dCB0byBj
cmVhdGUgbmVnYXRpdmUgemVyby4KICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG51bWVy
YXRvclBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JF
cXVhbCwgZGl2aWRlbmRHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIo
SklUQ29tcGlsZXI6Olplcm8sIHF1b3RpZW50VGhlblJlbWFpbmRlckdQUikpOwpAQCAtMzQ1Miwx
MiArMzQ1NiwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAg
ICAgICAgIEdQUlJlZyBtdWx0aXBseUFuc3dlckdQUiA9IG11bHRpcGx5QW5zd2VyLmdwcigpOwog
CiAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnNkaXY8MzI+KHF1b3RpZW50VGhlblJlbWFpbmRl
ckdQUiwgZGl2aWRlbmRHUFIsIGRpdmlzb3JHUFIpOworICAgICAgICAvLyBGSVhNRTogSXQgc2Vl
bXMgbGlrZSB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0aGlzPyBXaGF0IGlm
IHdlIGhhdmUKKyAgICAgICAgLy8gYXJpdGhNb2RlKCkgPT0gQXJpdGg6OlVuY2hlY2tlZD8KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjQ0NAog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2pp
dC5icmFuY2hNdWwzMihKSVRDb21waWxlcjo6T3ZlcmZsb3csIHF1b3RpZW50VGhlblJlbWFpbmRl
ckdQUiwgZGl2aXNvckdQUiwgbXVsdGlwbHlBbnN3ZXJHUFIpKTsKICAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuc3ViPDMyPihxdW90aWVudFRoZW5SZW1haW5kZXJHUFIsIGRpdmlkZW5kR1BSLCBt
dWx0aXBseUFuc3dlckdQUik7CiAKICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQg
bmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKICAgICAg
ICAgLy8gdG8gcHJvZHVjZSBuZWdhdGl2ZSB6ZXJvLgotICAgICAgICBpZiAoIWJ5dGVjb2RlQ2Fu
SWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlm
IChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJv
LgogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBkaXZpZGVuZEdQUiwg
VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywg
cXVvdGllbnRUaGVuUmVtYWluZGVyR1BSKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwNTIsNyArMjA1Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aFN1YihOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhOZWdhdGUoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUFyaXRoTXVsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVBcml0aElNdWwoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUFyaXRoRGl2KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE1vZChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRlcihOb2RlKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220466</attachid>
            <date>2014-01-06 16:00:33 -0800</date>
            <delta_ts>2014-01-06 16:43:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72801</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE0LTAxLTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSB0aGUgZGlmZmVyZW50IGZsYXZvcnMgb2YgaW50ZWdlciBhcml0aG1ldGljIG1vcmUgZXhw
bGljaXQsIGFuZCBkb24ndCByZWx5IG9uIChwb3NzaWJseSBzdGFsZSkgcmVzdWx0cyBvZiB0aGUg
YmFja3dhcmRzIHByb3BhZ2F0b3IgdG8gZGVjaWRlIGludGVnZXIgYXJpdGhtZXRpYyBzZW1hbnRp
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NTE5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBBZGRzIHRoZSBBcml0aDo6TW9kZSBlbnVtIHRvIGFyaXRobWV0aWMgbm9kZXMsIHdoaWNoIG1h
a2VzIGl0IGV4cGxpY2l0IHdoYXQgc29ydHMgb2YKKyAgICAgICAgY2hlY2tzIGFuZCBvdmVyZmxv
d3MgdGhlIG5vZGUgc2hvdWxkIGRvLiBQcmV2aW91c2x5IHRoaXMgd291bGQgYmUgZGVkdWNlZCBm
cm9tCisgICAgICAgIGJhY2t3YXJkcyBhbmFseXNpcyByZXN1bHRzLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhbHNvIG1ha2VzICJ1bmNoZWNrZWQiIHZhcmlhbnRzIHJlYWxseSBtZWFuIHRoYXQg
eW91IHdhbnQgdGhlIGludDMyIHdyYXBwZWQKKyAgICAgICAgcmVzdWx0LCBzbyBBcml0aElNdWwg
aXMgbm93IGRvbmUgaW4gdGVybXMgb2YgQXJpdGhNdWwoVW5jaGVja2VkKS4gVGhhdCBtZWFucyB0
aGF0IHRoZQorICAgICAgICBjb25zdGFudCBmb2xkZXIgbmVlZHMgdG8gY29tcHV0ZSBleGFjdGx5
IHRoZSByZXN1bHQgaW1wbGllZCBieSBBcml0aE1vZGUsIGluc3RlYWQgb2YKKyAgICAgICAganVz
dCBmb2xkaW5nIHRoZSBkb3VibGUgcmVzdWx0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdBcml0aE1vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6Cisg
ICAgICAgICogZGZnL0RGR0FyaXRoTW9kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzT3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpERkc6OnNob3VsZENoZWNrT3ZlcmZsb3cpOgor
ICAgICAgICAoSlNDOjpERkc6OnNob3VsZENoZWNrTmVnYXRpdmVaZXJvKToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwdXJlQ1NF
KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAg
ICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmF0dGVtcHRUb01ha2VJbnRlZ2VyQWRk
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTW9kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJpdGhNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpzZXRBcml0aE1vZGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVVSW50MzJUb051bWJlcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVBc0ludDMy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBZGRTdWIpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhEaXZNb2QpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVUludDMyVG9OdW1iZXIpOgor
CiAyMDE0LTAxLTA2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHdyaXRlIGJhcnJpZXJzIHRvIHRoZSBMTEludApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAK
ICAgICBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKICAgICBkZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHQXJpdGhNb2RlLmNwcAogICAgIGRmZy9ERkdB
cnJheU1vZGUuY3BwCiAgICAgZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCiAgICAgZGZn
L0RGR0F2YWlsYWJpbGl0eS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRQb3NpdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcml0aE1vZGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyaXRoTW9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTYxMjQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNw
cCIgLz4KQEAgLTg0OSw2ICs4NTAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0FyZ3VtZW50UG9zaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyaXRoTW9kZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDYgKzIzNCw4IEBACiAJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBMTElu
dERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDY4MENGMTRCQkIzRDEwMEJGRTI3MiAvKiBMTEludERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2ODBENDE0QkJEMjQ5MDBCRkUyNzIg
LyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1
cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2Fs
bFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDg1MzIx
MTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0ODUzMUYxODc3NTA1NjAwODNCNjg3IC8qIERG
R0FyaXRoTW9kZS5jcHAgKi87IH07CisJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdB
cml0aE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDg1MzIwMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4
NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCAqLzsgfTsKIAkJMEY0Qjk0REMxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU1NDFCMTE2MTNDMUZC
MDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQUYxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmNwcCAqLzsgfTsKQEAgLTE1NzgsNiArMTU4MCw4IEBACiAJCTBGNDY4MENGMTRCQkIz
RDEwMEJGRTI3MiAvKiBMTEludERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnREYXRhLmg7IHBhdGggPSBsbGludC9MTEludERhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJu
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENhbGxS
ZXR1cm5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQxMTRC
QkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY0ODUzMUYxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcml0aE1vZGUuY3BwOyBw
YXRoID0gZGZnL0RGR0FyaXRoTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNDg1MzIwMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJpdGhNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJpdGhN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENBRDEwMDg0
NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBv
aW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY2lhbFBv
aW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg1NSw4ICszODU5LDYg
QEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkFDQ0YzREMxODVGRTI2QjAwODNFMkFEIC8q
IERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8sCi0JCQkJMkFDQ0YzREQxODVGRTI2
QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAogCQkJCUE3N0E0
MjM2MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovLAogCQkJCUE3N0E0
MjM3MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCAqLywKIAkJCQlBNzA0RDhG
RTE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oICovLApAQCAtMzg2
OSw2ICszODcxLDggQEAKIAkJCQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1l
bnRQb3NpdGlvbi5oICovLAogCQkJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjE2MDE1QjE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAorCQkJCTBGNDg1
MzFGMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwICovLAorCQkJCTBGNDg1MzIw
MTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCAqLywKIAkJCQkwRjA1QzNCMjE2ODND
RjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovLAogCQkJCTBG
NjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovLAogCQkJCTBGNjM5
NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKQEAgLTQwNDMsNiArNDA0
Nyw4IEBACiAJCQkJMEZDMjBDQjgxODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhh
c2UuaCAqLywKIAkJCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAgKi8sCiAJCQkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5
b3V0UGhhc2UuaCAqLywKKwkJCQkyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLywKKwkJCQkyQUNDRjNERDE4NUZFMjZCMDA4M0UyQUQg
LyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUyRTJD
NjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQzIw
Q0I0MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aCAqLywKQEAgLTQ3OTksNiArNDgwNSw3IEBACiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFE
IC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdG
MzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3Mjk5RDlFMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKQEAgLTU1MDMsNiArNTUxMCw3IEBACiAJCQkJMEY4MzM1QjcxNjM5
QzFFNjAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3QThBRjM2MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY0ODUzMjExODc3NTA1NjAwODNCNjg3IC8qIERGR0Fy
aXRoTW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDgg
LyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDNjE3RjRF
QTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTYx
MjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTEgKzIwMiw2IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCiAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3Vt
ZW50cyBoYXMgYmVlbiBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1
ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwpAQCAtMjU0LDE4ICsy
NDksMjQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgQVNTRVJUKGNoaWxkLmlzSW50MzIoKSk7Ci0g
ICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IGNoaWxkLmFzSW50MzIoKTsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHZhbHVlKSk7CisgICAgICAgIGlmIChkb2VzT3Zl
cmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBjaGlsZC5h
c0ludDMyKCk7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIodmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50MzIoKSkKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5p
c0ludDMyKCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgdmFsdWUgPSBjaGlsZC5hc0ludDMyKCk7
CisgICAgICAgICAgICBpZiAodmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsIGpzTnVtYmVyKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJ
bnQzMik7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIApAQCAtMzQxLDEyICszNDIsNiBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFZhbHVl
QWRkOiB7Ci0gICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7Ci0gICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52
YWx1ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYg
cmlnaHQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1
ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQogICAgICAgICBBU1NFUlQobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IFVu
dHlwZWRVc2UpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgY2xvYmJl
ckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNTdHJpbmcgfCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpOwpAQCAtMzU2LDIzICszNTEsNDEgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgSlNW
YWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlm
IChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7
Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAr
IHJpZ2h0LmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAg
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJV
c2U6CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzSW50MzIoKSAmJiBy
aWdodC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZs
b3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50
KG5vZGUsIGpzTnVtYmVyKGxlZnQuYXNJbnQzMigpICsgcmlnaHQuYXNJbnQzMigpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVt
YmVyKCkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNJbnQzMigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKCFieXRl
Y29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYm
IGxlZnQuaXNNYWNoaW5lSW50KCkgJiYgcmlnaHQuaXNNYWNoaW5lSW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGxlZnQuYXNNYWNoaW5lSW50KCkgKyBy
aWdodC5hc01hY2hpbmVJbnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc01hY2hp
bmVJbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCByZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDUyKTsKICAg
ICAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuaXNUeXBlKFNwZWNJbnQzMikK
ICAgICAgICAgICAgICAgICB8fCAhZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuaXNUeXBlKFNwZWNJ
bnQzMikpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0
ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CisgICAg
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIobGVmdC5hc051bWJlcigpICsg
cmlnaHQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGlzRnVsbFJlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpCiAgICAgICAgICAgICAgICAgJiYgaXNGdWxsUmVhbE51bWJl
clNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGVSZWFsKTsKQEAgLTM5NCwyMyAr
NDA3LDQxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBj
YXNlIEFyaXRoU3ViOiB7CiAgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS52YWx1ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVt
YmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtp
bmQoKSkgewogICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYg
cmlnaHQgJiYgbGVmdC5pc0ludDMyKCkgJiYgcmlnaHQuaXNJbnQzMigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihsZWZ0LmFzSW50MzIo
KSAtIHJpZ2h0LmFzSW50MzIoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihs
ZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhu
b2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6CisgICAg
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTWFjaGluZUludCgpICYmIHJpZ2h0
LmlzTWFjaGluZUludCgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihsZWZ0LmFzTWFjaGluZUludCgpIC0gcmlnaHQuYXNNYWNoaW5lSW50KCkpOworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNNYWNoaW5lSW50KCkgfHwgIXNob3VsZENoZWNrT3ZlcmZs
b3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50
KG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjSW50NTIpOwogICAgICAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5pc1R5
cGUoU3BlY0ludDMyKQogICAgICAgICAgICAgICAgIHx8ICFmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5pc1R5cGUoU3BlY0ludDMyKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihsZWZ0
LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Rv
dWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQyMiwyNCAr
NDUzLDUyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgCiAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxk
LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoLWNo
aWxkLmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJV
c2U6CisgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNJbnQzMigpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcigtY2hpbGQuYXNJ
bnQzMigpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBkb3VibGUgZG91YmxlUmVzdWx0OworICAgICAgICAgICAgICAgIGlm
IChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdCA9IC1jaGlsZC5hc051bWJlcigpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0ID0gMCAtIGNoaWxkLmFz
TnVtYmVyKCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3VsdCA9IGpzTnVtYmVy
KGRvdWJsZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVzdWx0LmlzSW50MzIo
KSkgeworICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2YWx1ZVJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwotICAg
ICAgICAgICAgaWYgKCFieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVG
bGFncygpKSkKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRo
TW9kZSgpKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAgICAgICAgICAgIGlm
IChjaGlsZCAmJiBjaGlsZC5pc01hY2hpbmVJbnQoKSkgeworICAgICAgICAgICAgICAgIGRvdWJs
ZSBkb3VibGVSZXN1bHQ7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVa
ZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0
ID0gLWNoaWxkLmFzTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQgPSAwIC0gY2hpbGQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlUmVzdWx0ID0ganNOdW1iZXIoZG91YmxlUmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWVSZXN1bHQuaXNNYWNoaW5lSW50KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdmFsdWVSZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDUyKTsKICAgICAgICAgICAgIGlmIChtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpCiAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGlmICghYnl0
ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAg
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKQog
ICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hp
bGQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVt
YmVyKC1jaGlsZC5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ1MiwyMiArNTExLDQ1IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEFyaXRo
TXVsOiB7CiAgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52
YWx1ZSgpOwotICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYg
cmlnaHQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1
ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewog
ICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYg
bGVmdC5pc0ludDMyKCkgJiYgcmlnaHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihsZWZ0LmFzSW50MzIoKSAqIHJpZ2h0
LmFzSW50MzIoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZG91YmxlIGRvdWJsZVJlc3VsdCA9IGxlZnQuYXNOdW1iZXIo
KSAqIHJpZ2h0LmFzTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja05l
Z2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZVJlc3VsdCArPSAwOyAvLyBTYW5pdGl6ZXMgemVyby4KKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlUmVzdWx0ID0ganNOdW1iZXIoZG91YmxlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBp
ZiAodmFsdWVSZXN1bHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsIHZhbHVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIWJ5dGVj
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQg
JiYgbGVmdC5pc01hY2hpbmVJbnQoKSAmJiByaWdodC5pc01hY2hpbmVJbnQoKSkgeworICAgICAg
ICAgICAgICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5h
c051bWJlcigpOworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8o
bm9kZS0+YXJpdGhNb2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQgKz0g
MDsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlUmVzdWx0ID0ganNOdW1iZXIoZG91Ymxl
UmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVSZXN1bHQuaXNNYWNoaW5lSW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdmFsdWVSZXN1bHQpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDUyKTsKICAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0
LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHNldENv
bnN0YW50KG5vZGUsIGpzTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChpc0Z1bGxSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKQogICAgICAgICAgICAgICAgIHx8IGlzRnVsbFJlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjRG91YmxlUmVhbCk7CkBAIC00ODAsNDYgKzU2MiwxMjIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLQotICAgIGNhc2UgQXJpdGhJTXVsOiB7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAKKyAgICBjYXNlIEFyaXRoRGl2OiB7Cisg
ICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Cisg
ICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIElu
dDMyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc0ludDMyKCkg
JiYgcmlnaHQuaXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGRvdWJsZVJlc3Vs
dCA9IGxlZnQuYXNOdW1iZXIoKSAvIHJpZ2h0LmFzTnVtYmVyKCk7CisgICAgICAgICAgICAgICAg
aWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgZG91YmxlUmVzdWx0ID0gdG9JbnQzMihkb3VibGVSZXN1bHQpOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUo
KSkpCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCArPSAwOyAvLyBTYW5pdGl6ZXMg
emVyby4KKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlUmVzdWx0ID0ganNOdW1iZXIoZG91
YmxlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVSZXN1bHQuaXNJbnQzMigpKSB7
CisgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHZhbHVlUmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5p
c051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCBqc051bWJlcihsZWZ0LmFzTnVtYmVyKCkgLyByaWdodC5hc051bWJlcigpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
ICAgIAotICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgY2FzZSBBcml0aE1pbjoKLSAgICBjYXNlIEFy
aXRoTWF4OgorCiAgICAgY2FzZSBBcml0aE1vZDogewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0g
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKLSAgICAgICAgaWYgKGxlZnQgJiYgcmln
aHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGRvdWJsZSBhID0gbGVmdC5hc051bWJlcigpOwotICAgICAgICAgICAgZG91YmxlIGIgPSByaWdo
dC5hc051bWJlcigpOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpT
VmFsdWUoYSAvIGIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
QXJpdGhNaW46Ci0gICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShhIDwg
YiA/IGEgOiAoYiA8PSBhID8gYiA6IGEgKyBiKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBKU1ZhbHVlKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIpKSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzSW50MzIoKSAmJiByaWdo
dC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZG91YmxlUmVzdWx0ID0gZm1v
ZChsZWZ0LmFzTnVtYmVyKCksIHJpZ2h0LmFzTnVtYmVyKCkpOworICAgICAgICAgICAgICAgIGlm
ICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdCA9IHRvSW50MzIoZG91YmxlUmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkp
KQorICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQgKz0gMDsgLy8gU2FuaXRpemVzIHpl
cm8uCisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZVJlc3VsdCA9IGpzTnVtYmVyKGRvdWJs
ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVzdWx0LmlzSW50MzIoKSkgewor
ICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2YWx1ZVJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNOdW1iZXIoZm1vZChsZWZ0LmFzTnVtYmVyKCksIHJpZ2h0LmFzTnVtYmVyKCkp
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgot
ICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoZm1vZChhLCBiKSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBcml0aE1pbjogeworICAgICAg
ICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAg
ICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVz
ZToKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNJbnQzMigpICYmIHJp
Z2h0LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVt
YmVyKHN0ZDo6bWluKGxlZnQuYXNJbnQzMigpLCByaWdodC5hc0ludDMyKCkpKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6
CisgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJl
cigpOworICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gcmlnaHQuYXNOdW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihhIDwgYiA/IGEgOiAoYiA8PSBh
ID8gYiA6IGEgKyBiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICBK
U1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKICAgICAgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToK
KyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNJbnQzMigpICYmIHJpZ2h0
LmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVy
KHN0ZDo6bWF4KGxlZnQuYXNJbnQzMigpLCByaWdodC5hc0ludDMyKCkpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDMyKTsKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBp
ZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkg
eworICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gbGVmdC5hc051bWJlcigpOworICAgICAgICAg
ICAgICAgIGRvdWJsZSBiID0gcmlnaHQuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCBqc051bWJlcihhID4gYiA/IGEgOiAoYiA+PSBhID8gYiA6IGEgKyBiKSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CkBAIC01MzEsMTYgKzY4OSwyMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoQWJzOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwot
ICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgewogICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgaWYgKGNoaWxk
ICYmIGNoaWxkLmlzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoZmFicyhjaGlsZC5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgaWYgKGNoaWxkICYmIGNo
aWxkLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051
bWJlcihjaGlsZC5hc051bWJlcigpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0RvdWJsZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTE2MjEsMTEgKzE3ODYsMTAg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgWm9tYmllSGlu
dDoKICAgICBjYXNlIFVucmVhY2hhYmxlOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNh
c2UgQXJpdGhJTXVsOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
aXRoTW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cml0aE1vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcml0aE1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0FyaXRoTW9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkRGRzo6QXJpdGg6Ok1vZGUgbW9kZSkK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpTQzo6REZHOjpBcml0aDo6Tm90U2V0
OgorICAgICAgICBvdXQucHJpbnQoIk5vdFNldCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU0M6OkRGRzo6QXJpdGg6OlVuY2hlY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJVbmNoZWNr
ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpERkc6OkFyaXRoOjpDaGVja092
ZXJmbG93OgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrT3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSlNDOjpERkc6OkFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVa
ZXJvOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpERkc6OkFyaXRoOjpEb092ZXJmbG93Ogor
ICAgICAgICBvdXQucHJpbnQoIkRvT3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQXJpdGhNb2RlX2gKKyNkZWZpbmUgREZHQXJpdGhNb2RlX2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEFyaXRoOjpNb2Rl
IGRlc2NyaWJlcyB0aGUgbW9kZSBvZiBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiB0aGF0IHNwZWN1
bGF0ZXMgaW50ZWdlci4KKy8vIE5vdGUgdGhhdCBub3QgYWxsIG1vZGVzIGFyZSB2YWxpZCBmb3Ig
YWxsIG9wZXJhdGlvbnMuCituYW1lc3BhY2UgQXJpdGggeworZW51bSBNb2RlIHsKKyAgICBOb3RT
ZXQsIC8vIEFyaXRobWV0aWMgbW9kZSBpcyBlaXRoZXIgbm90IHJlbGV2YW50IGJlY2F1c2Ugd2Un
cmUgdXNpbmcgZG91YmxlcyBhbnl3YXkgb3Igd2UgYXJlIGF0IGEgcGhhc2UgaW4gY29tcGlsYXRp
b24gd2hlcmUgd2UgZG9uJ3Qga25vdyB3aGF0IHdlJ3JlIGRvaW5nLCB5ZXQuIFNob3VsZCBuZXZl
ciBzZWUgdGhpcyBhZnRlciBGaXh1cFBoYXNlIGV4Y2VwdCBmb3Igbm9kZXMgdGhhdCB0YWtlIGRv
dWJsZXMgYXMgaW5wdXRzIGFscmVhZHkuCisgICAgVW5jaGVja2VkLCAvLyBEb24ndCBjaGVjayBh
bnl0aGluZyBhbmQganVzdCBkbyBhbiBpbnRlZ2VyIG9wZXJhdGlvbi4KKyAgICBDaGVja092ZXJm
bG93LCAvLyBDaGVjayBmb3Igb3ZlcmZsb3cgYnV0IGRvbid0IGJvdGhlciB3aXRoIG5lZ2F0aXZl
IHplcm8uCisgICAgQ2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybywgLy8gQ2hlY2sgZm9yIGJv
dGggb3ZlcmZsb3cgYW5kIG5lZ2F0aXZlIHplcm8uCisgICAgRG9PdmVyZmxvdyAvLyBFdmVuIHRo
b3VnaCB0aGUgaW5wdXRzIGFyZSBpbnRlZ2VycywgdXAtY29udmVydCB0aGVtIHRvIGRvdWJsZXMg
YW5kIHJldHVybiBhIGRvdWJsZS4KK307Cit9IC8vIG5hbWVzcGFjZSBBcml0aAorCitpbmxpbmUg
Ym9vbCBkb2VzT3ZlcmZsb3coQXJpdGg6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIEFyaXRoOjpOb3RTZXQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIGNhc2UgQXJpdGg6OlVuY2hlY2tlZDoKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJm
bG93OgorICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm86CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyaXRoOjpEb092ZXJmbG93OgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIEl0J3Mgb25seSB2YWxpZCB0byBjYWxsIHRoaXMgb25jZSB5b3UndmUg
ZGV0ZXJtaW5lZCB0aGF0IHlvdSBkb24ndCBuZWVkIHRvICpkbyoKKy8vIG92ZXJmbG93LiBGb3Ig
bW9zdCBub2RlcywgdGhhdCdzIGltcGxpY2l0LgoraW5saW5lIGJvb2wgc2hvdWxkQ2hlY2tPdmVy
ZmxvdyhBcml0aDo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
QXJpdGg6Ok5vdFNldDoKKyAgICBjYXNlIEFyaXRoOjpEb092ZXJmbG93OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBBcml0aDo6
VW5jaGVja2VkOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcml0aDo6Q2hlY2tP
dmVyZmxvdzoKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHNob3VsZENoZWNrTmVnYXRpdmVaZXJv
KEFyaXRoOjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcml0
aDo6Tm90U2V0OgorICAgIGNhc2UgQXJpdGg6OkRvT3ZlcmZsb3c6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEFyaXRoOjpVbmNo
ZWNrZWQ6CisgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm86CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkRGRzo6QXJpdGg6Ok1vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXJpdGhNb2RlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2
MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzYsOCArMTM2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBvdGhlck5vZGUtPm9wKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5hcml0aE5vZGVGbGFncygpICE9
IG90aGVyTm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGlmIChub2RlLT5oYXNBcml0aE1vZGUoKSkgeworICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcml0aE1vZGUoKSAhPSBvdGhlck5vZGUtPmFyaXRoTW9kZSgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgRWRnZSBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDEoKTsKICAgICAgICAg
ICAgIGlmICghb3RoZXJDaGlsZCkKQEAgLTEwODIsNyArMTA4NCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6CiAgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6CiAgICAgICAgIGNh
c2UgQXJpdGhNdWw6Ci0gICAgICAgIGNhc2UgQXJpdGhJTXVsOgogICAgICAgICBjYXNlIEFyaXRo
TW9kOgogICAgICAgICBjYXNlIEFyaXRoRGl2OgogICAgICAgICBjYXNlIEFyaXRoQWJzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNiAr
MzU1LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
IGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBpbnZh
bGlkYXRlZCB0aGVuIHdlIHNob3VsZG4ndCBhdHRlbXB0IHRvIGNvbnN0YW50LWZvbGQuIEhlcmUn
cyBhbgorICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyAgICAgYzogSlNDb25zdGFudCg0LjIpCisgICAgICAgICAgICAgICAg
Ly8gICAgIHg6IFZhbHVlVG9JbnQzMihDaGVjazpJbnQzMjpAY29uc3QpCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBjb3JyZWN0IGZvciBhbiBhbmFs
eXNpcyB0byBhc3N1bWUgdGhhdCBleGVjdXRpb24gY2Fubm90CisgICAgICAgICAgICAgICAgLy8g
cHJvY2VlZCBwYXN0IEB4LiBUaGVyZWZvcmUsIGNvbnN0YW50LWZvbGRpbmcgQHggY291bGQgYmUg
cmF0aGVyIGJhZC4gQnV0LAorICAgICAgICAgICAgICAgIC8vIHRoZSBDRkEgbWF5IHJlcG9ydCB0
aGF0IGl0IGZvdW5kIGEgY29uc3RhbnQgZXZlbiB0aG91Z2ggaXQgYWxzbyByZXBvcnRlZAorICAg
ICAgICAgICAgICAgIC8vIHRoYXQgZXZlcnl0aGluZyBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gVGhp
cyB3aWxsIG9ubHkgaGFwcGVuIGluIGEgY291cGxlIG9mCisgICAgICAgICAgICAgICAgLy8gdGhl
IGNvbnN0YW50IGZvbGRpbmcgY2FzZXM7IG1vc3Qgb2YgdGhlbSBhcmUgYWxzbyBzZXBhcmF0ZWx5
IGRlZmVuc2l2ZQorICAgICAgICAgICAgICAgIC8vIGFib3V0IHN1Y2ggdGhpbmdzLgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5vZGUtPmhhc0NvbnN0
YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMywxMCArMTAzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQml0WG9yOgogICAg
ICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNh
c2UgQml0VVJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7CisgICAgICAgICAgICBm
aXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoSU11bDogewogICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIG5vZGUtPnNldE9wKEFyaXRoTXVsKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFyaXRo
TW9kZShBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJ
bnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMTQsNiArMTIzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50
MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGlmIChieXRlY29kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9JZGVudGl0eSgpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZUNhblNwZWN1
bGF0ZUludDMyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUt
PnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpEb092ZXJmbG93KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIxMCwxMCArMjIz
LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
ICAgIGlmIChieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpVbmNoZWNr
ZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVa
ZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJm
bG93QW5kTmVnYXRpdmVaZXJvKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZU1hY2hpbmVJ
bnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2
ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3Zl
cmZsb3dBbmROZWdhdGl2ZVplcm8pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKQEAg
LTIyNCwxMSArMjQ3LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnQzMihub2RlKSkgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50
MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNl
Pihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tP
dmVyZmxvdyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8pOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubXVsU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludChub2RlKSkgewogICAgICAgICAgICAgICAg
IGZpeEVkZ2U8TWFjaGluZUludFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
IGZpeEVkZ2U8TWFjaGluZUludFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAg
IGlmIChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygp
KSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092
ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaXhFZGdlPE51
bWJlclVzZT4obm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjQzLDYgKzI3NiwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGlmIChvcHRpbWl6ZUZvclg4NigpIHx8IG9wdGltaXplRm9yQVJNNjQo
KSB8fCBvcHRpbWl6ZUZvckFSTXY3cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpeEVkZ2U8
SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNv
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93KTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVj
a092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hp
bGQxKCk7CkBAIC0yNTgsNiArMjk3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51bWJl
clVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5J
Z25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJp
dGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8pOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2sgKyAx
LCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgY2hpbGQxLCBjaGlsZDIpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY1NSwxMiArMTY5OCwxNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShub2RlLCBtb2RlKTsKICAg
ICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmIChieXRl
Y29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092
ZXJmbG93KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50KG5vZGUpKSB7
CiAgICAgICAgICAgICBmaXhFZGdlPE1hY2hpbmVJbnRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIGZpeEVkZ2U8TWFjaGluZUludFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93KTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNiArMTk4
LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBv
dXQucHJpbnQoY29tbWEsIFNwZWN1bGF0aW9uRHVtcChub2RlLT5wcmVkaWN0aW9uKCkpKTsKICAg
ICBpZiAobm9kZS0+aGFzQXJyYXlNb2RlKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9k
ZS0+YXJyYXlNb2RlKCkpOworICAgIGlmIChub2RlLT5oYXNBcml0aE1vZGUoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBub2RlLT5hcml0aE1vZGUoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1Zh
ck51bWJlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnZhck51bWJlcigpKTsK
ICAgICBpZiAobm9kZS0+aGFzUmVnaXN0ZXJQb2ludGVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYxMjQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1
ZGUgIkRGR0FkamFjZW5jeUxpc3QuaCIKKyNpbmNsdWRlICJERkdBcml0aE1vZGUuaCIKICNpbmNs
dWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJE
RkdMYXp5SlNWYWx1ZS5oIgpAQCAtMTgwLDYgKzE4MSw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3Jl
ZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQorICAgICAgICAsIG1f
b3BJbmZvKDApCisgICAgICAgICwgbV9vcEluZm8yKDApCiAgICAgewogICAgICAgICBtaXNjLnJl
cGxhY2VtZW50ID0gMDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpAQCAtMTk1
LDYgKzE5OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3Zh
bHVlKQorICAgICAgICAsIG1fb3BJbmZvMigwKQogICAgIHsKICAgICAgICAgbWlzYy5yZXBsYWNl
bWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExMTgsNiAr
MTEyMiwzNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICAKKyAgICBib29sIGhhc0FyaXRoTW9kZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkp
IHsKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAg
ICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2Fz
ZSBBcml0aERpdjoKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBVSW50MzJU
b051bWJlcjoKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBcml0aDo6TW9kZSBhcml0aE1vZGUoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0FyaXRoTW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFy
aXRoOjpNb2RlPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJpdGhNb2Rl
KEFyaXRoOjpNb2RlIG1vZGUpCisgICAgeworICAgICAgICBtX29wSW5mbyA9IG1vZGU7CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOTIsMTAgKzIwOTIsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVBcml0aE11bChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEFyaXRoSU11bDoKLSAgICAgICAgY29t
cGlsZUFyaXRoSU11bChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIEFyaXRoRGl2
OiB7CiAgICAgICAgIGNvbXBpbGVBcml0aERpdihub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00
NzAyLDYgKzQ2OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgogICAgIGNhc2UgSW50NTJUb1ZhbHVlOgogICAgIGNh
c2UgQ2hlY2tJbkJvdW5kczoKKyAgICBjYXNlIEFyaXRoSU11bDoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIzLDEwICsyNDIzLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlQXJpdGhNdWwo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBBcml0aElNdWw6Ci0gICAgICAgIGNv
bXBpbGVBcml0aElNdWwobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBBcml0aERp
djogewogICAgICAgICBjb21waWxlQXJpdGhEaXYobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAt
NTAwMiw2ICs0OTk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
ICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CisgICAgY2FzZSBBcml0aElNdWw6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNjEyNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxNyw3ICsyMDE3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVUludDMyVG9OdW1iZXIoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGVDYW5TcGVj
dWxhdGVJbnQzMihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgIGlmIChkb2VzT3ZlcmZs
b3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIHNv
bWV0aW1lcyBwcm9kdWNlcyBkb3VibGVzLiBTbyBwcm9kdWNlIGEgZG91YmxlIGV2ZXJ5CiAgICAg
ICAgIC8vIHRpbWUuIFRoaXMgYXQgbGVhc3QgYWxsb3dzIHN1YnNlcXVlbnQgY29kZSB0byBub3Qg
aGF2ZSB3ZWlyZCBjb25kaXRpb25hbHMuCiAgICAgICAgICAgICAKQEAgLTIwMzcsNyArMjAzNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVVSW50MzJUb051bWIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghYnl0ZWNvZGVDYW5UcnVuY2F0
ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPmFyaXRoTW9kZSgpID09IEFyaXRoOjpDaGVja092ZXJmbG93KTsKIAogICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CkBAIC0yMDYwLDggKzIwNjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZURvdWJsZUFzSW50MwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgIGJvb2wg
bmVnWmVyb0NoZWNrID0gIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpOwotICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKHZhbHVl
RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQUiwgbmVnWmVyb0NoZWNrKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgp
KSk7CisgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIoCisgICAgICAgIHZhbHVl
RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQUiwKKyAgICAgICAgc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKTsKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBmYWlsdXJlQ2FzZXMpOwogCiAgICAgaW50
MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTI1ODUsMTIgKzI1ODcsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogewogICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CiAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICBBU1NFUlQo
IXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIAog
ICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CiAg
ICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogCi0gICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhu
b2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMi5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0x
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtMjYwNSw3ICsyNjA5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAg
aW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhu
b2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0y
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtMjYyMyw3ICsyNjI3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBHUFJS
ZWcgZ3ByMiA9IG9wMi5ncHIoKTsKICAgICAgICAgR1BSUmVnIGdwclJlc3VsdCA9IHJlc3VsdC5n
cHIoKTsKIAotICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUt
PmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQogICAg
ICAgICAgICAgICAgIG1faml0LmFkZDMyKGdwcjIsIGdwclJlc3VsdCk7CiAgICAgICAgICAgICBl
bHNlIHsKQEAgLTI2NDcsNiArMjY1MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
ZGQoTm9kZSogbm8KICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIE1hY2hp
bmVJbnRVc2U6IHsKKyAgICAgICAgQVNTRVJUKHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJp
dGhNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2Rl
LT5hcml0aE1vZGUoKSkpOworCiAgICAgICAgIC8vIFdpbGwgd2UgbmVlZCBhbiBvdmVyZmxvdyBj
aGVjaz8gSWYgd2UgY2FuIHByb3ZlIHRoYXQgbmVpdGhlciBpbnB1dCBjYW4gYmUKICAgICAgICAg
Ly8gSW50NTIgdGhlbiB0aGUgb3ZlcmZsb3cgY2hlY2sgd2lsbCBub3QgYmUgbmVjZXNzYXJ5Lgog
ICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUo
U3BlY0ludDUyKQpAQCAtMjc2MCwxMiArMjc2NywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhTdWIoTm9kCiB7CiAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkp
IHsKICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChpc051
bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
aW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgICAg
IGlmIChieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgp
KSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkp
OwogICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI3ODMsNyArMjc5Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKElt
bTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgaWYgKCFz
aG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICBt
X2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSkpOwpAQCAtMjc5Niw3ICsyODA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIAotICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFy
aXRoTW9kZSgpKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
CiAgICAgICAgIH0gZWxzZQpAQCAtMjgwOCw2ICsyODE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGNhc2UgTWFjaGluZUludFVzZTogeworICAgICAgICBBU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxv
dyhub2RlLT5hcml0aE1vZGUoKSkpOworICAgICAgICBBU1NFUlQoIXNob3VsZENoZWNrTmVnYXRp
dmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CisKICAgICAgICAgLy8gV2lsbCB3ZSBuZWVkIGFu
IG92ZXJmbG93IGNoZWNrPyBJZiB3ZSBjYW4gcHJvdmUgdGhhdCBuZWl0aGVyIGlucHV0IGNhbiBi
ZQogICAgICAgICAvLyBJbnQ1MiB0aGVuIHRoZSBvdmVyZmxvdyBjaGVjayB3aWxsIG5vdCBiZSBu
ZWNlc3NhcnkuCiAgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5j
b3VsZEJlVHlwZShTcGVjSW50NTIpCkBAIC0yODY0LDkgKzI4NzYsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgICAgIC8vIE5vdGU6IHRoZXJlIGlzIG5v
IG5vdGlvbiBvZiBiZWluZyBub3QgdXNlZCBhcyBhIG51bWJlciwgYnV0IHNvbWVvbmUKICAgICAg
ICAgLy8gY2FyaW5nIGFib3V0IG5lZ2F0aXZlIHplcm8uCiAgICAgICAgIAotICAgICAgICBpZiAo
Ynl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAg
ICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAg
ICAgICBtX2ppdC5uZWczMihyZXN1bHQuZ3ByKCkpOwotICAgICAgICBlbHNlIGlmIChieXRlY29k
ZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ZWxzZSBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1f
aml0LmJyYW5jaE5lZzMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVzdWx0LmdwcigpKSk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMigweDdmZmZmZmZmKSkpOwpAQCAtMjg3OSw2ICsy
ODkxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6IHsKKyAgICAgICAgQVNTRVJU
KHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgCiAgICAg
ICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVj
SW50NTIpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVXaGljaGV2ZXJJbnQ1Mk9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CkBAIC0yODg2LDcgKzI5MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhOZWdhdGUoCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBtX2ppdC5uZWc2NChyZXN1bHRHUFIpOwotICAgICAgICAgICAgaWYgKCFieXRlY29kZUNhbkln
bm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAg
aWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgICAgICBOZWdhdGl2
ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CkBAIC0yOTAzLDcgKzI5
MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBJbnQ1Mk92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoTmVnNjQoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCByZXN1bHRHUFIpKTsKLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0
aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoIXNob3VsZENo
ZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCks
IDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRHUFIpKTsKQEAgLTI5MjgsMjEgKzI5NDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgICAgIHJldHVybjsKICAgICB9CiB9Ci12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhJTXVsKE5vZGUqIG5vZGUpCi17Ci0gICAgU3Bl
Y3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlSW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwotICAgIEdQ
UlJlZyByZWcyID0gb3AyLmdwcigpOwotCi0gICAgbV9qaXQubW92ZShyZWcxLCByZXN1bHQuZ3By
KCkpOwotICAgIG1faml0Lm11bDMyKHJlZzIsIHJlc3VsdC5ncHIoKSk7Ci0gICAgaW50MzJSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICByZXR1cm47Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CkBAIC0yOTU3LDcgKzI5NTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgICAgIC8vIFdlIGNhbiBwZXJmb3JtIHRydW5j
YXRlZCBtdWx0aXBsaWNhdGlvbnMgaWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIGJlY2F1c2UgaWYg
dGhlCiAgICAgICAgIC8vIGZpeHVwIHBoYXNlIGNvdWxkIG5vdCBwcm92ZSB0aGF0IGl0IHdvdWxk
IGJlIHNhZmUsIGl0IHdvdWxkIGhhdmUgdHVybmVkIHVzIGludG8KICAgICAgICAgLy8gYSBkb3Vi
bGUgbXVsdGlwbGljYXRpb24uCi0gICAgICAgIGlmIChieXRlY29kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoIXNob3VsZENoZWNrT3Zl
cmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHJlZzEs
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5tdWwzMihyZWcyLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjk2Nyw3ICsyOTY2LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5v
ZGUgY2FyZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9y
ZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hv
dWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1t
MzIoMCkpKTsKQEAgLTI5ODAsNiArMjk3OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aE11bChOb2QKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KSAgIAogICAgIGNhc2UgTWFj
aGluZUludFVzZTogeworICAgICAgICBBU1NFUlQoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5h
cml0aE1vZGUoKSkpOworICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyBzdXBlciBjbGV2ZXIu
IFdlIHdhbnQgdG8gZG8gYW4gaW50NTIgbXVsdGlwbGljYXRpb24gYW5kIGNoZWNrIHRoZQogICAg
ICAgICAvLyBpbnQ1MiBvdmVyZmxvdyBiaXQuIFRoZXJlIGlzIG5vIGRpcmVjdCBoYXJkd2FyZSBz
dXBwb3J0IGZvciB0aGlzLCBidXQgd2UgZG8KICAgICAgICAgLy8gaGF2ZSB0aGUgYWJpbGl0eSB0
byBkbyBhbiBpbnQ2NCBtdWx0aXBsaWNhdGlvbiBhbmQgY2hlY2sgdGhlIGludDY0IG92ZXJmbG93
CkBAIC0zMDE3LDcgKzMwMTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhN
dWwoTm9kCiAgICAgICAgICAgICBJbnQ1Mk92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoTXVsNjQoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDJH
UFIsIHJlc3VsdEdQUikpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9y
ZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hv
dWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDY0KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTMwODcsNyArMzA4OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2FmZURlbm9taW5hdG9yID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlLCB0
ZW1wLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpKTsKICAgICAKICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIGlmIChieXRlY29kZVVzZXNBc051bWJlcihu
b2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxv
dyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3Zl
cmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
WmVybywgb3AyR1BSKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMUdQ
UiwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0z
MTE1LDcgKzMxMTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhEaXYoTm9k
CiAgICAgCiAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8s
IHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAgIC8vIHRvIHByb2R1
Y2UgbmVnYXRpdmUgemVyby4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZl
WmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhO
ZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIG51
bWVyYXRvck5vblplcm8ubGluaygmbV9qaXQpOwpAQCAtMzEzNSw3ICszMTM2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBi
ZSBvYmxpZ2F0ZWQgdG8KICAgICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVh
ZC4KLSAgICAgICAgaWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOwog
ICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC0zMTUwLDcgKzMxNTEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhEaXYoTm9kCiAKICAgICAgICAgLy8g
SWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhh
dCB3ZSdyZSBub3QgYWJvdXQKICAgICAgICAgLy8gdG8gcHJvZHVjZSBuZWdhdGl2ZSB6ZXJvLgot
ICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5h
cml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG51bWVyYXRv
ck5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9w
MUdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDJH
UFIsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgbnVtZXJhdG9yTm9uWmVyby5saW5r
KCZtX2ppdCk7CkBAIC0zMTYwLDcgKzMxNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhEaXYoTm9kCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSB3YXMgbm8gcmVt
YWluZGVyLiBJZiB0aGVyZSBoYWQgYmVlbiwgdGhlbiB3ZSdkIGJlIG9ibGlnYXRlZCB0bwogICAg
ICAgICAvLyBwcm9kdWNlIGEgZG91YmxlIHJlc3VsdCBpbnN0ZWFkLgotICAgICAgICBpZiAoYnl0
ZWNvZGVVc2VzQXNOdW1iZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYg
KHNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hN
dWwzMihKSVRDb21waWxlcjo6T3ZlcmZsb3csIHF1b3RpZW50LmdwcigpLCBvcDJHUFIsIG11bHRp
cGx5QW5zd2VyLmdwcigpKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93
LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWws
IG11bHRpcGx5QW5zd2VyLmdwcigpLCBvcDFHUFIpKTsKICAgICAgICAgfQpAQCAtMzE3Niw3ICsz
MTc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAg
ICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3Vs
YXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUg
emVyby4KLSAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5h
cml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8o
bm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
dW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBvcDFHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8s
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIG51bWVyYXRvck5vblpl
cm8ubGluaygmbV9qaXQpOwpAQCAtMzE4Niw3ICszMTg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoRGl2KE5vZAogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgd2Fz
IG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBvYmxpZ2F0ZWQg
dG8KICAgICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVhZC4KLSAgICAgICAg
aWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAg
ICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQu
YnJhbmNoTXVsMzIoSklUQ29tcGlsZXI6Ok92ZXJmbG93LCBxdW90aWVudC5ncHIoKSwgb3AyR1BS
LCBtdWx0aXBseUFuc3dlci5ncHIoKSkpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBtdWx0aXBseUFuc3dlci5ncHIoKSwgb3AxR1BSKSk7CiAgICAgICAgIH0KQEAgLTMy
NzQsNyArMzI3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QK
ICAgICAgICAgICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwogICAgICAgICAgICAgICAg
IG1faml0LmFkZDMyKGRpdmlkZW5kR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+
YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0
LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGRpdmlkZW5kR1BSLCBU
cnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5l
Z2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBp
bGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKQEAgLTMzMTEsNyArMzMxMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihkaXZpc29yKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgbV9q
aXQuYXNzZW1ibGVyKCkuY2RxKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCku
aWRpdmxfcihzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuSWdu
b3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIs
IFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxl
cjo6WmVybywgZWR4LmdwcigpKSk7CiAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvclBvc2l0
aXZlLmxpbmsoJm1faml0KTsKQEAgLTMzNjgsNyArMzM2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiAtMl4z
MSAvIC0xIHdpbGwgYWN0dWFsbHkgeWllbGQgbmVnYXRpdmUgemVybywgc28gd2UgY291bGQgaGF2
ZSBhCiAgICAgICAgIC8vIHNlcGFyYXRlIGNhc2UgZm9yIHRoYXQuIEJ1dCBpdCBwcm9iYWJseSBk
b2Vzbid0IG1hdHRlciBzbyBtdWNoLgotICAgICAgICBpZiAoYnl0ZWNvZGVVc2VzQXNOdW1iZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZs
b3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92
ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Olplcm8sIG9wMkdQUikpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDFH
UFIsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgICAgICB9IGVsc2UgewpAQCAt
MzQwNyw3ICszNDA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5v
ZAogICAgICAgICAgICAgdW5sb2NrKG9wMlRlbXBHUFIpOwogCiAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6ZXJvLgotICAgICAgICBpZiAo
IWJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7
CisgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkp
IHsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gbV9q
aXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxU2F2ZUdQUiwg
VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywg
ZWR4LmdwcigpKSk7CiAgICAgICAgICAgICBudW1lcmF0b3JQb3NpdGl2ZS5saW5rKCZtX2ppdCk7
CkBAIC0zNDI5LDEyICszNDMwLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0
aE1vZChOb2QKICAgICAgICAgR1BSUmVnIG11bHRpcGx5QW5zd2VyR1BSID0gbXVsdGlwbHlBbnN3
ZXIuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuc2RpdihxdW90aWVudFRoZW5S
ZW1haW5kZXJHUFIsIGRpdmlkZW5kR1BSLCBkaXZpc29yR1BSKTsKKyAgICAgICAgLy8gRklYTUU6
IEl0IHNlZW1zIGxpa2UgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQgdGhpcz8g
V2hhdCBpZiB3ZSBoYXZlCisgICAgICAgIC8vIGFyaXRoTW9kZSgpID09IEFyaXRoOjpVbmNoZWNr
ZWQ/CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjY0NDQKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoTXVsMzIoSklUQ29tcGlsZXI6Ok92ZXJmbG93LCBxdW90aWVudFRoZW5S
ZW1haW5kZXJHUFIsIGRpdmlzb3JHUFIsIG11bHRpcGx5QW5zd2VyR1BSKSk7CiAgICAgICAgIG1f
aml0LmFzc2VtYmxlcigpLnN1YihxdW90aWVudFRoZW5SZW1haW5kZXJHUFIsIGRpdmlkZW5kR1BS
LCBtdWx0aXBseUFuc3dlckdQUik7CiAKICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJv
dXQgbmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKICAg
ICAgICAgLy8gdG8gcHJvZHVjZSBuZWdhdGl2ZSB6ZXJvLgotICAgICAgICBpZiAoIWJ5dGVjb2Rl
Q2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAg
IGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UncmUgbm90IGFib3V0IHRvIGNyZWF0ZSBuZWdhdGl2ZSB6
ZXJvLgogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBkaXZpZGVuZEdQ
UiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVy
bywgcXVvdGllbnRUaGVuUmVtYWluZGVyR1BSKSk7CkBAIC0zNDUyLDEyICszNDU2LDE1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgR1BSUmVnIG11
bHRpcGx5QW5zd2VyR1BSID0gbXVsdGlwbHlBbnN3ZXIuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQu
YXNzZW1ibGVyKCkuc2RpdjwzMj4ocXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpZGVuZEdQ
UiwgZGl2aXNvckdQUik7CisgICAgICAgIC8vIEZJWE1FOiBJdCBzZWVtcyBsaWtlIHRoZXJlIGFy
ZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRoaXM/IFdoYXQgaWYgd2UgaGF2ZQorICAgICAg
ICAvLyBhcml0aE1vZGUoKSA9PSBBcml0aDo6VW5jaGVja2VkPworICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NDQ0CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaE11bDMyKEpJ
VENvbXBpbGVyOjpPdmVyZmxvdywgcXVvdGllbnRUaGVuUmVtYWluZGVyR1BSLCBkaXZpc29yR1BS
LCBtdWx0aXBseUFuc3dlckdQUikpOwogICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5zdWI8MzI+
KHF1b3RpZW50VGhlblJlbWFpbmRlckdQUiwgZGl2aWRlbmRHUFIsIG11bHRpcGx5QW5zd2VyR1BS
KTsKIAogICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6ZXJvLCB0
aGVuIHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAvLyB0byBwcm9kdWNl
IG5lZ2F0aXZlIHplcm8uCi0gICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVpl
cm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVn
YXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCB3ZSdyZSBub3QgYWJvdXQgdG8gY3JlYXRlIG5lZ2F0aXZlIHplcm8uCiAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGRpdmlkZW5kR1BSLCBUcnVzdGVkSW1tMzIoMCkp
OwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBxdW90aWVudFRoZW5SZW1h
aW5kZXJHUFIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MTI0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1Miw3ICsyMDUyLDYg
QEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFyaXRoU3ViKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVBcml0aE5lZ2F0ZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNdWwoTm9kZSop
OwotICAgIHZvaWQgY29tcGlsZUFyaXRoSU11bChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJp
dGhEaXYoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoTW9kKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjEy
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODI0LDcgKzgyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBM
VmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBpc1N1YiA/IG1fb3V0LnN1YihsZWZ0LCByaWdodCkgOiBtX291dC5hZGQo
bGVmdCwgcmlnaHQpOwogCi0gICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVn
ZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgaWYgKCFzaG91bGRD
aGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0
SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTg3OCwxMiArODc4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5tdWwobGVmdCwgcmlnaHQpOwogCi0gICAgICAgICAgICBpZiAoIWJ5dGVjb2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIGlm
IChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CiAgICAgICAgICAg
ICAgICAgTFZhbHVlIG92ZXJmbG93UmVzdWx0ID0gbV9vdXQubXVsV2l0aE92ZXJmbG93MzIobGVm
dCwgcmlnaHQpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgp
LCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFieXRlY29kZUNhbklnbm9yZU5lZ2F0
aXZlWmVybyhtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoc2hv
dWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhN
dWwgc2xvdyBjYXNlIikpOwogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOwogICAg
ICAgICAgICAgICAgIApAQCAtOTEwLDcgKzkxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBM
VmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZsb3c2NChsZWZ0LCByaWdo
dCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoSW50NTJPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBt
X291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKIAotICAgICAgICAgICAgaWYg
KCFieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0
aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgc2xvdyBjYXNlIikpOwogICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhN
dWwgY29udGludWF0aW9uIikpOwogICAgICAgICAgICAgICAgIApAQCAtOTYwLDcgKzk2MCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9
IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChieXRlY29kZVVzZXNBc051bWJlcihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7
CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgp
KSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSBjb25kID0gbV9vdXQuYml0T3IobV9vdXQuaXNa
ZXJvMzIoZGVub21pbmF0b3IpLCBtX291dC5lcXVhbChudW1lcmF0b3IsIG5lZzJUb1RoZTMxKSk7
CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIGNvbmQp
OwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTk5MCw3ICs5
OTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGRvbmUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWJ5
dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsK
KyAgICAgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9k
ZSgpKSkgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHplcm9OdW1lcmF0b3IgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2TW9kIHplcm8gbnVtZXJhdG9yIikpOwogICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG51bWVyYXRvckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQXJpdGhEaXZNb2QgbnVtZXJhdG9yIGNvbnRpbnVhdGlvbiIpKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTEwMTAsNyArMTAxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgPyBtX291dC5kaXYobnVtZXJhdG9yLCBkZW5vbWluYXRvcikKICAgICAgICAgICAgICAgICA6
IG1fb3V0LnJlbShudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGJ5dGVjb2RlVXNlc0FzTnVtYmVyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
IHsKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2Rl
KCkpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgICAgICBP
dmVyZmxvdywgbm9WYWx1ZSgpLCAwLAogICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bChtX291dC5tdWwoZGl2TW9kUmVzdWx0LCBkZW5vbWluYXRvciksIG51bWVyYXRvcikpOwpAQCAt
MTEyMiw4ICsxMTIyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghYnl0ZWNvZGVD
YW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAg
ICAgICAgIGlmIChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUt
PmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2
ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhIG5lZ2F0ZS13aXRoLW92ZXJmbG93IGludHJpbnNpYy4gSG9wZWZ1bGx5IHRo
aXMKICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyB0aGUgdHJpY2ssIHRob3VnaC4KICAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93UmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJm
bG93MzIobV9vdXQuaW50MzJaZXJvLCB2YWx1ZSk7CkBAIC0xMTQyLDcgKzExNDIsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIEludDUyS2luZCBraW5kOwogICAgICAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOwog
ICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOwotICAgICAg
ICAgICAgICAgIGlmICghYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVpl
cm8obV9ub2RlLT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShO
ZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAg
ICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0LCBraW5kKTsKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTEyMDgsNyArMTIwOCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICBpZiAoIW5vZGVD
YW5TcGVjdWxhdGVJbnQzMihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlm
IChkb2VzT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKICAgICAgICAgICAgIHNldERv
dWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="244176"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>