<?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>67670</bug_id>
          
          <creation_ts>2011-09-06 13:52:19 -0700</creation_ts>
          <short_desc>DFG JIT does not optimize booleans</short_desc>
          <delta_ts>2011-09-06 19:47:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462832</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 13:52:19 -0700</bug_when>
    <thetext>The DFG JIT tries to perform type-specific optimizations, particularly for arrays, cells, integers, and doubles.  But it does nothing for booleans, even though some obvious optimizations are possible, like simplifying the code emitted for Branch() if the input is known or predicted boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462844</commentid>
    <comment_count>1</comment_count>
      <attachid>106483</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 14:06:23 -0700</bug_when>
    <thetext>Created attachment 106483
the patch

Still have more testing to do, but I think it&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462846</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 14:07:50 -0700</bug_when>
    <thetext>Attachment 106483 did not pass style-queue:

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

Source/JavaScriptCore/dfg/DFGJITCompiler.h:221:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1211:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/bytecode/ValueProfile.h:184:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/bytecode/ValueProfile.h:188:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGNode.h:293:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGPredictionTracker.h:90:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h:414:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:82:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:160:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:163:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:213:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 11 in 19 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>462887</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 15:04:14 -0700</bug_when>
    <thetext>Here&apos;s the current performance of this patch relative to just dynamic optimization alone:



Benchmark report for V8.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;DynamicOpt&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc
&quot;DynamicBoolOpt&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

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

                     TipOfTree               DynamicOpt            DynamicBoolOpt       DynamicBoolOpt v. TipOfTree

crypto            92.9087+-1.0076    ^    82.0337+-0.5620    ?    82.9391+-1.3857       ^ definitely 1.1202x faster
deltablue        273.9975+-5.3832    ^   261.2656+-1.0780    ?   261.7145+-2.2611       ^ definitely 1.0469x faster
earley-boyer     101.8557+-1.8443    !   108.5937+-2.2791    ^   102.9614+-0.9825       ? might be 1.0109x slower
raytrace          81.4509+-1.0405    ?    83.5420+-1.2135    ^    81.4757+-0.7785       ?
regexp           111.8391+-1.3009        110.3129+-1.7970    ?   111.0009+-1.0489       
richards         245.8331+-1.3454    ^   236.6249+-1.3738    ^   220.2786+-2.1472       ^ definitely 1.1160x faster
splay            104.5783+-1.5713    ?   105.3847+-0.8156    ?   105.7928+-2.3796       ? might be 1.0116x slower

&lt;arithmetic&gt;     144.6376+-1.0918    ^   141.1082+-0.3229    ^   138.0233+-0.5582       ^ definitely 1.0479x faster
&lt;geometric&gt;      129.3673+-0.6707    ^   127.0473+-0.3857    ^   124.7610+-0.6602       ^ definitely 1.0369x faster
&lt;harmonic&gt;       118.4370+-0.4619    ^   116.6713+-0.4381    ^   114.9704+-0.7147       ^ definitely 1.0302x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462922</commentid>
    <comment_count>4</comment_count>
      <attachid>106500</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 15:32:49 -0700</bug_when>
    <thetext>Created attachment 106500
the patch - fix windows, style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462996</commentid>
    <comment_count>5</comment_count>
      <attachid>106518</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 16:52:45 -0700</bug_when>
    <thetext>Created attachment 106518
the patch - undo accidental Platform.h change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463054</commentid>
    <comment_count>6</comment_count>
      <attachid>106531</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 18:44:38 -0700</bug_when>
    <thetext>Created attachment 106531
the patch - fixed a silly bug

Holding off commit until tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463065</commentid>
    <comment_count>7</comment_count>
      <attachid>106531</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-06 18:57:52 -0700</bug_when>
    <thetext>Comment on attachment 106531
the patch - fixed a silly bug

OK, this appears ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463095</commentid>
    <comment_count>8</comment_count>
      <attachid>106531</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 19:46:59 -0700</bug_when>
    <thetext>Comment on attachment 106531
the patch - fixed a silly bug

Clearing flags on attachment: 106531

Committed r94629: &lt;http://trac.webkit.org/changeset/94629&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463096</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 19:47:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106483</attachid>
            <date>2011-09-06 14:06:23 -0700</date>
            <delta_ts>2011-09-06 15:32:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dynboolopt_patch_4.diff</filename>
            <type>text/plain</type>
            <size>77112</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM4IEBA
CisyMDExLTA5LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBkb2VzIG5vdCBvcHRpbWl6ZSBib29sZWFucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBib29sZWFuIHZhbHVl
IHByb2ZpbGluZywgYm9vbGVhbiBwcmVkaWN0aW9uIGluIHRoZSBERkcsCisgICAgICAgIGJvb2xl
YW4gZm9yd2FyZCBmbG93IHByb3BhZ2F0aW9uIGluIHRoZSBERkdQcm9wYWdhdG9yLCBib29sZWFu
CisgICAgICAgIGRhdGEgZm9ybWF0IGluIERGRyBnZW5lcmF0aW9uIGluZm8sIGFuZCBjb21wcmVo
ZW5zaXZlIG9wdGltaXphdGlvbnMKKyAgICAgICAgYmFzZWQgb24gYm90aCBib29sZWFuIHByZWRp
Y3Rpb24gYW5kIGJvb2xlYW4gZ2VuZXJhdGlvbiBpbmZvLgorICAgICAgICBUaGlzIGlzIGJyaW5n
cyB0aGUgc3BlZWQtdXAgb24gdjgtcmljaGFyZHMgdG8gMTIlLCBhbmQgZ2l2ZXMgc2xpZ2h0Cisg
ICAgICAgIHNwZWVkLXVwcyBlbHNld2hlcmUgYXMgd2VsbC4KKyAgICAgICAgCisgICAgICAgIE1h
a2luZyB0aGlzIHdvcmsgcmlnaHQgcmVxdWlyZWQgbmF2aWdhdGluZyBzb21lIHN1YnRsZXRpZXMg
aW4KKyAgICAgICAgdmFsdWUgcHJvZmlsaW5nLiAgU29tZSBmdW5jdGlvbnMgZ2V0IGNvbXBpbGVk
IHdpdGggaW5zdWZmaWNpZW50CisgICAgICAgIGluZm9ybWF0aW9uIGJlY2F1c2Ugc29tZSBpbXBv
cnRhbnQgcGF0aCBvZiB0aGUgZnVuY3Rpb24gbmV2ZXIKKyAgICAgICAgZXhlY3V0ZWQuICBJbiB0
aGVzZSBjYXNlcywgd2Ugd2lzaCB0byBmYWxsIGJhY2sgb24gc3RhdGljCisgICAgICAgIHNwZWN1
bGF0aW9uLiAgQnV0IHRvIGRvIHNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHByZWRpY3Rpb25z
IHRoYXQKKyAgICAgICAgYXJlIGluaGVyZW50IGluIHRoZSBjb2RlIChsaWtlIHRoYXQgR2V0QnlJ
ZCBhbG1vc3QgY2VydGFpbmx5IHRha2VzCisgICAgICAgIGEgY2VsbCBvcGVyYW5kKSBhcmUgcmVm
bGVjdGVkIGluIHByZWRpY3Rpb25zIHRoYXQgd2UgbWFrZSBpbgorICAgICAgICBERkdQcm9wYWdh
dG9yLiAgVGh1cywgREZHUHJvcGFnYXRvciBub3cgZG9lcyBib3RoIGJhY2t3YXJkIGFuZAorICAg
ICAgICBmb3J3YXJkIGZsb3csIHVzaW5nIGEgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZCBmaXhw
b2ludC4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYWNrd2FyZCBmbG93IGluIERGR1Byb3BhZ2F0
b3IgaXMgYSBzZXBhcmF0ZSBzdGF0aWMgYW5hbHlzaXMsCisgICAgICAgIGFuZCBuZWVkcyB0byBr
ZWVwIGEgc2V0IG9mIGJhY2t3YXJkIGZsb3cgYWJzdHJhY3QgdmFsdWVzIGZvcgorICAgICAgICB2
YXJpYWJsZXMsIGFyZ3VtZW50cywgYW5kIGdsb2JhbHMuICBUbyBtYWtlIHRoaXMgZWFzeSwgdGhp
cyBwYXRjaAorICAgICAgICBmYWN0b3JzIG91dCBERkdHcmFwaCdzIHByZWRpY3Rpb24gdHJhY2tp
bmcgY2FwYWJpbGl0eSBpbnRvCisgICAgICAgIERGR1ByZWRpY3Rpb25UcmFja2VyLCB3aGljaCBu
b3cgZ2V0cyB1c2VkIGJ5IGJvdGggREZHR3JhcGggKGZvcgorICAgICAgICBmb3J3YXJkIGZsb3cg
cHJlZGljdGlvbnMpIGFuZCBERkdQcm9wYWdhdG9yIChmb3IgYmFja3dhcmQgZmxvdworICAgICAg
ICBwcmVkaWN0aW9ucykuICBCYWNrd2FyZCBmbG93IHByZWRpY3Rpb25zIGV2ZW50dWFsbHkgZ2V0
IG1lcmdlZAorICAgICAgICBpbnRvIGZvcndhcmQgZmxvdyBvbmVzLCBidXQgdGhlIHR3byBhcmUg
bm90IGVxdWl2YWxlbnQ6IGEgZm9yd2FyZAorICAgICAgICBmbG93IHByZWRpY3Rpb24gaXMgYSBz
dXBlcnNldCBvZiB0aGUgYmFja3dhcmQgZmxvdyBwcmVkaWN0aW9uLgorICAgICAgICAKKyAgICAg
ICAgRGVidWdnaW5nIHRoZXNlIHByZWRpY3Rpb24gaXNzdWVzIHJlcXVpcmVkIGEgYmV0dGVyIHVu
ZGVyc3RhbmRpbmcKKyAgICAgICAgb2Ygd2hlcmUgd2UgZmFpbCBzcGVjdWxhdGlvbiwgYW5kIHdo
YXQgb3VyIHZhbHVlIHByZWRpY3Rpb25zIGxvb2sKKyAgICAgICAgbGlrZS4gIFRoaXMgcGF0Y2gg
YWxzbyBhZGRzIG9wdGlvbmFsIHZlcmJvc2Ugc3BlY3VsYXRpb24gZmFpbHVyZQorICAgICAgICAo
c28gYW4gaW5mb3JtYXRpdmUgcHJpbnRmIGZpcmVzIHdoZW5ldmVyIHNwZWN1bGF0aW9uIGZhaWx1
cmUgb2NjdXJzKQorICAgICAgICBhbmQgc2xpZ2h0IGltcHJvdmVtZW50cyB0byB0aGUgdmVyYm9z
aXR5IGluIG90aGVyIHBsYWNlcy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
OgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnByb2JhYmlsaXR5T2ZCb29sZWFuKToKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21w
dXRlU3RhdGlzdGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXAp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Zmls
bEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90SW50ZWdlcik6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bkJvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVU
b05vblNwZWN1bGF0aXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmRlYnVnQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omlz
Qm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVP
ZkJvb2xlYW5Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjppc0Jvb2xlYW5QcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVkaWN0
aW9uVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlUHJlZGljdGlvbnMpOgorICAg
ICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojppc0Jvb2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkJv
b2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQm9vbGVhblJlc3Vs
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTnVtZXJpY1Jlc3VsdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1By
ZWRpY3Rpb25UcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Om9wZXJhbmRJc0Fy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uU2xvdDo6UHJlZGljdGlvblNs
b3QpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpQcmVkaWN0aW9uVHJh
Y2tlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVT
aW1pbGFyVG8pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpudW1iZXJP
ZkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Om51bWJl
ck9mVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJn
dW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpwcmVkaWN0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJl
ZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Omdl
dEFyZ3VtZW50UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNr
ZXI6OmdldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2Vy
OjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
Om1lcmdlVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjpTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6
On5TcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZDo6dXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmRlc2NyaXB0aW9u
KToKKwogMjAxMS0wOS0wNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgd2luZG93cyBjaGFuZ2VzIGZvciBKU0M6UmVnRXhwIGZ1bmN0aW9uYWwgdGVz
dHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgJKHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDE2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQm9vbGVhbnMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldICYm
IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAg
ICAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHBhcnRpY3VsYXJseSBvcHRpbWl6
ZWQsIGluIHRoYXQgdGhleSB3aWxsIGVhY2gKICAgICAvLyBwZXJmb3JtIHR3byBwYXNzZXMgb3Zl
ciB0aGUgYnVja2V0cyBhcnJheS4gSG93ZXZlciwgdGhleSBhcmUKQEAgLTE0MiwxNyArMTUyLDIz
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQ
cm9iYWJpbGl0eShudW1iZXJPZkFycmF5cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIHByb2JhYmlsaXR5T2ZCb29sZWFuKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZCb29sZWFucygpLCBudW1i
ZXJPZlNhbXBsZXMoKSk7CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcChG
SUxFKiBvdXQpCiAgICAgewogICAgICAgICBmcHJpbnRmKG91dCwKLSAgICAgICAgICAgICAgICAi
c2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9
ICV1IiwKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRv
dWJsZSA9ICV1ICgldSksIGNlbGwgPSAldSAoJXUpLCBhcnJheSA9ICV1ICgldSksIGJvb2xlYW4g
PSAldSAoJXUpIiwKICAgICAgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXMoKSwKLSAgICAgICAg
ICAgICAgICBudW1iZXJPZkludDMycygpLAotICAgICAgICAgICAgICAgIG51bWJlck9mRG91Ymxl
cygpLAotICAgICAgICAgICAgICAgIG51bWJlck9mQ2VsbHMoKSwKLSAgICAgICAgICAgICAgICBu
dW1iZXJPZkFycmF5cygpKTsKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mSW50MzIoKSwg
bnVtYmVyT2ZJbnQzMnMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mRG91YmxlKCks
IG51bWJlck9mRG91YmxlcygpLAorICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZDZWxsKCks
IG51bWJlck9mQ2VsbHMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQXJyYXkoKSwg
bnVtYmVyT2ZBcnJheXMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQm9vbGVhbigp
LCBudW1iZXJPZkJvb2xlYW5zKCkpOwogICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CiAgICAg
ICAgICAgICBpZiAoISFidWNrZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0pIHsKQEAgLTE2Mywx
MSArMTc5LDEzIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIiwgIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghIWJ1Y2tldHNbaV0pCisgICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldKSB7CiAg
ICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcyIsIEpTVmFsdWU6OmRlY29kZShidWNrZXRz
W2ldKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCEhd2Vha0J1Y2tldHNbaV0pCisgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0
c1tpXSkgewogICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiRGVhZENlbGwiKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMTc4LDE2ICsxOTYsMTggQEAg
c3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgIHVuc2lnbmVkIGRvdWJsZXM7CiAgICAgICAg
IHVuc2lnbmVkIGNlbGxzOwogICAgICAgICB1bnNpZ25lZCBhcnJheXM7CisgICAgICAgIHVuc2ln
bmVkIGJvb2xlYW5zOwogICAgIH07CiAKICAgICAvLyBPcHRpbWl6ZWQgbWV0aG9kIGZvciBnZXR0
aW5nIGFsbCBjb3VudHMgYXQgb25jZS4KICAgICB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29uc3QKICAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIHNhbXBsZXMgPSAwOwotICAgICAgICB1bnNpZ25lZCBpbnQzMnMg
ID0gMDsKLSAgICAgICAgdW5zaWduZWQgZG91YmxlcyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNl
bGxzICAgPSAwOwotICAgICAgICB1bnNpZ25lZCBhcnJheXMgID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgc2FtcGxlcyAgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQzMnMgICA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGRvdWJsZXMgID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2VsbHMgICAgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBhcnJheXMgICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGJvb2xlYW5z
ID0gMDsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZkJ1Y2tldHM7ICsraSkgewogICAgICAgICAgICAgaWYgKCFidWNrZXRzW2ldKSB7CkBAIC0yMTMs
MTQgKzIzMywxNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAgICAgICAgICBjZWxs
cysrOwogICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJmdsb2JhbERhdGEsIHZhbHVlLmFz
Q2VsbCgpKSkKICAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAg
IGJvb2xlYW5zKys7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpc3RpY3Muc2Ft
cGxlcyA9IHNhbXBsZXM7Ci0gICAgICAgIHN0YXRpc3RpY3MuaW50MzJzICA9IGludDMyczsKLSAg
ICAgICAgc3RhdGlzdGljcy5kb3VibGVzID0gZG91YmxlczsKLSAgICAgICAgc3RhdGlzdGljcy5j
ZWxscyAgID0gY2VsbHM7Ci0gICAgICAgIHN0YXRpc3RpY3MuYXJyYXlzICA9IGFycmF5czsKKyAg
ICAgICAgc3RhdGlzdGljcy5zYW1wbGVzICA9IHNhbXBsZXM7CisgICAgICAgIHN0YXRpc3RpY3Mu
aW50MzJzICAgPSBpbnQzMnM7CisgICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcyAgPSBkb3VibGVz
OworICAgICAgICBzdGF0aXN0aWNzLmNlbGxzICAgID0gY2VsbHM7CisgICAgICAgIHN0YXRpc3Rp
Y3MuYXJyYXlzICAgPSBhcnJheXM7CisgICAgICAgIHN0YXRpc3RpY3MuYm9vbGVhbnMgPSBib29s
ZWFuczsKICAgICB9CiAgICAgCiAgICAgaW50IGJ5dGVjb2RlT2Zmc2V0OyAvLyAtMSBmb3IgcHJv
bG9ndWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsMTEgKzQ3NSwxNCBA
QCBwcml2YXRlOgogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3Byb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOwogICAgICAg
ICBBU1NFUlQocHJvZmlsZSk7CiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgcHJpbnRm
KCJEeW5hbWljIHByZWRpY3Rpb24gWyV1LCAldV06ICIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIHByaW50ZigiRHluYW1pYyBwcm9maWxlIFsldSwgJXVdOiAiLCBub2RlSW5k
ZXgsIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7CiAgICAg
ICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgogICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJl
ZGljdChtYWtlUHJlZGljdGlvbigqbV9nbG9iYWxEYXRhLCAqcHJvZmlsZSksIFN0cm9uZ1ByZWRp
Y3Rpb24pOworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiICAgIFByZWRp
Y3Rpb246ICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFtub2RlSW5kZXhdLmdldFBy
ZWRpY3Rpb24oKSkpOworI2VuZGlmCiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0obm9kZUlu
ZGV4KTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwpAQCAtMTIwNSw2ICsx
MjA4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhCisgICAgICAgICAgICAv
L3ByaW50ZigiRmFpbGluZyB0byBjb21waWxlIERGRyBncmFwaCBiZWNhdXNlIG9mICVkXG4iLCBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ1
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDExICs0MiwxMyBAQCBlbnVtIERhdGFGb3JtYXQgewogICAgIERh
dGFGb3JtYXROb25lID0gMCwKICAgICBEYXRhRm9ybWF0SW50ZWdlciA9IDEsCiAgICAgRGF0YUZv
cm1hdERvdWJsZSA9IDIsCi0gICAgRGF0YUZvcm1hdENlbGwgPSAzLAorICAgIERhdGFGb3JtYXRC
b29sZWFuID0gMywKKyAgICBEYXRhRm9ybWF0Q2VsbCA9IDQsCiAgICAgRGF0YUZvcm1hdEpTID0g
OCwKICAgICBEYXRhRm9ybWF0SlNJbnRlZ2VyID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdElu
dGVnZXIsCiAgICAgRGF0YUZvcm1hdEpTRG91YmxlID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1h
dERvdWJsZSwKICAgICBEYXRhRm9ybWF0SlNDZWxsID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1h
dENlbGwsCisgICAgRGF0YUZvcm1hdEpTQm9vbGVhbiA9IERhdGFGb3JtYXRKUyB8IERhdGFGb3Jt
YXRCb29sZWFuCiB9OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNjEsNiArNjMsOCBAQCBpbmxpbmUg
Y29uc3QgY2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhCiAgICAgICAgIHJldHVybiAiRG91Ymxl
IjsKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgogICAgICAgICByZXR1cm4gIkNlbGwiOworICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgIHJldHVybiAiQm9vbGVhbiI7CiAgICAg
Y2FzZSBEYXRhRm9ybWF0SlM6CiAgICAgICAgIHJldHVybiAiSlMiOwogICAgIGNhc2UgRGF0YUZv
cm1hdEpTSW50ZWdlcjoKQEAgLTY5LDYgKzczLDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIGRhdGFG
b3JtYXRUb1N0cmluZyhEYQogICAgICAgICByZXR1cm4gIkpTRG91YmxlIjsKICAgICBjYXNlIERh
dGFGb3JtYXRKU0NlbGw6CiAgICAgICAgIHJldHVybiAiSlNDZWxsIjsKKyAgICBjYXNlIERhdGFG
b3JtYXRKU0Jvb2xlYW46CisgICAgICAgIHJldHVybiAiSlNCb29sZWFuIjsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gIlVua25vd24iOwogICAgIH0KQEAgLTg4LDYgKzk0LDcgQEAgaW5s
aW5lIGJvb2wgbmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKERhdAogICAgIGNhc2UgRGF0YUZvcm1h
dEpTSW50ZWdlcjoKICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKICAgICBjYXNlIERhdGFG
b3JtYXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgICAgICBzd2l0
Y2ggKHRvKSB7CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CiAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdERvdWJsZToKQEAgLTk3LDExICsxMDQsMTQgQEAgaW5saW5lIGJvb2wgbmVlZERh
dGFGb3JtYXRDb252ZXJzaW9uKERhdAogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6
CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgICAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFRoaXMgY2Fw
dHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNoIGlzIGN1cnJlbnRseSB1bnVzZWQuCiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIGRlZmF1bHQ6Cisg
ICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNoIGlzIGN1cnJl
bnRseSB1bnVzZWQuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1MiwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJ
bmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5z
aWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkKKyAg
ICBpZiAoIXJlZkNvdW50KSB7CisgICAgICAgIHByaW50ZigiJSA0ZDpcdHNraXBwZWQgJXNcbiIs
IChpbnQpbm9kZUluZGV4LCBvcE5hbWUob3ApKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7CiAgICAgaWYgKG11c3RH
ZW5lcmF0ZSkKICAgICAgICAgLS1yZWZDb3VudDsKQEAgLTE5MywxNCArMTk1LDE0IEBAIHZvaWQg
R3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1
bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
aWYgKGV4ZWMpIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4o
ZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVudFByZWRpY3Rpb25z
LnNpemUoKSk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWluKGV4
ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fcHJlZGljdGlvbnMubnVtYmVyT2ZB
cmd1bWVudHMoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcg
PCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKICAgICAgICAgICAgIEpTVmFsdWUgYXJndW1l
bnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAtIDEpOwogICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50VmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9u
c1thcmddLm1fdmFsdWUgfD0gUHJlZGljdEludDMyOworICAgICAgICAgICAgICAgIG1fcHJlZGlj
dGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywgUHJlZGljdEludDMyLCBXZWFrUHJlZGljdGlvbik7
CiAgICAgICAgICAgICBlbHNlIGlmIChhcmd1bWVudFZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAg
ICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0RG91
YmxlOworICAgICAgICAgICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywg
UHJlZGljdERvdWJsZSwgV2Vha1ByZWRpY3Rpb24pOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtMjIyLDEwICsyMjQsMTAgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhl
Y1N0YQogICAgICAgICBwcmludGYoIlxuIik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIG1l
cmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlLCBtYWtlUHJl
ZGljdGlvbihnbG9iYWxEYXRhLCAqcHJvZmlsZSkpOworICAgICAgICBtX3ByZWRpY3Rpb25zLnBy
ZWRpY3RBcmd1bWVudChhcmcsIG1ha2VQcmVkaWN0aW9uKGdsb2JhbERhdGEsICpwcm9maWxlKSAm
IH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgIAogI2lmIERG
R19ERUJVR19WRVJCT1NFCi0gICAgICAgIHByaW50ZigiICAgIFByZWRpY3Rpb246ICVzXG4iLCBw
cmVkaWN0aW9uVG9TdHJpbmcobV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSkpOwor
ICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5n
KG1fcHJlZGljdGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZykpKTsKICNlbmRpZgogICAg
IH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25UcmFja2VyLmgiCiAjaW5j
bHVkZSAiUmVnaXN0ZXJGaWxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC00MiwxOCArNDMsNiBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5h
bWVzcGFjZSBERkcgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAm
IHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1l
bnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9Ci0KLXN0cnVjdCBQcmVkaWN0
aW9uU2xvdCB7Ci1wdWJsaWM6Ci0gICAgUHJlZGljdGlvblNsb3QoKQotICAgICAgICA6IG1fdmFs
dWUoUHJlZGljdE5vbmUpCi0gICAgewotICAgIH0KLSAgICBQcmVkaWN0ZWRUeXBlIG1fdmFsdWU7
Ci19OwotCiB0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CiAKIC8vIEZvciBldmVyeSBsb2Nh
bCB2YXJpYWJsZSB3ZSB0cmFjayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUu
CkBAIC0xMDMsOCArOTIsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiBjbGFzcyBHcmFwaCA6IHB1
YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsKIHB1YmxpYzoKICAgICBHcmFwaCh1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKLSAgICAgICAgOiBtX2FyZ3VtZW50UHJl
ZGljdGlvbnMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fdmFyaWFibGVQcmVkaWN0aW9ucyhu
dW1WYXJpYWJsZXMpCisgICAgICAgIDogbV9wcmVkaWN0aW9ucyhudW1Bcmd1bWVudHMsIG51bVZh
cmlhYmxlcykKICAgICB7CiAgICAgfQogCkBAIC0xMzUsNzAgKzEyMywzNSBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUJlZ2luKV07CiAgICAgfQotCisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIm
IHByZWRpY3Rpb25zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zOworICAg
IH0KKyAgICAKICAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gb3BlcmFuZCArIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9u
KG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24o
cHJlZGljdGlvbiwgc291cmNlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgo
dW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlUHJlZGljdGlvbnMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQob3BlcmFuZCA+PSAwKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVQcmVk
aWN0aW9ucy5yZXNpemUob3BlcmFuZCArIDEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5t
X3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICAgICAgcmV0
dXJuIG1fcHJlZGljdGlvbnMucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwog
ICAgIH0KICAgICAKICAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVy
LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAg
IHsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBp
dGVyID0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwotICAgICAg
ICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBQcmVkaWN0aW9uU2xvdCBwcmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgICAgICAgICAgbV9nbG9iYWxWYXJQcmVkaWN0aW9u
cy5hZGQodmFyTnVtYmVyICsgMSwgcHJlZGljdGlvblNsb3QpOwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0
aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3Vy
Y2UpKTsKKyAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMucHJlZGljdEdsb2JhbFZhcih2YXJO
dW1iZXIsIHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgcHJlZGlj
dChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ug
c291cmNlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgIGNhc2Ug
R2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRp
Y3Rpb24sIHNvdXJjZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJl
cigpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAg
IGNhc2UgR2V0TWV0aG9kOgotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICBjYXNlIENh
bGw6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJl
ZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnBy
ZWRpY3Qobm9kZSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICB9CiAKICAgICBQcmVkaWN0ZWRU
eXBlIGdldFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0g
b3BlcmFuZCArIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudFByZWRpY3Rp
b25zW2FyZ3VtZW50XS5tX3ZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgodW5zaWduZWQp
b3BlcmFuZCA8IG1fdmFyaWFibGVQcmVkaWN0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWU7Ci0gICAgICAgIHJldHVy
biBQcmVkaWN0Tm9uZTsKKyAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlv
bihvcGVyYW5kKTsKICAgICB9CiAgICAgCiAgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQ
cmVkaWN0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8dW5z
aWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFyUHJlZGlj
dGlvbnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxW
YXJQcmVkaWN0aW9ucy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAg
ICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5tX3ZhbHVlOworICAgICAgICByZXR1cm4gbV9wcmVk
aWN0aW9ucy5nZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHZhck51bWJlcik7CiAgICAgfQogICAgIAog
ICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlJiBub2RlKQpAQCAtMjExLDIwICsx
NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBWYWx1ZVRvSW50MzIp
CiAgICAgICAgICAgICBub2RlUHRyID0gJigqdGhpcylbbm9kZVB0ci0+Y2hpbGQxKCldOwogICAg
ICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlUHRyLT5vcCkgewotICAgICAgICBjYXNlIEdldExv
Y2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZVB0ci0+bG9jYWwoKSk7
Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcmV0dXJuIGdldEdsb2Jh
bFZhclByZWRpY3Rpb24obm9kZVB0ci0+dmFyTnVtYmVyKCkpOwotICAgICAgICBjYXNlIEdldEJ5
SWQ6Ci0gICAgICAgIGNhc2UgR2V0TWV0aG9kOgotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAg
ICAgICBjYXNlIENhbGw6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgcmV0
dXJuIG5vZGVQdHItPmdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wcmVk
aWN0aW9ucy5nZXRQcmVkaWN0aW9uKCpub2RlUHRyKTsKICAgICB9CiAgICAgCiAgICAgLy8gSGVs
cGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KQEAgLTI0NCw2ICsxODQs
MTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNEb3Vi
bGVDb25zdGFudChjb2RlQmxvY2spOwogICAgIH0KKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50
KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAg
ICB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVz
LgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMjU3LDEyICsyMDEsMTYgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkRvdWJsZUNvbnN0YW50
KGNvZGVCbG9jayk7CiAgICAgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAg
ICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShOb2Rl
VHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2Nr
PiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxk
cmVuOwpAQCAtMjcxLDkgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAgLy8gV2hlbiBhIG5vZGUncyBy
ZWZDb3VudCBnb2VzIGZyb20gMCB0byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5
IHJlZiBhbGwgb2YgaXRzIGNoaWxkcmVuLCBhbmQgdmljZSB2ZXJzYS4KICAgICB2b2lkIHJlZkNo
aWxkcmVuKE5vZGVJbmRleCk7CiAKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX2Fy
Z3VtZW50UHJlZGljdGlvbnM7Ci0gICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV92YXJp
YWJsZVByZWRpY3Rpb25zOwotICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90PiBt
X2dsb2JhbFZhclByZWRpY3Rpb25zOworICAgIFByZWRpY3Rpb25UcmFja2VyIG1fcHJlZGljdGlv
bnM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk0
NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRv
cjo6ZmlsbEludGVnZXIoTm9kCiAgICAgY2FzZSBEYXRhRm9ybWF0SlM6CiAgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9y
bWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgICAgIC8vIFNo
b3VsZCBvbmx5IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFu
ZCB0byBiZSBpbnRlZ2VyLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtMTUz
LDYgKzE1NSw4IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAg
ICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KICAgICBjYXNlIERhdGFGb3JtYXRD
ZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29s
ZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICAgICAgICAgLy8gU2hvdWxkIG9u
bHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJl
IG51bWVyaWMuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0yOTUsMTEgKzI5
OSwxNiBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9kCiAgICAgY2Fz
ZSBEYXRhRm9ybWF0SlM6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEpTRG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDogeworICAgIGNh
c2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKICAg
ICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7
CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3Jt
YXRCb29sZWFuOgorICAgICAgICAvLyB0aGlzIHR5cGUgY3VycmVudGx5IG5ldmVyIG9jY3Vycwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTQwNiw5ICs0MTUsMjYgQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tu
b3duTm90SW50ZWdlcgogICAgIAogICAgIHJldHVybiAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUKICAgICAgICAgfHwgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTQ2VsbAorICAgICAg
ICB8fCAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0
SlNCb29sZWFuCiAgICAgICAgIHx8IChub2RlLmlzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29u
c3RhbnQobm9kZUluZGV4KS5pc0ludDMyKCkpOwogfQogCitib29sIEpJVENvZGVHZW5lcmF0b3I6
OmlzS25vd25Cb29sZWFuKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9
IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICBpZiAobm9kZS5oYXNCb29sZWFuUmVzdWx0
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpc0Jvb2xlYW5Db25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAg
ICAKKyAgICByZXR1cm4gKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTQm9vbGVhbgorICAgICAgICB8fCAoaW5mby5zcGlsbEZvcm1hdCgpIHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNCb29sZWFuOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUbywgdHlwZW5hbWUgRnJvbT4KIGlubGluZSBUbyBzYWZlQ2FzdChGcm9tIHZhbHVlKQogewpA
QCAtNTg4LDcgKzYxNCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b24KICAgICB9CiAgICAgCiAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4LCBib29sIGludmVydCkKQEAgLTc0Myw3ICs3NjksNyBAQCB2b2lkIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIAogICAgICAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTc3Nyw3ICs4MDMs
NyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiAgICAgICAgIAog
ICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogICAgIH0KIH0KIApAQCAtOTM5LDcgKzk2NSw3IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KICAgICAgICAgZG9uZTIubGluaygm
bV9qaXQpOwogICAgIH0KICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCiBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlU3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCkBAIC05NjgsMzEgKzk5
NCw2MyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRCcmFuY2goTm9kZSYgCiAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIHZhbHVlLnVz
ZSgpOwotICAgIAogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLQotICAgIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIG5vdFRha2VuKTsKLSAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCB0YWtlbik7Ci0gICAg
YWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KSkpLCBub3RUYWtlbik7Ci0gICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRha2VuKTsKICAgICAKLSAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7Ci0gICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R1BSKTsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybzsKKyAgICAgICAgCisgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9j
ayArIDEpKSB7CisgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsK
KyAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOworICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1
ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpKSwgdGFrZW4pOworICAgICAgICBpZiAobm90VGFrZW4g
IT0gKG1fYmxvY2sgKyAxKSkKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5v
dFRha2VuKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgYm9vbCBw
cmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVk
aWN0aW9uKG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV0pKTsKICAgICAKLSAgICBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiks
IHRha2VuKTsKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICBpZiAocHJlZGljdEJvb2xl
YW4pIHsKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYWRkQnJhbmNo
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRha2Vu
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1faXNTcGVjdWxhdGl2ZSAmJiBw
cmVkaWN0Qm9vbGVhbikgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5qdW1w
KCkpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDAp
KSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpLCB0YWtlbik7CisgICAgCisgICAgICAgICAgICBpZiAoIXByZWRpY3RCb29s
ZWFuKSB7CisgICAgICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAg
YWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSksIHRha2VuKTsKKyAgICAgICAgICAgIH0KICAgICAKLSAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIHZhbHVlLnVz
ZSgpOworICAgIAorICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbik7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIp
LCB0YWtlbik7CisgICAgICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKKyAg
ICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbChOb2RlJiBub2RlKQpAQCAtMTA4MSw2ICsxMTM5LDEyIEBAIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGws
IHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxl
SW5kZXhdLmV4Y2VwdGlvbkluZm8pOwogfQogCit2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1
bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3sKKyAgICBBU1NF
UlQobV9pc1NwZWN1bGF0aXZlKTsKKyAgICBzdGF0aWNfY2FzdDxTcGVjdWxhdGl2ZUpJVCo+KHRo
aXMpLT5zcGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwpOworfQorCiAjaWZuZGVmIE5ERUJVRwog
c3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3JtYXQpCiB7
CkBAIC0xMjg3LDYgKzEzNTEsMTYgQEAgR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29k
ZUdlbmVyYQogICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwogfQogCitHUFJUZW1w
b3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BS
UmVnKQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBt
X2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKwogR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklU
Q29kZUdlbmVyYXRvciogaml0LCBKU1ZhbHVlT3BlcmFuZCYgb3AxKQogICAgIDogbV9qaXQoaml0
KQogICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDU5NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOwogY2xh
c3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZDsKIGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOworY2xhc3MgU3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQ7CiAKIAogLy8gPT09IEpJVENvZGVHZW5lcmF0b3IgPT09CkBAIC00MTAsMTQgKzQx
MSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2Rl
SW5kZXgpOwogCisgICAgYm9vbCBpc0tub3duQm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4KTsK
KyAgICAKICAgICAvLyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCiAgICAg
Ym9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzQ29u
c3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIG1faml0LmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9v
bCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNEb3VibGVDb25zdGFudChub2RlSW5k
ZXgpOyB9CisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBtX2ppdC5pc0Jvb2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgaW50MzJf
dCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2pp
dC52YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgZG91YmxlIHZhbHVlT2ZE
b3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC52YWx1ZU9m
RG91YmxlQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3Rh
bnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KTsgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRl
eCk7IH0KICAgICBib29sIGlzTnVsbENvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAg
ewogICAgICAgICBpZiAoIWlzQ29uc3RhbnQobm9kZUluZGV4KSkKQEAgLTU3NSw2ICs1ODAsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdENhbGwoTm9kZSYpOworICAg
IAorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsKTsKIAogICAgIC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2Vu
ZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0dGluZwogICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUg
dXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCkBAIC0x
MTIxLDYgKzExMjgsNyBAQCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0
b3IqLCBJbnRlZ2VyT3BlcmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9y
KiwgSW50ZWdlck9wZXJhbmQmLCBJbnRlZ2VyT3BlcmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShK
SVRDb2RlR2VuZXJhdG9yKiwgU3BlY3VsYXRlQ2VsbE9wZXJhbmQmKTsKKyAgICBHUFJUZW1wb3Jh
cnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kJik7CiAgICAgR1BS
VGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBKU1ZhbHVlT3BlcmFuZCYpOwogCiAgICAgfkdQ
UlRlbXBvcmFyeSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCwxNCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpqdW1wRnJvbVNwZWN1bGF0aXZlVG9OCiAjaWYgREZHX0pJVF9CUkVB
S19PTl9TUEVDVUxBVElPTl9GQUlMVVJFCiAgICAgYnJlYWtwb2ludCgpOwogI2VuZGlmCisgICAg
CisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAgIFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5m
bzsKKyAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5m
by0+ZGVidWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCiAK
ICAgICAvLyBEb2VzIHRoaXMgc3BlY3VsYXRpb24gY2hlY2sgcmVxdWlyZSBhbnkgYWRkaXRpb25h
bCByZWNvdmVyeSB0byBiZSBwZXJmb3JtZWQsCiAgICAgLy8gdG8gcmVzdG9yZSBhbnkgc3RhdGUg
dGhhdCBoYXMgYmVlbiBvdmVyd3JpdHRlbiBiZWZvcmUgd2UgZW50ZXIgYmFjayBpbiB0byB0aGUK
QEAgLTg3NSw3ICs4ODMsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxp
bmtCCiB7CiAgICAgLy8gTGluayB0aGUgY29kZSwgcG9wdWxhdGUgZGF0YSBpbiBDb2RlQmxvY2sg
ZGF0YSBzdHJ1Y3R1cmVzLgogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgZnByaW50ZihzdGRl
cnIsICJKSVQgY29kZSBzdGFydCBhdCBbJXAsICVwKVxuIiwgbGlua0J1ZmZlci5kZWJ1Z0FkZHJl
c3MoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsgbGlu
a0J1ZmZlci5kZWJ1Z1NpemUoKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJKSVQgY29kZSBmb3Ig
JXAgc3RhcnQgYXQgWyVwLCAlcClcbiIsIG1fY29kZUJsb2NrLCBsaW5rQnVmZmVyLmRlYnVnQWRk
cmVzcygpLCBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBs
aW5rQnVmZmVyLmRlYnVnU2l6ZSgpKTsKICNlbmRpZgogCiAgICAgLy8gTGluayBhbGwgY2FsbHMg
b3V0IGZyb20gdGhlIEpJVCBjb2RlIHRvIHRoZWlyIHJlc3BlY3RpdmUgZnVuY3Rpb25zLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24g
OTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE3IEBAIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zlcnk7
CiBzdHJ1Y3QgRW50cnlMb2NhdGlvbjsKIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOwogCisjaWZu
ZGVmIE5ERUJVRwordHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhlY1N0
YXRlKiwgdm9pZCopOworI2VuZGlmCisKKyNpZiBERkdfVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlM
VVJFCitzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jazsKKyAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldDsKK307CisjZW5kaWYKKwogLy8g
PT09IENhbGxSZWNvcmQgPT09CiAvLwogLy8gQSByZWNvcmQgb2YgYSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlIHRvIGEgaGVscGVyIGZ1bmN0aW9uLgpAQCAtMjA1LDE2ICsyMTYsNDEgQEAgcHVibGlj
OgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rp
b24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CiAgICAgICAgIHJldHVybiBmdW5j
dGlvbkNhbGw7CiAgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAvLyBBZGQgYSBkZWJ1
ZyBjYWxsLiAgVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qgb24gSklUIGNvZGUgZXhlY3V0aW9uIHN0
YXRlLgorICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVidWdPcGVyYXRpb25fRVAgZnVuY3Rpb24s
IHZvaWQqIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIGkp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0
YS0+ZGVidWdEYXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3Rl
cihpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB9CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhcmd1bWVudCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGNhbGwoR1BSSW5mbzo6cmVnVDApOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkg
eworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdEYXRh
QnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9SZWdp
c3RlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBsb2FkUHRyKG1fZ2xv
YmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Cisg
ICAgfQorI2VuZGlmCiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3Ig
Y29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJl
dHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50KG5v
ZGVJbmRleCk7IH0KICAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KSB7IHJldHVybiBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4
KTsgfQogICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJl
dHVybiBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0K
KyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJu
IGdyYXBoKCkuaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KICAg
ICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCiAgICAg
SlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBn
cmFwaCgpLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAgICAg
aW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9
CiAgICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLnZhbHVlT2ZEb3VibGVDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUlu
ZGV4KTsgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKCks
IG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5bmFt
aWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgogI2lmIERGR19KSVRfQVNT
RVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ1OTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsOCBAQAogI2RlZmluZSBERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUgMAog
Ly8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUgc3BlY3VsYXRpb24gZmFpbHVyZSBjb2RlLgog
I2RlZmluZSBERkdfSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorLy8gTG9nIGV2
ZXJ5IHNwZWN1bGF0aW9uIGZhaWx1cmUuCisjZGVmaW5lIERGR19WRVJCT1NFX1NQRUNVTEFUSU9O
X0ZBSUxVUkUgMAogLy8gRGlzYWJsZSB0aGUgREZHIEpJVCB3aXRob3V0IGhhdmluZyB0byB0b3Vj
aCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBEaXNh
YmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5o
IQpAQCAtODksNiArOTEsNyBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CiAjZGVm
aW5lIE5vZGVSZXN1bHRKUyAgICAgIDB4MTAwMAogI2RlZmluZSBOb2RlUmVzdWx0RG91YmxlICAw
eDIwMDAKICNkZWZpbmUgTm9kZVJlc3VsdEludDMyICAgMHgzMDAwCisjZGVmaW5lIE5vZGVSZXN1
bHRCb29sZWFuIDB4NDAwMAogCiAvLyBUaGlzIG1hY3JvIGRlZmluZXMgYSBzZXQgb2YgaW5mb3Jt
YXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxhdGUgTm9kZUlk
LCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZHX09QKG1hY3JvKSBcCkBAIC0x
NDAsMTIgKzE0MywxMiBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CiAgICAgbWFj
cm8oUHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVz
IGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKENvbXBhcmVMZXNzLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oQ29tcGFyZUxlc3NF
cSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVH
cmVhdGVyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oQ29t
cGFyZUdyZWF0ZXJFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1h
Y3JvKENvbXBhcmVFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1h
Y3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oQ29tcGFyZUxl
c3MsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENv
bXBhcmVMZXNzRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKENvbXBhcmVHcmVhdGVyLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29sZWFu
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGws
IE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAt
MTU5LDggKzE2Miw4IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKICAgICAvKiBO
b2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tIYXNJbnN0YW5jZSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAotICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3Jv
KExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVS
ZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xlYW4p
IFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNybyhKdW1wLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBcCkBAIC0xOTgs
NyArMjAxLDggQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAogc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMgY29u
c3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQcmVk
aWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5
cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0Qm9vbGVhbiA9IDB4MTA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9w
ICAgID0gMHgxZjsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rpb25U
YWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sg
ICAgPSAweDgwOwogCkBAIC0yMjksNiArMjMzLDExIEBAIGlubGluZSBib29sIGlzTnVtYmVyUHJl
ZGljdGlvbihQcmVkaWN0ZWQKICAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAm
JiAhKHZhbHVlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0KIAor
aW5saW5lIGJvb2wgaXNCb29sZWFuUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQorewor
ICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRpY3RCb29sZWFu
OworfQorCiBpbmxpbmUgYm9vbCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1
ZSkKIHsKICAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgU3Ryb25nUHJlZGljdGlv
blRhZykpOwpAQCAtMjQxLDM4ICsyNTAsNDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rp
b25Ub1N0cmluZyhQcgogICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24odmFsdWUpKSB7CiAgICAg
ICAgIHN3aXRjaCAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spIHsKICAgICAgICAgY2FzZSBQ
cmVkaWN0Tm9uZToKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYm90dG9tIjsKKyAgICAg
ICAgICAgIHJldHVybiAicC1keW4tYm90dG9tIjsKICAgICAgICAgY2FzZSBQcmVkaWN0Q2VsbDoK
LSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctY2VsbCI7CisgICAgICAgICAgICByZXR1cm4g
InAtZHluLWNlbGwiOwogICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctYXJyYXkiOworICAgICAgICAgICAgcmV0dXJuICJwLWR5bi1hcnJheSI7
CiAgICAgICAgIGNhc2UgUHJlZGljdEludDMyOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9u
Zy1pbnQzMiI7CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWludDMyIjsKKyAgICAgICAgY2Fz
ZSBQcmVkaWN0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuICJwLWR5bi1kb3VibGUiOwogICAg
ICAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLW51
bWJlciI7CisgICAgICAgICAgICByZXR1cm4gInAtZHluLW51bWJlciI7CisgICAgICAgIGNhc2Ug
UHJlZGljdEJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWJvb2xlYW4iOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy10b3AiOworICAgICAg
ICAgICAgcmV0dXJuICJwLWR5bi10b3AiOwogICAgICAgICB9CiAgICAgfQogICAgIHN3aXRjaCAo
dmFsdWUpIHsKICAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICByZXR1cm4gInAtd2Vhay1i
b3R0b20iOworICAgICAgICByZXR1cm4gInAtc3RhdC1ib3R0b20iOwogICAgIGNhc2UgUHJlZGlj
dENlbGw6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWNlbGwiOworICAgICAgICByZXR1cm4gInAt
c3RhdC1jZWxsIjsKICAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0dXJuICJwLXdl
YWstYXJyYXkiOworICAgICAgICByZXR1cm4gInAtc3RhdC1hcnJheSI7CiAgICAgY2FzZSBQcmVk
aWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWludDMyIjsKKyAgICAgICAgcmV0dXJu
ICJwLXN0YXQtaW50MzIiOworICAgIGNhc2UgUHJlZGljdERvdWJsZToKKyAgICAgICAgcmV0dXJu
ICJwLXN0YXQtZG91YmxlIjsKICAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVy
biAicC13ZWFrLW51bWJlciI7CisgICAgICAgIHJldHVybiAicC1zdGF0LW51bWJlciI7CisgICAg
Y2FzZSBQcmVkaWN0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtYm9vbGVhbiI7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKKyAgICAgICAgcmV0dXJu
ICJwLXN0YXQtdG9wIjsKICAgICB9CiB9CiAjZW5kaWYKIAogaW5saW5lIFByZWRpY3RlZFR5cGUg
bWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQp
CiB7CisgICAgLy9wcmludGYoIlxuKCVzIGx1YiAlcylcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhs
ZWZ0KSwgcHJlZGljdGlvblRvU3RyaW5nKHJpZ2h0KSk7CisgICAgCiAgICAgaWYgKGlzU3Ryb25n
UHJlZGljdGlvbihsZWZ0KSA9PSBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQogICAgICAgICBy
ZXR1cm4gbGVmdCB8IHJpZ2h0OwogICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsK
QEAgLTMyNiw2ICszNDUsOSBAQCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihK
U0dsCiAgICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQogICAg
ICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RDZWxsOwogICAgIAorICAg
IGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAg
cmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKKyAgICAKICAgICBy
ZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7CiB9CiAjZW5kaWYKQEAgLTQy
Myw2ICs0NDUsMTEgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNOdW1iZXIoKTsKICAgICB9CiAgICAg
CisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJs
b2NrKS5pc0Jvb2xlYW4oKTsKKyAgICB9CisgICAgCiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJD
b25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0lu
dDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7CkBAIC00MzQsNiArNDYxLDEyIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKSk7CiAgICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigp
OwogICAgIH0KKyAgICAKKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQoY29k
ZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmdl
dEJvb2xlYW4oKTsKKyAgICB9CiAKICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7CkBAIC00OTIs
MTMgKzUyNSwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gKG9wICYg
Tm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRKUzsKICAgICB9CisgICAgCisgICAgYm9vbCBo
YXNCb29sZWFuUmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0
TWFzaykgPT0gTm9kZVJlc3VsdEJvb2xlYW47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIGlu
dGVnZXJzIG9yIGRvdWJsZXMuCiAgICAgYm9vbCBoYXNOdW1lcmljUmVzdWx0KCkKICAgICB7Ci0g
ICAgICAgIC8vIFRoaXMgY2hlY2sgd2lsbCBuZWVkIHVwZGF0aW5nIGlmIG1vcmUgcmVzdWx0IHR5
cGVzIGFyZSBhZGRlZC4KLSAgICAgICAgQVNTRVJUKChoYXNJbnQzMlJlc3VsdCgpIHx8IGhhc0Rv
dWJsZVJlc3VsdCgpKSA9PSAhaGFzSlNSZXN1bHQoKSk7Ci0gICAgICAgIHJldHVybiAhaGFzSlNS
ZXN1bHQoKTsKKyAgICAgICAgcmV0dXJuIGhhc0ludDMyUmVzdWx0KCkgfHwgaGFzRG91YmxlUmVz
dWx0KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0p1bXAoKQpAQCAtNTYzLDkgKzU5OSw5IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gU3Ryb25nUHJl
ZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24g
PSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlw
ZSBuZXdQcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IHByZWRpY3Rpb24gfCBtX29w
SW5mbzI7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9vcEluZm8yICE9IG5ld1ByZWRpY3Rpb247
Ci0gICAgICAgIG1fb3BJbmZvMiB8PSBuZXdQcmVkaWN0aW9uOworICAgICAgICBtX29wSW5mbzIg
PSBuZXdQcmVkaWN0aW9uOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NzgsNiArNjc4LDE0IEBAIFJlZ2lzdGVyU2l6ZWRCb29sZWFu
IGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJ
TFVSRQordm9pZCBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0
ZSosIHZvaWQqIGRlYnVnSW5mb1JhdykKK3sKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0PFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+
KGRlYnVnSW5mb1Jhdyk7CisgICAgcHJpbnRmKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICVwIGF0
IDB4JXghXG4iLCBkZWJ1Z0luZm8tPmNvZGVCbG9jaywgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCk7
Cit9CisjZW5kaWYKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDEwIEBAIGRvdWJsZSBkZmdDb252ZXJ0SlNW
YWx1ZVRvTnVtYmVyKEV4ZWNTdGEKIGludDMyX3QgZGZnQ29udmVydEpTVmFsdWVUb0ludDMyKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIFJlZ2lzdGVyU2l6ZWRCb29sZWFuIGRmZ0NvbnZl
cnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIAorI2lmIERG
R19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUKK3ZvaWQgZGVidWdPcGVyYXRpb25QcmludFNw
ZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKik7CisjZW5kaWYKKwogfSAvLyBleHRl
cm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJlZGljdGlvblRyYWNrZXJfaAorI2RlZmluZSBE
RkdQcmVkaWN0aW9uVHJhY2tlcl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxw
ZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1l
bnRzLgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJu
IG9wZXJhbmQgPCAwOyB9CisKK3N0cnVjdCBQcmVkaWN0aW9uU2xvdCB7CitwdWJsaWM6CisgICAg
UHJlZGljdGlvblNsb3QoKQorICAgICAgICA6IG1fdmFsdWUoUHJlZGljdE5vbmUpCisgICAgewor
ICAgIH0KKyAgICBQcmVkaWN0ZWRUeXBlIG1fdmFsdWU7Cit9OworCitjbGFzcyBQcmVkaWN0aW9u
VHJhY2tlciB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvblRyYWNrZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1WYXJpYWJsZXMpCisgICAgICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQor
ICAgICAgICAsIG1fdmFyaWFibGVzKG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZVNpbWlsYXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3Ro
ZXIpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1
bWVudHMoKSk7CisgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlh
YmxlcygpKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mVmFy
aWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgCisgICAg
dW5zaWduZWQgYXJndW1lbnRJbmRleEZvck9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0
dXJuIG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemU7IH0KKworICAgIGJvb2wgcHJlZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3Vt
ZW50LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50c1thcmd1bWVu
dF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0QXJndW1lbnQo
YXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCksIHByZWRpY3Rpb24sIHNvdXJjZSk7Cisg
ICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChvcGVyYW5kID49IDApOworICAgICAgICAgICAgbV92YXJpYWJsZXMu
cmVzaXplKG9wZXJhbmQgKyAxKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0
R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQ
cmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51
bWJlciArIDEpOworICAgICAgICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpIHsKKyAg
ICAgICAgICAgIFByZWRpY3Rpb25TbG90IHByZWRpY3Rpb25TbG90OworICAgICAgICAgICAgYm9v
bCByZXN1bHQgPSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVBy
ZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAgICBtX2dsb2JhbFZhcnMu
YWRkKHZhck51bWJlciArIDEsIHByZWRpY3Rpb25TbG90KTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlv
bihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNl
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBy
ZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgICAgICByZXR1
cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBwcmVkaWN0aW9uLCBzb3VyY2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgY2Fz
ZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgQ2FsbDoK
KyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0
KHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBnZXRB
cmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAgICAgICByZXR1
cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWU7CisgICAgfQorCisgICAgUHJlZGljdGVk
VHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50UHJl
ZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgICAgIGlmICgo
dW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlOworICAgICAgICByZXR1cm4gUHJlZGljdE5v
bmU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlv
bih1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgeworICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQ
cmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1i
ZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLm1f
dmFsdWU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2Rl
JiBub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkp
OworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgICAgIHJldHVybiBnZXRHbG9i
YWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOworICAgICAgICBjYXNlIEdldEJ5SWQ6
CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAg
ICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJu
IG5vZGUuZ2V0UHJlZGljdGlvbigpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIFByZWRpY3ROb25lOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBW
ZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8UHJlZGlj
dGlvblNsb3QsIDE2PiBtX3ZhcmlhYmxlczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0
aW9uU2xvdD4gbV9nbG9iYWxWYXJzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcmVkaWN0aW9uVHJh
Y2tlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCwyOCBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1fcHJvZmlsZWRCbG9j
ayhwcm9maWxlZEJsb2NrKQogICAgIHsKKyAgICAgICAgLy8gUHJlZGljdGlvbnMgaXMgYSBmb3J3
YXJkIGZsb3cgcHJvcGVydHkgdGhhdCBwcm9wYWdhdGVzIHRoZSB2YWx1ZXMgc2VlbiBhdAorICAg
ICAgICAvLyBhIHBhcnRpY3VsYXIgdmFsdWUgc291cmNlIHRvIHRoZWlyIHZhcmlvdXMgdXNlcywg
ZW5zdXJpbmcgdGhhdCB1c2VzIHBlcmZvcm0KKyAgICAgICAgLy8gc3BlY3VsYXRpb24gdGhhdCBk
b2VzIG5vdCBjb250cmF2ZW5lIHRoZSBleHBlY3RlZCB2YWx1ZXMuCiAgICAgICAgIG1fcHJlZGlj
dGlvbnMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKLSAgICAgICAgZm9yIChOb2RlSW5kZXggaSA9
IDA7IGkgPCBtX2dyYXBoLnNpemUoKTsgKytpKQorICAgICAgICAKKyAgICAgICAgLy8gVXNlcyBp
cyBhIGJhY2t3YXJkIGZsb3cgcHJvcGVydHkgdGhhdCBwcm9wYWdhdGVzIHRoZSBoYXJkIGV4cGVj
dGF0aW9ucyBhdAorICAgICAgICAvLyBjZXJ0YWluIHVzZXMgdG8gdGhlaXIgdmFsdWUgc291cmNl
cywgZW5zdXJpbmcgdGhhdCBwcmVkaWN0aW9ucyBhYm91dAorICAgICAgICAvLyB2YWx1ZXMgZG8g
bm90IGNvbnRyYXZlbmUgdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGNvbWVzIHVwIG9ubHkgaW4gdGhl
CisgICAgICAgIC8vIGNhc2VzIG9mIG9idmlvdXMgY2VsbCB1c2VzLCBsaWtlIEdldEJ5SWQgYW5k
IGZyaWVuZHMgYXMgd2VsbCBhcyBDYWxsLgorICAgICAgICAvLyBXZSdyZSBlc3NlbnRpYWxseSBz
dGF0aWNhbGx5IHNwZWN1bGF0aW5nIHRoYXQgaWYgdGhlIHZhbHVlIHByb2ZpbGUgaW5kaWNhdGVz
CisgICAgICAgIC8vIHRoYXQgb25seSBib29sZWFucyAoZm9yIGV4YW1wbGUpIGZsb3cgaW50byBh
IEdldEJ5SWQsIHRoZW4gdGhlIHZhbHVlCisgICAgICAgIC8vIHByb2ZpbGUgaXMgc2ltcGx5IHdy
b25nIGR1ZSB0byBpbnN1ZmZpY2llbnQgY292ZXJhZ2UgYW5kIG5lZWRzIHRvIGJlCisgICAgICAg
IC8vIGFkanVzdGVkIGFjY29yZGluZ2x5LiBUaGUgYWx0ZXJuYXRpdmVzIHdvdWxkIGJlIHRvIGFz
c3VtZSBlaXRoZXIKKyAgICAgICAgLy8gdGhhdCB0aGUgR2V0QnlJZCBuZXZlciBleGVjdXRlcywg
b3IgYWx3YXlzIGV4ZWN1dGVzIG9uIGEgYm9vbGVhbiBsZWFkaW5nCisgICAgICAgIC8vIHRvIHdo
YXRldmVyIGJpemFycmUgYmVoYXZpb3IgdGhhdCdzIHN1cHBvc2VkIHRvIGNhdXNlLgorICAgICAg
ICBtX3VzZXMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAgICAgbV92YXJpYWJsZVVzZXMu
aW5pdGlhbGl6ZVNpbWlsYXJUbyhtX2dyYXBoLnByZWRpY3Rpb25zKCkpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGguc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgICAgIG1f
dXNlc1tpXSA9IFByZWRpY3ROb25lOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Zml4cG9pbnQoKQpAQCAtNTEsNDMgKzcwLDQ3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jb3VudCA9
IDA7CiAjZW5kaWYKICAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVh
ci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAogICAgICAgICAgICAg
Ly8gREZTLXNvcnRlZCBjb2RlLgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CiAgICAg
ICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7CiAgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQmFj
a3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNh
bCBjb2RlIHdpbGwKLSAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNp
YWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8v
IGNhdXNlIHNsb3duZXNzLiAgTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxl
IGJhY2t3YXJkIGZsb3cuCiAgICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNh
c2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAogICAgICAgICAgICAg
Ly8gZm91bmQgYSBzb3VuZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJk
IGZsb3cuCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByb3Bh
Z2F0ZUJhY2t3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRG8gYW5vdGhlciBmb3J3
YXJkIHBhc3MgYmVjYXVzZSBmb3J3YXJkIHBhc3NlcyBhcmUgb24gYXZlcmFnZSBtb3JlCi0gICAg
ICAgICAgICAvLyBwcm9maXRhYmxlLgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdl
ZCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldFByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24pCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0uaGFzUmVzdWx0KCkpOworICAgICAgICAKICAgICAgICAgaWYgKG1fcHJlZGljdGlvbnNbbV9j
b21waWxlSW5kZXhdID09IHByZWRpY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBtX3ByZWRpY3Rpb25zW21fY29t
cGlsZUluZGV4XSA9IHByZWRpY3Rpb247Ci0gICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIG1lcmdlUHJlZGljdGlvbihQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgYm9vbCBtZXJnZVVzZShOb2RlSW5kZXggbm9k
ZUluZGV4LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewotICAgICAgICBpZiAoREZH
OjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0sIHByZWRpY3Rp
b24pKQotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbbm9kZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gREZH
OjptZXJnZVByZWRpY3Rpb24obV91c2VzW25vZGVJbmRleF0sIHByZWRpY3Rpb24pOworICAgIH0K
KyAgICAKKyAgICBib29sIG1lcmdlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0
KCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJl
ZGljdGlvbnNbbV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBwcm9wYWdhdGVOb2RlKE5vZGUmIG5vZGUpCkBAIC05NiwzMyArMTE5LDQ4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBOb2RlVHlwZSBvcCA9
IG5vZGUub3A7CisKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIiAgICVz
WyV1XTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKKyNlbmRpZgorICAg
ICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBz
d2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDogewogICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0
SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlz
RG91YmxlKCkpCi0gICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQ
cmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAg
ICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzSlNBcnJheSgmbV9nbG9iYWxEYXRhLCBjZWxsKSkKLSAgICAgICAgICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0QXJyYXksIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RBcnJheSwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGlj
dGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9w
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikp
OworICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEJvb2xl
YW4sIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ry
b25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJl
ZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX3ZhcmlhYmxlVXNlcy5wcmVkaWN0KG5vZGUubG9jYWwoKSwgbV91c2VzW21fY29tcGlsZUlu
ZGV4XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisKICAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGguZ2V0UHJlZGljdGlvbihub2Rl
LmxvY2FsKCkpOwogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9u
KSkKLSAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgU2V0TG9j
YWw6IHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2Nh
bCgpLCBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBT
dHJvbmdQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlcyAiLCBwcmVkaWN0aW9u
VG9TdHJpbmcobV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSkpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25zW25vZGUu
Y2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgbV92YXJpYWJsZVVzZXMu
Z2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlcy0+
JWQgIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGguZ2V0UHJlZGljdGlvbihub2RlLmxvY2Fs
KCkpKSwgbm9kZS5sb2NhbCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTEzNSw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKICAgICAgICAgY2FzZSBBcml0
aE1vZDogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0
SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE0NCwxMCAr
MTgyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc1N0cm9u
Z1ByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rp
b24ocHJlZGljdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3ROdW1iZXIsIFN0cm9u
Z1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE51bWJlciwgU3Ryb25nUHJlZGljdGlvbikpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0xNTgsMTEgKzE5NywxMSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmln
aHQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBp
c051bWJlclByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lu
dDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMy
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0
aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24o
UHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE3NSwxNSArMjE0LDE1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNT
dHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCi0gICAgICAgICAgICAgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFr
ZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhEaXY6
IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJs
ZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE5NSw0OCArMjM0
LDYwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxOgogICAgICAgICBjYXNlIENv
bXBhcmVTdHJpY3RFcToKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7Ci0gICAgICAgICAgICAv
LyBUaGlzIGlzIHNhZCwgYXMgd2UgZG9uJ3QgaGF2ZSBhIGJvb2xlYW4gcHJlZGljdGlvbiwgZXZl
biB0aG91Z2ggd2UgZWFzaWx5Ci0gICAgICAgICAgICAvLyBjb3VsZC4KLSAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFBy
ZWRpY3RCb29sZWFuLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2Fz
ZSBHZXRNZXRob2Q6Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgR2V0QnlW
YWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgUHJl
ZGljdENlbGwgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bm9kZS5wcmVkaWN0KG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ss
IFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihu
b2RlLmdldFByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0
cnVjdDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldLCBQcmVkaWN0Q2VsbCB8IFN0cm9uZ1ByZWRpY3Rp
b25UYWcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnByZWRpY3QobV91c2VzW21fY29t
cGlsZUluZGV4XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAgICAg
ICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKSkKLSAg
ICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKFByZWRpY3RDZWxsLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV92YXJp
YWJsZVVzZXMucHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBtX3VzZXNbbV9jb21w
aWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAg
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGguZ2V0R2xvYmFsVmFyUHJl
ZGljdGlvbihub2RlLnZhck51bWJlcigpKTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRp
Y3Rpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb24pOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3Jh
cGgucHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBtX3ByZWRpY3Rpb25zW25vZGUu
Y2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVy
KCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0
cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNo
aWxkMSgpLCBtX3ZhcmlhYmxlVXNlcy5nZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVt
YmVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBk
b24ndCByZXR1cm4gYW55dGhpbmcuCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1
dEJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQx
KCksIFByZWRpY3RDZWxsIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAgICAgICAgICBicmVh
azsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVz
ZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KICAgICAgICAgY2FzZSBERkc6Okp1bXA6CiAg
ICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFJldHVybjoKLSAgICAgICAgY2FzZSBQ
dXRCeUlkOgotICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIGNhc2UgQ2hlY2tI
YXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAgICBicmVhazsKQEAgLTI1
NSw2ICszMDYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg
ICAgIH0KKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiZXhwZWN0KCVz
KSB1c2UoJXMpICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0pLCBwcmVkaWN0aW9uVG9TdHJpbmcobV91c2VzW21fY29tcGlsZUluZGV4XSksIGNo
YW5nZWQgPyAiQ0hBTkdFRCIgOiAiIik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY2hh
bmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KICAgICAKICAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQo
KQpAQCAtMjgzLDYgKzM0MCw5IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IG1fY29tcGlsZUlu
ZGV4OwogICAgIAogICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAxNj4gbV9wcmVkaWN0aW9uczsK
KyAgICBWZWN0b3I8UHJlZGljdGVkVHlwZSwgMTY+IG1fdXNlczsKKyAgICAKKyAgICBQcmVkaWN0
aW9uVHJhY2tlciBtX3ZhcmlhYmxlVXNlczsKIAogI2lmIERGR19ERUJVR19WRVJCT1NFCiAgICAg
dW5zaWduZWQgbV9jb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgs
OCArMTI4LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAog
ICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0g
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOiB7CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogewogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbigpOwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdl
cjsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CkBAIC0yMjMsMTMgKzIyNSwxNCBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogCiAgICAgc3dpdGNo
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOgotICAg
ICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgorICAgIGNhc2UgRGF0YUZvcm1hdE5v
bmU6IC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCisgICAgY2FzZSBEYXRhRm9ybWF0Qm9v
bGVhbjogLy8gVGhpcyB0eXBlIG5ldmVyIG9jY3Vycy4KICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIAogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CiAgICAgY2FzZSBEYXRh
Rm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CisgICAgY2FzZSBEYXRhRm9y
bWF0SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CiAgICAgICAgIEdQUlJlZyBq
c1ZhbHVlR3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soanNWYWx1ZUdwcik7
CiAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwpAQCAtMzQ5LDcgKzM1Miw3NiBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgY2FzZSBEYXRh
Rm9ybWF0SlNJbnRlZ2VyOgogICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CiAgICAgY2FzZSBE
YXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7CisgICAgY2Fz
ZSBEYXRhRm9ybWF0RG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICBj
YXNlIERhdGFGb3JtYXRCb29sZWFuOiB7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKCk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOworICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKK30KKwor
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlSW5kZXggbm9k
ZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CisKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgeworICAgIGNh
c2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisK
KyAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKGpz
VmFsdWUuaXNCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
VmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAg
ICAgICAgICByZXR1cm4gZ3ByOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChpbmZvLnNwaWxs
Rm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7CisgICAgICAgICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ss
IGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgIH0K
KyAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAg
ICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46Cisg
ICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZv
LmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAgICAgICByZXR1cm4gZ3ByOwor
ICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAgICAgICBtX2ppdC54b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSk7CisgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQor
CisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZvcm1hdEludGVn
ZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0RG91
YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxs
OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAgLTUyOCw3ICs2MDAsNyBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBh
ZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBtX2pp
dC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTYxLDcgKzYzMywxNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAv
LyBhbmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVlcyB3aXRoaW4gdGhpcyBkYXRhZmxvdyB3aXRoIHZp
cnR1YWwgcmVnaXN0ZXJzLgogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICAg
ICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29tcGls
ZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSwgaXNBcnJheVByZWRpY3Rpb24o
cHJlZGljdGlvbikgPyBEYXRhRm9ybWF0SlNDZWxsIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBpZiAoaXNB
cnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gRGF0
YUZvcm1hdEpTQ2VsbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24o
cHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQm9vbGVh
bjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0
SlM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXS5pbml0SlNWYWx1ZShtX2NvbXBpbGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZXN1
bHQuZ3ByKCksIGZvcm1hdCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
NTc4LDYgKzY1OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGJvb2xlYW4uZ3ByKCks
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2Nh
bCgpKSk7CkBAIC04NDEsNiArOTI2LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgaWYg
KGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVC
b29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxk
IHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJl
c3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAKQEAgLTg1MCw3ICs5NDYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LnhvclB0cihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7
CiAKICAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2Ug
aXQgaGVyZS4KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMjI3
LDcgKzEzMjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBzY3JhdGNoUmVnKTsKIAogICAgICAgICBwdXRSZXN1
bHQubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2NvbXBpbGVJ
bmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDggQEAgY2xhc3MgU3BlY3VsYXRpdmVK
SVQ7CiAvLyBUaGlzIGVudW0gZGVzY3JpYmVzIHRoZSB0eXBlcyBvZiBhZGRpdGlvbmFsIHJlY292
ZXJ5IHRoYXQKIC8vIG1heSBuZWVkIGJlIHBlcmZvcm1lZCBzaG91bGQgYSBzcGVjdWxhdGlvbiBj
aGVjayBmYWlsLgogZW51bSBTcGVjdWxhdGlvblJlY292ZXJ5VHlwZSB7Ci0gICAgU3BlY3VsYXRp
dmVBZGQKKyAgICBTcGVjdWxhdGl2ZUFkZCwKKyAgICBCb29sZWFuU3BlY3VsYXRpb25DaGVjawog
fTsKIAogLy8gPT09IFNwZWN1bGF0aW9uUmVjb3ZlcnkgPT09CkBAIC0xMzIsOCArMTMzLDExIEBA
IHB1YmxpYzoKICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlSW5kZXgpOwog
ICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRleCk7CiAgICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRleCk7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVCb29s
ZWFuKE5vZGVJbmRleCk7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEpJVENvZGVHZW5l
cmF0b3I7CisgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUo
QmFzaWNCbG9jayYpOwogCkBAIC00MDgsNiArNDEyLDQ3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVn
IG1fZ3ByT3JJbnZhbGlkOwogfTsKIAorY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewor
cHVibGljOgorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZl
SklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVn
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQoaW5kZXgpKQorICAgICAgICAgICAgZ3ByKCk7CisgICAgfQorICAgIAorICAgIH5TcGVjdWxh
dGVCb29sZWFuT3BlcmFuZCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQg
IT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQp
OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBncHIoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihpbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVz
ZSgpCisgICAgeworICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgTm9kZUluZGV4IG1faW5kZXg7Cisg
ICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworfTsKKwogCiAvLyA9PT0gU3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3IgPT09CiAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw2ICsy
MzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBSZXR1cm5B
ZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOwogICAgICAgICBKU1ZhbHVlIGhvc3RDYWxsUmV0
dXJuVmFsdWU7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBpbnQ2NF90IGRlYnVnRGF0YUJ1ZmZl
cls2NF07CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyos
IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDk0NTk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpCiAgICAg
ZWxzZSBpZiAoaXNJbnQzMigpKQogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwg
IkludDMyOiAlZCIsIGFzSW50MzIoKSk7CiAgICAgZWxzZSBpZiAoaXNEb3VibGUoKSkKLSAgICAg
ICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICVsZiIsIGFzRG91YmxlKCkp
OworICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRvdWJsZTogJWxmLCAlbHgi
LCBhc0RvdWJsZSgpLCByZWludGVycHJldERvdWJsZVRvSW50cHRyKGFzRG91YmxlKCkpKTsKICAg
ICBlbHNlIGlmIChpc0NlbGwoKSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUs
ICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKICAgICBlbHNlIGlmIChpc1RydWUoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106500</attachid>
            <date>2011-09-06 15:32:49 -0700</date>
            <delta_ts>2011-09-06 16:52:45 -0700</delta_ts>
            <desc>the patch - fix windows, style</desc>
            <filename>dynboolopt_patch_5.diff</filename>
            <type>text/plain</type>
            <size>75451</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM4IEBA
CisyMDExLTA5LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBkb2VzIG5vdCBvcHRpbWl6ZSBib29sZWFucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBib29sZWFuIHZhbHVl
IHByb2ZpbGluZywgYm9vbGVhbiBwcmVkaWN0aW9uIGluIHRoZSBERkcsCisgICAgICAgIGJvb2xl
YW4gZm9yd2FyZCBmbG93IHByb3BhZ2F0aW9uIGluIHRoZSBERkdQcm9wYWdhdG9yLCBib29sZWFu
CisgICAgICAgIGRhdGEgZm9ybWF0IGluIERGRyBnZW5lcmF0aW9uIGluZm8sIGFuZCBjb21wcmVo
ZW5zaXZlIG9wdGltaXphdGlvbnMKKyAgICAgICAgYmFzZWQgb24gYm90aCBib29sZWFuIHByZWRp
Y3Rpb24gYW5kIGJvb2xlYW4gZ2VuZXJhdGlvbiBpbmZvLgorICAgICAgICBUaGlzIGlzIGJyaW5n
cyB0aGUgc3BlZWQtdXAgb24gdjgtcmljaGFyZHMgdG8gMTIlLCBhbmQgZ2l2ZXMgc2xpZ2h0Cisg
ICAgICAgIHNwZWVkLXVwcyBlbHNld2hlcmUgYXMgd2VsbC4KKyAgICAgICAgCisgICAgICAgIE1h
a2luZyB0aGlzIHdvcmsgcmlnaHQgcmVxdWlyZWQgbmF2aWdhdGluZyBzb21lIHN1YnRsZXRpZXMg
aW4KKyAgICAgICAgdmFsdWUgcHJvZmlsaW5nLiAgU29tZSBmdW5jdGlvbnMgZ2V0IGNvbXBpbGVk
IHdpdGggaW5zdWZmaWNpZW50CisgICAgICAgIGluZm9ybWF0aW9uIGJlY2F1c2Ugc29tZSBpbXBv
cnRhbnQgcGF0aCBvZiB0aGUgZnVuY3Rpb24gbmV2ZXIKKyAgICAgICAgZXhlY3V0ZWQuICBJbiB0
aGVzZSBjYXNlcywgd2Ugd2lzaCB0byBmYWxsIGJhY2sgb24gc3RhdGljCisgICAgICAgIHNwZWN1
bGF0aW9uLiAgQnV0IHRvIGRvIHNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHByZWRpY3Rpb25z
IHRoYXQKKyAgICAgICAgYXJlIGluaGVyZW50IGluIHRoZSBjb2RlIChsaWtlIHRoYXQgR2V0QnlJ
ZCBhbG1vc3QgY2VydGFpbmx5IHRha2VzCisgICAgICAgIGEgY2VsbCBvcGVyYW5kKSBhcmUgcmVm
bGVjdGVkIGluIHByZWRpY3Rpb25zIHRoYXQgd2UgbWFrZSBpbgorICAgICAgICBERkdQcm9wYWdh
dG9yLiAgVGh1cywgREZHUHJvcGFnYXRvciBub3cgZG9lcyBib3RoIGJhY2t3YXJkIGFuZAorICAg
ICAgICBmb3J3YXJkIGZsb3csIHVzaW5nIGEgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZCBmaXhw
b2ludC4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYWNrd2FyZCBmbG93IGluIERGR1Byb3BhZ2F0
b3IgaXMgYSBzZXBhcmF0ZSBzdGF0aWMgYW5hbHlzaXMsCisgICAgICAgIGFuZCBuZWVkcyB0byBr
ZWVwIGEgc2V0IG9mIGJhY2t3YXJkIGZsb3cgYWJzdHJhY3QgdmFsdWVzIGZvcgorICAgICAgICB2
YXJpYWJsZXMsIGFyZ3VtZW50cywgYW5kIGdsb2JhbHMuICBUbyBtYWtlIHRoaXMgZWFzeSwgdGhp
cyBwYXRjaAorICAgICAgICBmYWN0b3JzIG91dCBERkdHcmFwaCdzIHByZWRpY3Rpb24gdHJhY2tp
bmcgY2FwYWJpbGl0eSBpbnRvCisgICAgICAgIERGR1ByZWRpY3Rpb25UcmFja2VyLCB3aGljaCBu
b3cgZ2V0cyB1c2VkIGJ5IGJvdGggREZHR3JhcGggKGZvcgorICAgICAgICBmb3J3YXJkIGZsb3cg
cHJlZGljdGlvbnMpIGFuZCBERkdQcm9wYWdhdG9yIChmb3IgYmFja3dhcmQgZmxvdworICAgICAg
ICBwcmVkaWN0aW9ucykuICBCYWNrd2FyZCBmbG93IHByZWRpY3Rpb25zIGV2ZW50dWFsbHkgZ2V0
IG1lcmdlZAorICAgICAgICBpbnRvIGZvcndhcmQgZmxvdyBvbmVzLCBidXQgdGhlIHR3byBhcmUg
bm90IGVxdWl2YWxlbnQ6IGEgZm9yd2FyZAorICAgICAgICBmbG93IHByZWRpY3Rpb24gaXMgYSBz
dXBlcnNldCBvZiB0aGUgYmFja3dhcmQgZmxvdyBwcmVkaWN0aW9uLgorICAgICAgICAKKyAgICAg
ICAgRGVidWdnaW5nIHRoZXNlIHByZWRpY3Rpb24gaXNzdWVzIHJlcXVpcmVkIGEgYmV0dGVyIHVu
ZGVyc3RhbmRpbmcKKyAgICAgICAgb2Ygd2hlcmUgd2UgZmFpbCBzcGVjdWxhdGlvbiwgYW5kIHdo
YXQgb3VyIHZhbHVlIHByZWRpY3Rpb25zIGxvb2sKKyAgICAgICAgbGlrZS4gIFRoaXMgcGF0Y2gg
YWxzbyBhZGRzIG9wdGlvbmFsIHZlcmJvc2Ugc3BlY3VsYXRpb24gZmFpbHVyZQorICAgICAgICAo
c28gYW4gaW5mb3JtYXRpdmUgcHJpbnRmIGZpcmVzIHdoZW5ldmVyIHNwZWN1bGF0aW9uIGZhaWx1
cmUgb2NjdXJzKQorICAgICAgICBhbmQgc2xpZ2h0IGltcHJvdmVtZW50cyB0byB0aGUgdmVyYm9z
aXR5IGluIG90aGVyIHBsYWNlcy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
OgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnByb2JhYmlsaXR5T2ZCb29sZWFuKToKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21w
dXRlU3RhdGlzdGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXAp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Zmls
bEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90SW50ZWdlcik6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bkJvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVU
b05vblNwZWN1bGF0aXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmRlYnVnQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omlz
Qm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVP
ZkJvb2xlYW5Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjppc0Jvb2xlYW5QcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVkaWN0
aW9uVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlUHJlZGljdGlvbnMpOgorICAg
ICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojppc0Jvb2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkJv
b2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQm9vbGVhblJlc3Vs
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTnVtZXJpY1Jlc3VsdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1By
ZWRpY3Rpb25UcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Om9wZXJhbmRJc0Fy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uU2xvdDo6UHJlZGljdGlvblNs
b3QpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpQcmVkaWN0aW9uVHJh
Y2tlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVT
aW1pbGFyVG8pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpudW1iZXJP
ZkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Om51bWJl
ck9mVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJn
dW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpwcmVkaWN0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJl
ZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Omdl
dEFyZ3VtZW50UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNr
ZXI6OmdldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2Vy
OjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
Om1lcmdlVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjpTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6
On5TcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZDo6dXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmRlc2NyaXB0aW9u
KToKKwogMjAxMS0wOS0wNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgd2luZG93cyBjaGFuZ2VzIGZvciBKU0M6UmVnRXhwIGZ1bmN0aW9uYWwgdGVz
dHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgJKHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDE2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQm9vbGVhbnMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldICYm
IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAg
ICAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHBhcnRpY3VsYXJseSBvcHRpbWl6
ZWQsIGluIHRoYXQgdGhleSB3aWxsIGVhY2gKICAgICAvLyBwZXJmb3JtIHR3byBwYXNzZXMgb3Zl
ciB0aGUgYnVja2V0cyBhcnJheS4gSG93ZXZlciwgdGhleSBhcmUKQEAgLTE0MiwxNyArMTUyLDIz
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQ
cm9iYWJpbGl0eShudW1iZXJPZkFycmF5cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIHByb2JhYmlsaXR5T2ZCb29sZWFuKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZCb29sZWFucygpLCBudW1i
ZXJPZlNhbXBsZXMoKSk7CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcChG
SUxFKiBvdXQpCiAgICAgewogICAgICAgICBmcHJpbnRmKG91dCwKLSAgICAgICAgICAgICAgICAi
c2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9
ICV1IiwKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRv
dWJsZSA9ICV1ICgldSksIGNlbGwgPSAldSAoJXUpLCBhcnJheSA9ICV1ICgldSksIGJvb2xlYW4g
PSAldSAoJXUpIiwKICAgICAgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXMoKSwKLSAgICAgICAg
ICAgICAgICBudW1iZXJPZkludDMycygpLAotICAgICAgICAgICAgICAgIG51bWJlck9mRG91Ymxl
cygpLAotICAgICAgICAgICAgICAgIG51bWJlck9mQ2VsbHMoKSwKLSAgICAgICAgICAgICAgICBu
dW1iZXJPZkFycmF5cygpKTsKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mSW50MzIoKSwg
bnVtYmVyT2ZJbnQzMnMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mRG91YmxlKCks
IG51bWJlck9mRG91YmxlcygpLAorICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZDZWxsKCks
IG51bWJlck9mQ2VsbHMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQXJyYXkoKSwg
bnVtYmVyT2ZBcnJheXMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQm9vbGVhbigp
LCBudW1iZXJPZkJvb2xlYW5zKCkpOwogICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CiAgICAg
ICAgICAgICBpZiAoISFidWNrZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0pIHsKQEAgLTE3OCwx
NiArMTk0LDE4IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICB1bnNpZ25lZCBkb3Vi
bGVzOwogICAgICAgICB1bnNpZ25lZCBjZWxsczsKICAgICAgICAgdW5zaWduZWQgYXJyYXlzOwor
ICAgICAgICB1bnNpZ25lZCBib29sZWFuczsKICAgICB9OwogCiAgICAgLy8gT3B0aW1pemVkIG1l
dGhvZCBmb3IgZ2V0dGluZyBhbGwgY291bnRzIGF0IG9uY2UuCiAgICAgdm9pZCBjb21wdXRlU3Rh
dGlzdGljcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3Mp
IGNvbnN0CiAgICAgewotICAgICAgICB1bnNpZ25lZCBzYW1wbGVzID0gMDsKLSAgICAgICAgdW5z
aWduZWQgaW50MzJzICA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGRvdWJsZXMgPSAwOwotICAgICAg
ICB1bnNpZ25lZCBjZWxscyAgID0gMDsKLSAgICAgICAgdW5zaWduZWQgYXJyYXlzICA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIHNhbXBsZXMgID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzICAg
PSAwOworICAgICAgICB1bnNpZ25lZCBkb3VibGVzICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNl
bGxzICAgID0gMDsKKyAgICAgICAgdW5zaWduZWQgYXJyYXlzICAgPSAwOworICAgICAgICB1bnNp
Z25lZCBib29sZWFucyA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAgICAgIGlmICghYnVja2V0c1tp
XSkgewpAQCAtMjEzLDE0ICsyMzEsMTYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAg
ICAgICAgICAgY2VsbHMrKzsKICAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZnbG9iYWxE
YXRhLCB2YWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICAgICAgICAgIGFycmF5cysrOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAg
ICAgICAgICAgICAgICBib29sZWFucysrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBz
dGF0aXN0aWNzLnNhbXBsZXMgPSBzYW1wbGVzOwotICAgICAgICBzdGF0aXN0aWNzLmludDMycyAg
PSBpbnQzMnM7Ci0gICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcyA9IGRvdWJsZXM7Ci0gICAgICAg
IHN0YXRpc3RpY3MuY2VsbHMgICA9IGNlbGxzOwotICAgICAgICBzdGF0aXN0aWNzLmFycmF5cyAg
PSBhcnJheXM7CisgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcyAgPSBzYW1wbGVzOworICAgICAg
ICBzdGF0aXN0aWNzLmludDMycyAgID0gaW50MzJzOworICAgICAgICBzdGF0aXN0aWNzLmRvdWJs
ZXMgID0gZG91YmxlczsKKyAgICAgICAgc3RhdGlzdGljcy5jZWxscyAgICA9IGNlbGxzOworICAg
ICAgICBzdGF0aXN0aWNzLmFycmF5cyAgID0gYXJyYXlzOworICAgICAgICBzdGF0aXN0aWNzLmJv
b2xlYW5zID0gYm9vbGVhbnM7CiAgICAgfQogICAgIAogICAgIGludCBieXRlY29kZU9mZnNldDsg
Ly8gLTEgZm9yIHByb2xvZ3VlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc1
LDExICs0NzUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgQVNTRVJUKHByb2ZpbGUpOwogI2lmIERGR19ERUJVR19WRVJCT1NFCi0g
ICAgICAgIHByaW50ZigiRHluYW1pYyBwcmVkaWN0aW9uIFsldSwgJXVdOiAiLCBub2RlSW5kZXgs
IGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBwcmludGYoIkR5bmFtaWMgcHJvZmlsZSBbJXUsICV1
XTogIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4KTsKICAgICAgICAgcHJvZmlsZS0+ZHVtcChz
dGRvdXQpOwogICAgICAgICBwcmludGYoIlxuIik7CiAjZW5kaWYKICAgICAgICAgbV9ncmFwaFtu
b2RlSW5kZXhdLnByZWRpY3QobWFrZVByZWRpY3Rpb24oKm1fZ2xvYmFsRGF0YSwgKnByb2ZpbGUp
LCBTdHJvbmdQcmVkaWN0aW9uKTsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmlu
dGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbm9k
ZUluZGV4XS5nZXRQcmVkaWN0aW9uKCkpKTsKKyNlbmRpZgogI2Vsc2UKICAgICAgICAgVU5VU0VE
X1BBUkFNKG5vZGVJbmRleCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJ
KHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0
aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTMgQEAgZW51bSBEYXRhRm9y
bWF0IHsKICAgICBEYXRhRm9ybWF0Tm9uZSA9IDAsCiAgICAgRGF0YUZvcm1hdEludGVnZXIgPSAx
LAogICAgIERhdGFGb3JtYXREb3VibGUgPSAyLAotICAgIERhdGFGb3JtYXRDZWxsID0gMywKKyAg
ICBEYXRhRm9ybWF0Qm9vbGVhbiA9IDMsCisgICAgRGF0YUZvcm1hdENlbGwgPSA0LAogICAgIERh
dGFGb3JtYXRKUyA9IDgsCiAgICAgRGF0YUZvcm1hdEpTSW50ZWdlciA9IERhdGFGb3JtYXRKUyB8
IERhdGFGb3JtYXRJbnRlZ2VyLAogICAgIERhdGFGb3JtYXRKU0RvdWJsZSA9IERhdGFGb3JtYXRK
UyB8IERhdGFGb3JtYXREb3VibGUsCiAgICAgRGF0YUZvcm1hdEpTQ2VsbCA9IERhdGFGb3JtYXRK
UyB8IERhdGFGb3JtYXRDZWxsLAorICAgIERhdGFGb3JtYXRKU0Jvb2xlYW4gPSBEYXRhRm9ybWF0
SlMgfCBEYXRhRm9ybWF0Qm9vbGVhbgogfTsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTYxLDYgKzYz
LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRUb1N0cmluZyhEYQogICAgICAgICBy
ZXR1cm4gIkRvdWJsZSI7CiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKICAgICAgICAgcmV0dXJu
ICJDZWxsIjsKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gIkJv
b2xlYW4iOwogICAgIGNhc2UgRGF0YUZvcm1hdEpTOgogICAgICAgICByZXR1cm4gIkpTIjsKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CkBAIC02OSw2ICs3Myw4IEBAIGlubGluZSBjb25z
dCBjaGFyKiBkYXRhRm9ybWF0VG9TdHJpbmcoRGEKICAgICAgICAgcmV0dXJuICJKU0RvdWJsZSI7
CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgICAgICByZXR1cm4gIkpTQ2VsbCI7Cisg
ICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorICAgICAgICByZXR1cm4gIkpTQm9vbGVhbiI7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuICJVbmtub3duIjsKICAgICB9CkBAIC04OCw2
ICs5NCw3IEBAIGlubGluZSBib29sIG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXQKICAgICBj
YXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoK
ICAgICAgICAgc3dpdGNoICh0bykgewogICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgog
ICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CkBAIC05NywxMSArMTA0LDE0IEBAIGlubGlu
ZSBib29sIG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXQKICAgICAgICAgY2FzZSBEYXRhRm9y
bWF0SlNJbnRlZ2VyOgogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKICAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3aGljaCBpcyBjdXJyZW50bHkg
dW51c2VkLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAg
ICBkZWZhdWx0OgorICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3
aGljaCBpcyBjdXJyZW50bHkgdW51c2VkLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsMTAgQEAgdm9pZCBHcmFw
aDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5v
cDsKIAogICAgIHVuc2lnbmVkIHJlZkNvdW50ID0gbm9kZS5yZWZDb3VudCgpOwotICAgIGlmICgh
cmVmQ291bnQpCisgICAgaWYgKCFyZWZDb3VudCkgeworICAgICAgICBwcmludGYoIiUgNGQ6XHRz
a2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLm11c3RHZW5lcmF0ZSgpOwog
ICAgIGlmIChtdXN0R2VuZXJhdGUpCiAgICAgICAgIC0tcmVmQ291bnQ7CkBAIC0xOTMsMTQgKzE5
NSwxNCBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiB2b2lkIEdyYXBo
OjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIGlmIChleGVjKSB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50
cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1l
bnRQcmVkaWN0aW9ucy5zaXplKCkpOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMg
PSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBtX3ByZWRpY3Rp
b25zLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3Qg
YXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7CiAgICAgICAgICAgICBK
U1ZhbHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKICAgICAgICAg
ICAgIGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAg
ICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIFByZWRpY3RJbnQzMiwgV2Vh
a1ByZWRpY3Rpb24pOwogICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJs
ZSgpKQotICAgICAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUg
fD0gUHJlZGljdERvdWJsZTsKKyAgICAgICAgICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RB
cmd1bWVudChhcmcsIFByZWRpY3REb3VibGUsIFdlYWtQcmVkaWN0aW9uKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTIyMiwxMCArMjI0LDEwIEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1
bWVudFR5cGVzKEV4ZWNTdGEKICAgICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlmCiAgICAgICAg
IAotICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92
YWx1ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUpKTsKKyAgICAgICAgbV9w
cmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBtYWtlUHJlZGljdGlvbihnbG9iYWxEYXRh
LCAqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOwogICAg
ICAgICAKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0
aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmdd
Lm1fdmFsdWUpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRp
Y3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7
CiAjZW5kaWYKICAgICB9CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdQcmVkaWN0aW9uVHJh
Y2tlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDIsMTggKzQzLDYgQEAgY2xhc3MgRXhl
Y1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rp
bmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9w
ZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi1z
dHJ1Y3QgUHJlZGljdGlvblNsb3QgewotcHVibGljOgotICAgIFByZWRpY3Rpb25TbG90KCkKLSAg
ICAgICAgOiBtX3ZhbHVlKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgUHJlZGljdGVk
VHlwZSBtX3ZhbHVlOwotfTsKLQogdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4OwogCiAvLyBG
b3IgZXZlcnkgbG9jYWwgdmFyaWFibGUgd2UgdHJhY2sgYW55IGV4aXN0aW5nIGdldCBvciBzZXQg
b2YgdGhlIHZhbHVlLgpAQCAtMTAzLDggKzkyLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogY2xh
c3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CiBwdWJsaWM6CiAgICAgR3JhcGgo
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMpCi0gICAgICAgIDog
bV9hcmd1bWVudFByZWRpY3Rpb25zKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX3ZhcmlhYmxl
UHJlZGljdGlvbnMobnVtVmFyaWFibGVzKQorICAgICAgICA6IG1fcHJlZGljdGlvbnMobnVtQXJn
dW1lbnRzLCBudW1WYXJpYWJsZXMpCiAgICAgewogICAgIH0KIApAQCAtMTM1LDcwICsxMjMsMzUg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1tibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KLQorICAgIAorICAgIFByZWRp
Y3Rpb25UcmFja2VyJiBwcmVkaWN0aW9ucygpCisgICAgeworICAgICAgICByZXR1cm4gbV9wcmVk
aWN0aW9uczsKKyAgICB9CisgICAgCiAgICAgYm9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgcmV0dXJuIG1l
cmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1h
a2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZVByZWRpY3Rpb25zLnNp
emUoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPj0gMCk7Ci0gICAgICAgICAgICBt
X3ZhcmlhYmxlUHJlZGljdGlvbnMucmVzaXplKG9wZXJhbmQgKyAxKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlUHJlZGljdGlv
bnNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3Qob3BlcmFuZCwgcHJlZGljdGlv
biwgc291cmNlKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2ln
bmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNl
IHNvdXJjZSkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90
Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZmluZCh2YXJOdW1iZXIg
KyAxKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5lbmQoKSkg
ewotICAgICAgICAgICAgUHJlZGljdGlvblNsb3QgcHJlZGljdGlvblNsb3Q7Ci0gICAgICAgICAg
ICBib29sIHJlc3VsdCA9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBt
YWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgICAgIG1fZ2xvYmFs
VmFyUHJlZGljdGlvbnMuYWRkKHZhck51bWJlciArIDEsIHByZWRpY3Rpb25TbG90KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJu
IG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJl
ZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3RH
bG9iYWxWYXIodmFyTnVtYmVyLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgIH0KICAgICAKICAg
ICBib29sIHByZWRpY3QoTm9kZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewot
ICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5s
b2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIo
bm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgY2FzZSBHZXRC
eUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAg
ICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIHJl
dHVybiBub2RlLnByZWRpY3QocHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9ucy5wcmVkaWN0KG5vZGUsIHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgfQogCiAg
ICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRQcmVkaWN0aW9uc1thcmd1bWVudF0ubV92YWx1ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlUHJlZGljdGlvbnMuc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlOwot
ICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25z
LmdldFByZWRpY3Rpb24ob3BlcmFuZCk7CiAgICAgfQogICAgIAogICAgIFByZWRpY3RlZFR5cGUg
Z2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewotICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2ds
b2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVyICsgMSk7Ci0gICAgICAgIGlmIChpdGVy
ID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gUHJl
ZGljdE5vbmU7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKKyAgICAgICAg
cmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih2YXJOdW1iZXIpOwog
ICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkK
QEAgLTIxMSwyMCArMTY0LDcgQEAgcHVibGljOgogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0g
VmFsdWVUb0ludDMyKQogICAgICAgICAgICAgbm9kZVB0ciA9ICYoKnRoaXMpW25vZGVQdHItPmNo
aWxkMSgpXTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsKLSAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG5vZGVQ
dHItPmxvY2FsKCkpOwotICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsKLSAgICAg
ICAgY2FzZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAg
ICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlvbigqbm9kZVB0cik7CiAgICAgfQogICAg
IAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCkBA
IC0yNDQsNiArMTg0LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsKICAgICB9CisgICAgYm9vbCBpc0Jv
b2xlYW5Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KGNv
ZGVCbG9jayk7CisgICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1
ZXMgZnJvbSBub2Rlcy4KICAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayog
Y29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTI1Nyw2ICsyMDEsMTAg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkRv
dWJsZUNvbnN0YW50KGNvZGVCbG9jayk7CiAgICAgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5D
b25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29k
ZUJsb2NrKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIg
Km9wTmFtZShOb2RlVHlwZSk7CkBAIC0yNzEsOSArMjE5LDcgQEAgcHJpdmF0ZToKICAgICAvLyBX
aGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxs
eSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgog
ICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKIAotICAgIFZlY3RvcjxQcmVkaWN0aW9u
U2xvdCwgMTY+IG1fYXJndW1lbnRQcmVkaWN0aW9uczsKLSAgICBWZWN0b3I8UHJlZGljdGlvblNs
b3QsIDE2PiBtX3ZhcmlhYmxlUHJlZGljdGlvbnM7Ci0gICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJl
ZGljdGlvblNsb3Q+IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnM7CisgICAgUHJlZGljdGlvblRyYWNr
ZXIgbV9wcmVkaWN0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBAIEdQUlJlZyBK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsSW50ZWdlcihOb2QKICAgICBjYXNlIERhdGFGb3JtYXRKUzoK
ICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAg
ICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoK
ICAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtu
b3cgdGhpcyBvcGVyYW5kIHRvIGJlIGludGVnZXIuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogCkBAIC0xNTMsNiArMTU1LDggQEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxE
b3VibGUoTm9kZQogICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgogICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2Ug
RGF0YUZvcm1hdEJvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgICAg
ICAvLyBTaG91bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgd2Uga25vdyB0aGlz
IG9wZXJhbmQgdG8gYmUgbnVtZXJpYy4KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAK
QEAgLTI5NSwxMSArMjk5LDE2IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1
ZShOb2QKICAgICBjYXNlIERhdGFGb3JtYXRKUzoKICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVn
ZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlND
ZWxsOiB7CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpT
Qm9vbGVhbjogewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9n
cHJzLmxvY2soZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CisgICAgICAgIAorICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkg
bmV2ZXIgb2NjdXJzCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDA2LDkgKzQxNSwyNiBAQCBib29sIEpJVENvZGVH
ZW5lcmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyCiAgICAgCiAgICAgcmV0dXJuIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZQogICAgICAg
ICB8fCAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0
SlNDZWxsCisgICAgICAgIHx8IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMp
ID09IERhdGFGb3JtYXRKU0Jvb2xlYW4KICAgICAgICAgfHwgKG5vZGUuaXNDb25zdGFudCgpICYm
ICF2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7CiB9CiAKK2Jvb2wgSklU
Q29kZUdlbmVyYXRvcjo6aXNLbm93bkJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAg
ICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIGlmIChub2RlLmhh
c0Jvb2xlYW5SZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlz
Qm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOworICAgIAorICAgIHJldHVybiAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNCb29sZWFuCisgICAgICAgIHx8IChpbmZvLnNwaWxs
Rm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0Jvb2xlYW47Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgogaW5saW5lIFRvIHNhZmVDYXN0KEZy
b20gdmFsdWUpCiB7CkBAIC01ODgsNyArNjE0LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZU5vbgogICAgIH0KICAgICAKICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJ
bmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQpAQCAtNzQzLDcgKzc2OSw3IEBAIHZv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KICAgICAgICAgY2FsbE9wZXJh
dGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIGFyZzIpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpA
QCAtNzc3LDcgKzgwMyw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b24KICAgICAgICAgCiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xl
YW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQogfQogCkBAIC05MzksNyAr
OTY1LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgICAg
ICBkb25lMi5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jv
b2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKIGJvb2wgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlJiBub2RlLCBib29sIGludmVydCkK
QEAgLTk2OCwzMSArOTk0LDYzIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdEJyYW5jaChO
b2RlJiAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAKLSAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAg
Ci0gICAgdmFsdWUudXNlKCk7Ci0gICAgCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dCgpKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotCi0gICAg
YWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKSwg
bm90VGFrZW4pOwotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciks
IHRha2VuKTsKLSAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsKLSAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOwogICAgIAotICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgbV9qaXQubW92ZSh2YWx1
ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4pOwotICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIGlmIChpc0tub3duQm9vbGVhbihub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRp
dGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOworICAgICAgICAKKyAgICAgICAgaWYgKHRh
a2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyOjpaZXJvOworICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAg
ICAgICAgIHRha2VuID0gbm90VGFrZW47CisgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihj
b25kaXRpb24sIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSkpLCB0YWtlbik7CisgICAgICAg
IGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICAgICAgYWRkQnJhbmNoKG1f
aml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAor
ICAgICAgICBib29sIHByZWRpY3RCb29sZWFuID0gaXNCb29sZWFuUHJlZGljdGlvbihtX2ppdC5n
cmFwaCgpLmdldFByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXSkpOwogICAg
IAotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgcmVzdWx0R1BSKSwgdGFrZW4pOwotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEp
KQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgIGlm
IChwcmVkaWN0Qm9vbGVhbikgeworICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRy
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CisgICAgICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpKSwgdGFrZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9pc1Nw
ZWN1bGF0aXZlICYmIHByZWRpY3RCb29sZWFuKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoMCkpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIHRha2VuKTsKKyAgICAKKyAgICAgICAgICAgIGlm
ICghcHJlZGljdEJvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsKKyAg
ICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CisgICAgCisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKTsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgCisgICAg
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAgICAgICAgICAgIGlmIChub3RUYWtlbiAhPSAobV9i
bG9jayArIDEpKQorICAgICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgfQogfQogCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vZGUpCkBAIC0xMDgxLDYgKzExMzksMTIgQEAg
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZEpT
Q2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgbV9qaXQuZ3Jh
cGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CiB9CiAKK3ZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
KQoreworICAgIEFTU0VSVChtX2lzU3BlY3VsYXRpdmUpOworICAgIHN0YXRpY19jYXN0PFNwZWN1
bGF0aXZlSklUKj4odGhpcyktPnNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCk7Cit9CisKICNp
Zm5kZWYgTkRFQlVHCiBzdGF0aWMgY29uc3QgY2hhciogZGF0YUZvcm1hdFN0cmluZyhEYXRhRm9y
bWF0IGZvcm1hdCkKIHsKQEAgLTEyODcsNiArMTM1MSwxNiBAQCBHUFJUZW1wb3Jhcnk6OkdQUlRl
bXBvcmFyeShKSVRDb2RlR2VuZXJhCiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7
CiB9CiAKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwg
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
Z3ByKEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgo
KSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZQor
ICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOworfQorCiBHUFJUZW1wb3Jhcnk6OkdQ
UlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIEpTVmFsdWVPcGVyYW5kJiBvcDEpCiAg
ICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQ7CiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ7CiBjbGFzcyBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQ7CitjbGFzcyBT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZDsKIAogCiAvLyA9PT0gSklUQ29kZUdlbmVyYXRvciA9PT0K
QEAgLTQxMCwxNCArNDExLDE4IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBib29sIGlzS25vd25O
b3RJbnRlZ2VyKE5vZGVJbmRleCk7CiAKKyAgICBib29sIGlzS25vd25Cb29sZWFuKE5vZGVJbmRl
eCk7CisgICAgCiAgICAgLy8gQ2hlY2tzL2FjY2Vzc29ycyBmb3IgY29uc3RhbnQgdmFsdWVzLgog
ICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5p
c0NvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0pTQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAg
IGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0
LmlzSW50MzJDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50
KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzRG91YmxlQ29uc3RhbnQobm9k
ZUluZGV4KTsgfQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gbV9qaXQuaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGRvdWJsZSB2YWx1
ZU9mRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFs
dWVPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBKU1ZhbHVlIHZhbHVlT2ZKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2Rl
SW5kZXgpOyB9CiAgICAgYm9vbCBpc051bGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQog
ICAgIHsKICAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGVJbmRleCkpCkBAIC01NzUsNiArNTgw
LDggQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRDYWxsKE5vZGUmKTsK
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCk7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFzIGNvbXBsZXRlZCBjb2Rl
IGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBpdHMgcmVzdWx0LCB0byBm
cmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0dGluZwpA
QCAtMTEyMSw2ICsxMTI4LDcgQEAgcHVibGljOgogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2Vu
ZXJhdG9yKiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVy
YXRvciosIEludGVnZXJPcGVyYW5kJiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3Jh
cnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUNlbGxPcGVyYW5kJik7CisgICAgR1BSVGVt
cG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCYpOwogICAg
IEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgSlNWYWx1ZU9wZXJhbmQmKTsKIAogICAg
IH5HUFJUZW1wb3JhcnkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsMTQg
QEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogI2lmIERGR19KSVRf
QlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRQogICAgIGJyZWFrcG9pbnQoKTsKICNlbmRpZgor
ICAgIAorI2lmIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlv
bkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1
Z0luZm87CisgICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1
Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwo
ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRp
ZgogCiAgICAgLy8gRG9lcyB0aGlzIHNwZWN1bGF0aW9uIGNoZWNrIHJlcXVpcmUgYW55IGFkZGl0
aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLAogICAgIC8vIHRvIHJlc3RvcmUgYW55IHN0
YXRlIHRoYXQgaGFzIGJlZW4gb3ZlcndyaXR0ZW4gYmVmb3JlIHdlIGVudGVyIGJhY2sgaW4gdG8g
dGhlCkBAIC04NzUsNyArODgzLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogewogICAgIC8vIExpbmsgdGhlIGNvZGUsIHBvcHVsYXRlIGRhdGEgaW4gQ29kZUJs
b2NrIGRhdGEgc3RydWN0dXJlcy4KICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgIGZwcmludGYo
c3RkZXJyLCAiSklUIGNvZGUgc3RhcnQgYXQgWyVwLCAlcClcbiIsIGxpbmtCdWZmZXIuZGVidWdB
ZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpKSAr
IGxpbmtCdWZmZXIuZGVidWdTaXplKCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiSklUIGNvZGUg
Zm9yICVwIHN0YXJ0IGF0IFslcCwgJXApXG4iLCBtX2NvZGVCbG9jaywgbGlua0J1ZmZlci5kZWJ1
Z0FkZHJlc3MoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkp
ICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSk7CiAjZW5kaWYKIAogICAgIC8vIExpbmsgYWxsIGNh
bGxzIG91dCBmcm9tIHRoZSBKSVQgY29kZSB0byB0aGVpciByZXNwZWN0aXZlIGZ1bmN0aW9ucy4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292
ZXJ5Owogc3RydWN0IEVudHJ5TG9jYXRpb247CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKIAor
I2lmbmRlZiBOREVCVUcKK3R5cGVkZWYgdm9pZCAoKlZfREZHRGVidWdPcGVyYXRpb25fRVApKEV4
ZWNTdGF0ZSosIHZvaWQqKTsKKyNlbmRpZgorCisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05f
RkFJTFVSRQorc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2s7CisgICAgdW5zaWduZWQgZGVidWdPZmZzZXQ7Cit9OworI2VuZGlmCisK
IC8vID09PSBDYWxsUmVjb3JkID09PQogLy8KIC8vIEEgcmVjb3JkIG9mIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSB0byBhIGhlbHBlciBmdW5jdGlvbi4KQEAgLTIwNSwxNiArMjE2LDQxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1
bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOwogICAgICAgICByZXR1cm4g
ZnVuY3Rpb25DYWxsOwogICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gQWRkIGEg
ZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qgb24gSklUIGNvZGUgZXhlY3V0aW9u
IHN0YXRlLgorICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVidWdPcGVyYXRpb25fRVAgZnVuY3Rp
b24sIHZvaWQqIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBzdG9yZVB0
cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciAr
IGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFs
RGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdp
c3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB9CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihhcmd1bWVudCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGNhbGwoR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdE
YXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBsb2FkUHRyKG1f
Z2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7
CisgICAgfQorI2VuZGlmCiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBm
b3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50
KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUlu
ZGV4KTsgfQogICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7
IH0KKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0
dXJuIGdyYXBoKCkuaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0K
ICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCiAg
ICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBncmFwaCgpLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAg
ICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJl
dHVybiBncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgp
OyB9CiAgICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZEb3VibGVDb25zdGFudChjb2RlQmxvY2soKSwgbm9k
ZUluZGV4KTsgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29kZUJsb2Nr
KCksIG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5
bmFtaWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgogI2lmIERGR19KSVRf
QVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ1
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsOCBAQAogI2RlZmluZSBERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUg
MAogLy8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUgc3BlY3VsYXRpb24gZmFpbHVyZSBjb2Rl
LgogI2RlZmluZSBERkdfSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorLy8gTG9n
IGV2ZXJ5IHNwZWN1bGF0aW9uIGZhaWx1cmUuCisjZGVmaW5lIERGR19WRVJCT1NFX1NQRUNVTEFU
SU9OX0ZBSUxVUkUgMAogLy8gRGlzYWJsZSB0aGUgREZHIEpJVCB3aXRob3V0IGhhdmluZyB0byB0
b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBE
aXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9y
bS5oIQpAQCAtODksNiArOTEsNyBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CiAj
ZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAgIDB4MTAwMAogI2RlZmluZSBOb2RlUmVzdWx0RG91Ymxl
ICAweDIwMDAKICNkZWZpbmUgTm9kZVJlc3VsdEludDMyICAgMHgzMDAwCisjZGVmaW5lIE5vZGVS
ZXN1bHRCb29sZWFuIDB4NDAwMAogCiAvLyBUaGlzIG1hY3JvIGRlZmluZXMgYSBzZXQgb2YgaW5m
b3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxhdGUgTm9k
ZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZHX09QKG1hY3JvKSBcCkBA
IC0xNDAsMTIgKzE0MywxMiBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CiAgICAg
bWFjcm8oUHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5v
ZGVzIGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKENvbXBhcmVMZXNz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oQ29tcGFyZUxl
c3NFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBh
cmVHcmVhdGVyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8o
Q29tcGFyZUdyZWF0ZXJFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAg
IG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAg
IG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oQ29tcGFy
ZUxlc3MsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENvbXBhcmVMZXNzRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENh
bGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApA
QCAtMTU5LDggKzE2Miw4IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKICAgICAv
KiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tIYXNJbnN0YW5jZSwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAotICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVSZXN1bHRKUykgXAotICAgIG1h
Y3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEluc3RhbmNlT2YsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNybyhKdW1w
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBcCkBAIC0x
OTgsNyArMjAxLDggQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAog
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOwotc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQ
cmVkaWN0Qm9vbGVhbiA9IDB4MTA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
VG9wICAgID0gMHgxZjsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01h
c2sgICAgPSAweDgwOwogCkBAIC0yMjksNiArMjMzLDExIEBAIGlubGluZSBib29sIGlzTnVtYmVy
UHJlZGljdGlvbihQcmVkaWN0ZWQKICAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVy
KSAmJiAhKHZhbHVlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0K
IAoraW5saW5lIGJvb2wgaXNCb29sZWFuUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQor
eworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRpY3RCb29s
ZWFuOworfQorCiBpbmxpbmUgYm9vbCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2
YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgU3Ryb25nUHJlZGlj
dGlvblRhZykpOwpAQCAtMjQ4LDggKzI1NywxMiBAQCBpbmxpbmUgY29uc3QgY2hhciogcHJlZGlj
dGlvblRvU3RyaW5nKFByCiAgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKICAg
ICAgICAgY2FzZSBQcmVkaWN0SW50MzI6CiAgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWlu
dDMyIjsKKyAgICAgICAgY2FzZSBQcmVkaWN0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1kb3VibGUiOwogICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CiAgICAgICAgICAg
ICByZXR1cm4gInAtc3Ryb25nLW51bWJlciI7CisgICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46
CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvb2xlYW4iOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy10b3AiOwogICAgICAgICB9CkBAIC0yNjMs
OCArMjc2LDEyIEBAIGlubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHIKICAg
ICAgICAgcmV0dXJuICJwLXdlYWstYXJyYXkiOwogICAgIGNhc2UgUHJlZGljdEludDMyOgogICAg
ICAgICByZXR1cm4gInAtd2Vhay1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0RG91YmxlOgorICAg
ICAgICByZXR1cm4gInAtd2Vhay1kb3VibGUiOwogICAgIGNhc2UgUHJlZGljdE51bWJlcjoKICAg
ICAgICAgcmV0dXJuICJwLXdlYWstbnVtYmVyIjsKKyAgICBjYXNlIFByZWRpY3RCb29sZWFuOgor
ICAgICAgICByZXR1cm4gInAtd2Vhay1ib29sZWFuIjsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gInAtd2Vhay10b3AiOwogICAgIH0KQEAgLTMyNiw2ICszNDMsOSBAQCBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsCiAgICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQogICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RDZWxsOwogICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0
YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0Qm9vbGVhbjsKKyAgICAKICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFBy
ZWRpY3RUb3A7CiB9CiAjZW5kaWYKQEAgLTQyMyw2ICs0NDMsMTEgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aykuaXNOdW1iZXIoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkg
JiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKKyAgICB9CisgICAg
CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7CkBAIC00
MzQsNiArNDU5LDEyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29u
c3RhbnQoY29kZUJsb2NrKSk7CiAgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOwogICAgIH0KKyAgICAKKyAgICBib29sIHZhbHVl
T2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBB
U1NFUlQoaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmdldEJvb2xlYW4oKTsKKyAgICB9CiAKICAgICBib29s
IGhhc0xvY2FsKCkKICAgICB7CkBAIC00OTIsMTMgKzUyMywxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgewogICAgICAgICByZXR1cm4gKG9wICYgTm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRK
UzsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNCb29sZWFuUmVzdWx0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdEJvb2xlYW47Cisg
ICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXJzIG9yIGRvdWJsZXMuCiAgICAgYm9vbCBo
YXNOdW1lcmljUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIC8vIFRoaXMgY2hlY2sgd2lsbCBuZWVk
IHVwZGF0aW5nIGlmIG1vcmUgcmVzdWx0IHR5cGVzIGFyZSBhZGRlZC4KLSAgICAgICAgQVNTRVJU
KChoYXNJbnQzMlJlc3VsdCgpIHx8IGhhc0RvdWJsZVJlc3VsdCgpKSA9PSAhaGFzSlNSZXN1bHQo
KSk7Ci0gICAgICAgIHJldHVybiAhaGFzSlNSZXN1bHQoKTsKKyAgICAgICAgcmV0dXJuIGhhc0lu
dDMyUmVzdWx0KCkgfHwgaGFzRG91YmxlUmVzdWx0KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0p1
bXAoKQpAQCAtNTYzLDkgKzU5Nyw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgCiAgICAgICAg
IEFTU0VSVChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBQ
cmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgcHJlZGlj
dGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gU3Ryb25nUHJlZGlj
dGlvblRhZyB8IHByZWRpY3Rpb24gfCBtX29wSW5mbzI7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0g
bV9vcEluZm8yICE9IG5ld1ByZWRpY3Rpb247Ci0gICAgICAgIG1fb3BJbmZvMiB8PSBuZXdQcmVk
aWN0aW9uOworICAgICAgICBtX29wSW5mbzIgPSBuZXdQcmVkaWN0aW9uOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzgsNiArNjc4
LDE0IEBAIFJlZ2lzdGVyU2l6ZWRCb29sZWFuIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCisjaWYg
REZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQordm9pZCBkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqIGRlYnVnSW5mb1JhdykKK3sKKyAg
ICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CisgICAgcHJpbnRmKCJT
cGVjdWxhdGlvbiBmYWlsdXJlIGluICVwIGF0IDB4JXghXG4iLCBkZWJ1Z0luZm8tPmNvZGVCbG9j
aywgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCk7Cit9CisjZW5kaWYKKwogfSAvLyBleHRlcm4gIkMi
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1
LDEwIEBAIGRvdWJsZSBkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKEV4ZWNTdGEKIGludDMyX3Qg
ZGZnQ29udmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIFJl
Z2lzdGVyU2l6ZWRCb29sZWFuIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKIAorI2lmIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUK
K3ZvaWQgZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2
b2lkKik7CisjZW5kaWYKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblRyYWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25UcmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJl
ZGljdGlvblRyYWNrZXJfaAorI2RlZmluZSBERkdQcmVkaWN0aW9uVHJhY2tlcl9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFy
cyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJn
dW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisKK3N0cnVjdCBQcmVk
aWN0aW9uU2xvdCB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvblNsb3QoKQorICAgICAgICA6IG1f
dmFsdWUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICBQcmVkaWN0ZWRUeXBlIG1fdmFs
dWU7Cit9OworCitjbGFzcyBQcmVkaWN0aW9uVHJhY2tlciB7CitwdWJsaWM6CisgICAgUHJlZGlj
dGlvblRyYWNrZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIo
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMpCisgICAgICAgIDog
bV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fdmFyaWFibGVzKG51bVZhcmlh
YmxlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVNpbWlsYXJUbyhj
b25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50
cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgICAgIG1fdmFyaWFibGVz
LnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKKyAgICB9CisgICAgCisgICAgc2l6
ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgp
OyB9CisgICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YWJsZXMuc2l6ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleEZvck9wZXJh
bmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXpl
KCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KKworICAgIGJvb2wgcHJl
ZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24s
IFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJl
ZGljdGlvbihtX2FyZ3VtZW50c1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJl
ZGljdGlvbiwgc291cmNlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChpbnQgb3Bl
cmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkK
KyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAg
ICAgIHJldHVybiBwcmVkaWN0QXJndW1lbnQoYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFu
ZCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+
PSBtX3ZhcmlhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kID49IDAp
OworICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlc1tv
cGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICB7
CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRl
ciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOworICAgICAgICBpZiAoaXRlciA9
PSBtX2dsb2JhbFZhcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIFByZWRpY3Rpb25TbG90IHByZWRp
Y3Rpb25TbG90OworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVByZWRpY3Rpb24ocHJl
ZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
CisgICAgICAgICAgICBtX2dsb2JhbFZhcnMuYWRkKHZhck51bWJlciArIDEsIHByZWRpY3Rpb25T
bG90KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24o
cHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChOb2Rl
JiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rpb24s
IHNvdXJjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6
CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBw
cmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0
QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
UHJlZGljdGVkVHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQgYXJndW1lbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWU7CisgICAg
fQorCisgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQorICAgIHsK
KyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0
dXJuIGdldEFyZ3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5k
KSk7CisgICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlOworICAgICAg
ICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0
R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgeworICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2Jh
bFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxW
YXJzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1
cm4gaXRlci0+c2Vjb25kLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUg
Z2V0UHJlZGljdGlvbihOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLm9w
KSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gZ2V0UHJlZGlj
dGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAg
ICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOworICAg
ICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNl
IEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0Ogor
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0UHJlZGljdGlvbigpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICB9CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsK
KyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX3ZhcmlhYmxlczsKKyAgICBIYXNoTWFw
PHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9nbG9iYWxWYXJzOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdQcmVkaWN0aW9uVHJhY2tlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCwyOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAg
ICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgIHsKKyAgICAgICAgLy8gUHJl
ZGljdGlvbnMgaXMgYSBmb3J3YXJkIGZsb3cgcHJvcGVydHkgdGhhdCBwcm9wYWdhdGVzIHRoZSB2
YWx1ZXMgc2VlbiBhdAorICAgICAgICAvLyBhIHBhcnRpY3VsYXIgdmFsdWUgc291cmNlIHRvIHRo
ZWlyIHZhcmlvdXMgdXNlcywgZW5zdXJpbmcgdGhhdCB1c2VzIHBlcmZvcm0KKyAgICAgICAgLy8g
c3BlY3VsYXRpb24gdGhhdCBkb2VzIG5vdCBjb250cmF2ZW5lIHRoZSBleHBlY3RlZCB2YWx1ZXMu
CiAgICAgICAgIG1fcHJlZGljdGlvbnMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChOb2RlSW5kZXggaSA9IDA7IGkgPCBtX2dyYXBoLnNpemUoKTsgKytpKQorICAgICAgICAK
KyAgICAgICAgLy8gVXNlcyBpcyBhIGJhY2t3YXJkIGZsb3cgcHJvcGVydHkgdGhhdCBwcm9wYWdh
dGVzIHRoZSBoYXJkIGV4cGVjdGF0aW9ucyBhdAorICAgICAgICAvLyBjZXJ0YWluIHVzZXMgdG8g
dGhlaXIgdmFsdWUgc291cmNlcywgZW5zdXJpbmcgdGhhdCBwcmVkaWN0aW9ucyBhYm91dAorICAg
ICAgICAvLyB2YWx1ZXMgZG8gbm90IGNvbnRyYXZlbmUgdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGNv
bWVzIHVwIG9ubHkgaW4gdGhlCisgICAgICAgIC8vIGNhc2VzIG9mIG9idmlvdXMgY2VsbCB1c2Vz
LCBsaWtlIEdldEJ5SWQgYW5kIGZyaWVuZHMgYXMgd2VsbCBhcyBDYWxsLgorICAgICAgICAvLyBX
ZSdyZSBlc3NlbnRpYWxseSBzdGF0aWNhbGx5IHNwZWN1bGF0aW5nIHRoYXQgaWYgdGhlIHZhbHVl
IHByb2ZpbGUgaW5kaWNhdGVzCisgICAgICAgIC8vIHRoYXQgb25seSBib29sZWFucyAoZm9yIGV4
YW1wbGUpIGZsb3cgaW50byBhIEdldEJ5SWQsIHRoZW4gdGhlIHZhbHVlCisgICAgICAgIC8vIHBy
b2ZpbGUgaXMgc2ltcGx5IHdyb25nIGR1ZSB0byBpbnN1ZmZpY2llbnQgY292ZXJhZ2UgYW5kIG5l
ZWRzIHRvIGJlCisgICAgICAgIC8vIGFkanVzdGVkIGFjY29yZGluZ2x5LiBUaGUgYWx0ZXJuYXRp
dmVzIHdvdWxkIGJlIHRvIGFzc3VtZSBlaXRoZXIKKyAgICAgICAgLy8gdGhhdCB0aGUgR2V0QnlJ
ZCBuZXZlciBleGVjdXRlcywgb3IgYWx3YXlzIGV4ZWN1dGVzIG9uIGEgYm9vbGVhbiBsZWFkaW5n
CisgICAgICAgIC8vIHRvIHdoYXRldmVyIGJpemFycmUgYmVoYXZpb3IgdGhhdCdzIHN1cHBvc2Vk
IHRvIGNhdXNlLgorICAgICAgICBtX3VzZXMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAg
ICAgbV92YXJpYWJsZVVzZXMuaW5pdGlhbGl6ZVNpbWlsYXJUbyhtX2dyYXBoLnByZWRpY3Rpb25z
KCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9u
ZTsKKyAgICAgICAgICAgIG1fdXNlc1tpXSA9IFByZWRpY3ROb25lOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIHZvaWQgZml4cG9pbnQoKQpAQCAtNTEsOSArNzAsMTAgQEAgcHVibGljOgog
ICAgICAgICBtX2NvdW50ID0gMDsKICNlbmRpZgogICAgICAgICBkbyB7CisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yd2FyZCBw
cm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQg
YW5kCiAgICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKICAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjQsMzAgKzg0LDMz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgy
KSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOwotICAgICAgICAgICAgaWYg
KCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIERvIGFub3RoZXIgZm9yd2FyZCBwYXNzIGJlY2F1c2UgZm9yd2FyZCBwYXNzZXMg
YXJlIG9uIGF2ZXJhZ2UgbW9yZQotICAgICAgICAgICAgLy8gcHJvZml0YWJsZS4KLSAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwog
ICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
dm9pZCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICBib29sIHNl
dFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgCiAgICAg
ICAgIGlmIChtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSA9PSBwcmVkaWN0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgbV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPSBwcmVkaWN0aW9uOwotICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIGJv
b2wgbWVyZ2VVc2UoTm9kZUluZGV4IG5vZGVJbmRleCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQogICAgIHsKLSAgICAgICAgaWYgKERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNb
bV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fdXNlc1tub2RlSW5k
ZXhdLCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBE
Rkc6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwgcHJlZGlj
dGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQpA
QCAtOTYsMzMgKzExOSw0NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworCisjaWYgREZHX0RFQlVHX1ZFUkJP
U0UKKyAgICAgICAgcHJpbnRmKCIgICAlc1sldV06ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2Nv
bXBpbGVJbmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6IHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAg
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikp
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVl
LmFzQ2VsbCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xvYmFsRGF0YSwg
Y2VsbCkpCi0gICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24o
UHJlZGljdEFycmF5LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0QXJyYXksIFN0cm9u
Z1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRpY3Rp
b24pKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RCb29sZWFuLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQ
cmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3Vz
ZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9u
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV92YXJpYWJsZVVzZXMucHJlZGljdChub2RlLmxv
Y2FsKCksIG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9u
Z1ByZWRpY3Rpb24pOworCiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBt
X2dyYXBoLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKICAgICAgICAgICAgIGlmIChpc1N0
cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgfD0g
bV9ncmFwaC5wcmVkaWN0KG5vZGUubG9jYWwoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgp
XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGljdGlvbnNbbm9k
ZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBtX3ZhcmlhYmxlVXNl
cy5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtMTM1LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgICAg
ICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMTQ0LDEwICsxODAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIGlm
IChpc051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIG1l
cmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE51
bWJlciwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVtYmVyLCBTdHJvbmdQcmVk
aWN0aW9uKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE1OCwxMSArMTk1LDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJl
ZGljdGlvbihyaWdodCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9u
KGxlZnQpICYmIGlzTnVtYmVyUHJlZGljdGlvbihyaWdodCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQ
cmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwg
U3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJs
ZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlv
bikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTc1LDE1ICsyMTIsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihs
ZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKLSAgICAg
ICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQz
MiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rp
b24pKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1lcmdlUHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aERpdjogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQ
cmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGlj
dGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MTk1LDQ4ICsyMzIsNjAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6CiAgICAg
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVk
aWN0aW9uLCBldmVuIHRob3VnaCB3ZSBlYXNpbHkKLSAgICAgICAgICAgIC8vIGNvdWxkLgotICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQ
cmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdEJvb2xlYW4sIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRCeUlkOgog
ICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNo
aWxkMSgpLCBQcmVkaWN0Q2VsbCB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLnByZWRpY3QobV91c2VzW21fY29tcGlsZUluZGV4XSAmIH5QcmVkaWN0
aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQ
cmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAg
IGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0sIFByZWRpY3RDZWxsIHwgU3Ry
b25nUHJlZGljdGlvblRhZyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUucHJlZGljdCht
X3VzZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0
aW9uKTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0
aW9uKCkpKQotICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9u
KCkpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLmdldFBy
ZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwg
U3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX3ZhcmlhYmxlVXNlcy5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1f
dXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rp
b24pOwogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRH
bG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOwogICAgICAgICAgICAgaWYgKGlz
U3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7Ci0gICAgICAgICAgICBtX2NoYW5n
ZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGlj
dGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rp
b24pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3RHbG9iYWxWYXIobm9k
ZS52YXJOdW1iZXIoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSAmIH5QcmVkaWN0aW9u
VGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
VXNlKG5vZGUuY2hpbGQxKCksIG1fdmFyaWFibGVVc2VzLmdldEdsb2JhbFZhclByZWRpY3Rpb24o
bm9kZS52YXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVj
YXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAg
ICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uo
bm9kZS5jaGlsZDEoKSwgUHJlZGljdENlbGwgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBUaGVzZSBnZXQgaWdu
b3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIERG
Rzo6SnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgUmV0dXJuOgotICAg
ICAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAg
Y2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjU1LDYgKzMwNCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAj
ZW5kaWYKICAgICAgICAgfQorCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRm
KCJleHBlY3QoJXMpIHVzZSglcykgJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rp
b25zW21fY29tcGlsZUluZGV4XSksIHByZWRpY3Rpb25Ub1N0cmluZyhtX3VzZXNbbV9jb21waWxl
SW5kZXhdKSwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKKyNlbmRpZgorICAgICAgICAKKyAg
ICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFn
YXRlRm9yd2FyZCgpCkBAIC0yODMsNiArMzM4LDkgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXgg
bV9jb21waWxlSW5kZXg7CiAgICAgCiAgICAgVmVjdG9yPFByZWRpY3RlZFR5cGUsIDE2PiBtX3By
ZWRpY3Rpb25zOworICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAxNj4gbV91c2VzOworICAgIAor
ICAgIFByZWRpY3Rpb25UcmFja2VyIG1fdmFyaWFibGVVc2VzOwogCiAjaWYgREZHX0RFQlVHX1ZF
UkJPU0UKICAgICB1bnNpZ25lZCBtX2NvdW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0NTk1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw4ICsxMjgsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50SQogCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1h
dENlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRK
U0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6IHsKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CiAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTIyMywxMyArMjI1
LDE0IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZvcm1h
dE5vbmU6Ci0gICAgICAgIC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCisgICAgY2FzZSBE
YXRhRm9ybWF0Tm9uZTogLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERh
dGFGb3JtYXRCb29sZWFuOiAvLyBUaGlzIHR5cGUgbmV2ZXIgb2NjdXJzLgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKKyAgICBj
YXNlIERhdGFGb3JtYXRKUzoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKICAgICAg
ICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhq
c1ZhbHVlR3ByKTsKICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CkBAIC0zNDks
NyArMzUyLDc2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoK
ICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
IHsKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29s
ZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CisgICAgfQor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkR1BS
UmVnOworfQorCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5v
ZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9k
ZUluZGV4XTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyXTsKKworICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKKworICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgeworICAgICAgICAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3By
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oKTsKKyAgICAgICAgICAgIHJldHVybiBncHI7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OworCisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Jvb2xlYW4pIHsKKyAgICAg
ICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCBncHIpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3Vs
YXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsK
KyAgICAgICAgfQorICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0
Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKKyAgICAgICAgR1BSUmVn
IGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJl
dHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKKyAgICAgICAgR1BS
UmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCBncHIpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
LCBncHIsIEludmFsaWRHUFJSZWcpKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJuIGdw
cjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRh
Rm9ybWF0SW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNlIERh
dGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0
YUZvcm1hdENlbGw6IHsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsK
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQpAQCAtNTI4LDcgKzYwMCw3IEBAIGJv
b2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICAgICAgCiAgICAgICAg
IC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCiAg
ICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjEs
NyArNjMzLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIC8vIGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFm
bG93IHdpdGggdmlydHVhbCByZWdpc3RlcnMuCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7
Ci0gICAgICAgICAgICBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEpTVmFs
dWUobV9jb21waWxlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVzdWx0LmdwcigpLCBpc0FycmF5
UHJlZGljdGlvbihwcmVkaWN0aW9uKSA/IERhdGFGb3JtYXRKU0NlbGwgOiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAg
ICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBm
b3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOworICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9y
bWF0SlNCb29sZWFuOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvcm1hdCA9
IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNv
dW50KCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01NzgsNiArNjU5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBib29s
ZWFuKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYm9v
bGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihub2RlLmxvY2FsKCkpKTsKQEAgLTg0MSw2ICs5MjYsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTG9naWNhbE5vdDogewor
ICAgICAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhN
RTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVj
b3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KIApAQCAtODUwLDcgKzk0Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVz
dWx0LmdwcigpKTsKIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ug
c2hvdWxkIHVzZSBpdCBoZXJlLgotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTEyMjcsNyArMTMyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHNjcmF0Y2hSZWcpOwogCiAgICAg
ICAgIHB1dFJlc3VsdC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRj
aFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hSZWcs
IG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsOCBAQCBjbGFzcyBT
cGVjdWxhdGl2ZUpJVDsKIC8vIFRoaXMgZW51bSBkZXNjcmliZXMgdGhlIHR5cGVzIG9mIGFkZGl0
aW9uYWwgcmVjb3ZlcnkgdGhhdAogLy8gbWF5IG5lZWQgYmUgcGVyZm9ybWVkIHNob3VsZCBhIHNw
ZWN1bGF0aW9uIGNoZWNrIGZhaWwuCiBlbnVtIFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIHsKLSAg
ICBTcGVjdWxhdGl2ZUFkZAorICAgIFNwZWN1bGF0aXZlQWRkLAorICAgIEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrCiB9OwogCiAvLyA9PT0gU3BlY3VsYXRpb25SZWNvdmVyeSA9PT0KQEAgLTEzMiw4
ICsxMzMsMTEgQEAgcHVibGljOgogICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5v
ZGVJbmRleCk7CiAgICAgRlBSUmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZUluZGV4KTsKICAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4KTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
SklUQ29kZUdlbmVyYXRvcjsKKyAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOwogICAgIHZv
aWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKQEAgLTQwOCw2ICs0MTIsNDcgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCitjbGFzcyBTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQo
U3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGpp
dCkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKElu
dmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CisgICAgCisg
ICAgflNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dw
ck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQtPnVubG9jayhtX2dw
ck9ySW52YWxpZCk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGdw
cigpCisgICAgeworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFu
KGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAgICBOb2RlSW5kZXgg
bV9pbmRleDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7Cit9OworCiAKIC8vID09PSBTcGVj
dWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMyLDYgKzIzMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRpb247CiAgICAgICAgIEpTVmFsdWUg
aG9zdENhbGxSZXR1cm5WYWx1ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGludDY0X3QgZGVi
dWdEYXRhQnVmZmVyWzY0XTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFx
dWVKU0NsYXNzKiwgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNp
b24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI2LDkgKzEyNiwxOCBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlw
dGlvbigpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiPEpTVmFsdWUoKT4i
KTsKICAgICBlbHNlIGlmIChpc0ludDMyKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9u
LCBzaXplLCAiSW50MzI6ICVkIiwgYXNJbnQzMigpKTsKLSAgICBlbHNlIGlmIChpc0RvdWJsZSgp
KQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRvdWJsZTogJWxmIiwgYXNE
b3VibGUoKSk7Ci0gICAgZWxzZSBpZiAoaXNDZWxsKCkpCisgICAgZWxzZSBpZiAoaXNEb3VibGUo
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBz
aXplLCAiRG91YmxlOiAlbGYsICVseCIsIGFzRG91YmxlKCksIHJlaW50ZXJwcmV0RG91YmxlVG9J
bnRwdHIoYXNEb3VibGUoKSkpOworI2Vsc2UKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
ZG91YmxlIGFzRG91YmxlOworICAgICAgICAgICAgdWludDMyX3QgYXNUd29JbnQzMnNbMl07Cisg
ICAgICAgIH0gdTsKKyAgICAgICAgdS5hc0RvdWJsZSA9IGFzRG91YmxlKCk7CisgICAgICAgIHNu
cHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlbGYsICUwOHg6JTA4eCIsIGFzRG91
YmxlKCksIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0pOworI2VuZGlmCisgICAg
fSBlbHNlIGlmIChpc0NlbGwoKSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUs
ICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKICAgICBlbHNlIGlmIChpc1RydWUoKSkKICAgICAgICAg
c25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJUcnVlIik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYxLDcgKzk2MSw3IEBACiAj
ZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04pCi0jZGVmaW5l
IEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJ
TEFUSU9OIDEKICNlbmRpZgogCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNW
QUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106518</attachid>
            <date>2011-09-06 16:52:45 -0700</date>
            <delta_ts>2011-09-06 18:44:38 -0700</delta_ts>
            <desc>the patch - undo accidental Platform.h change</desc>
            <filename>dynboolopt_patch_6.diff</filename>
            <type>text/plain</type>
            <size>74992</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM4IEBA
CisyMDExLTA5LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBkb2VzIG5vdCBvcHRpbWl6ZSBib29sZWFucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBib29sZWFuIHZhbHVl
IHByb2ZpbGluZywgYm9vbGVhbiBwcmVkaWN0aW9uIGluIHRoZSBERkcsCisgICAgICAgIGJvb2xl
YW4gZm9yd2FyZCBmbG93IHByb3BhZ2F0aW9uIGluIHRoZSBERkdQcm9wYWdhdG9yLCBib29sZWFu
CisgICAgICAgIGRhdGEgZm9ybWF0IGluIERGRyBnZW5lcmF0aW9uIGluZm8sIGFuZCBjb21wcmVo
ZW5zaXZlIG9wdGltaXphdGlvbnMKKyAgICAgICAgYmFzZWQgb24gYm90aCBib29sZWFuIHByZWRp
Y3Rpb24gYW5kIGJvb2xlYW4gZ2VuZXJhdGlvbiBpbmZvLgorICAgICAgICBUaGlzIGlzIGJyaW5n
cyB0aGUgc3BlZWQtdXAgb24gdjgtcmljaGFyZHMgdG8gMTIlLCBhbmQgZ2l2ZXMgc2xpZ2h0Cisg
ICAgICAgIHNwZWVkLXVwcyBlbHNld2hlcmUgYXMgd2VsbC4KKyAgICAgICAgCisgICAgICAgIE1h
a2luZyB0aGlzIHdvcmsgcmlnaHQgcmVxdWlyZWQgbmF2aWdhdGluZyBzb21lIHN1YnRsZXRpZXMg
aW4KKyAgICAgICAgdmFsdWUgcHJvZmlsaW5nLiAgU29tZSBmdW5jdGlvbnMgZ2V0IGNvbXBpbGVk
IHdpdGggaW5zdWZmaWNpZW50CisgICAgICAgIGluZm9ybWF0aW9uIGJlY2F1c2Ugc29tZSBpbXBv
cnRhbnQgcGF0aCBvZiB0aGUgZnVuY3Rpb24gbmV2ZXIKKyAgICAgICAgZXhlY3V0ZWQuICBJbiB0
aGVzZSBjYXNlcywgd2Ugd2lzaCB0byBmYWxsIGJhY2sgb24gc3RhdGljCisgICAgICAgIHNwZWN1
bGF0aW9uLiAgQnV0IHRvIGRvIHNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHByZWRpY3Rpb25z
IHRoYXQKKyAgICAgICAgYXJlIGluaGVyZW50IGluIHRoZSBjb2RlIChsaWtlIHRoYXQgR2V0QnlJ
ZCBhbG1vc3QgY2VydGFpbmx5IHRha2VzCisgICAgICAgIGEgY2VsbCBvcGVyYW5kKSBhcmUgcmVm
bGVjdGVkIGluIHByZWRpY3Rpb25zIHRoYXQgd2UgbWFrZSBpbgorICAgICAgICBERkdQcm9wYWdh
dG9yLiAgVGh1cywgREZHUHJvcGFnYXRvciBub3cgZG9lcyBib3RoIGJhY2t3YXJkIGFuZAorICAg
ICAgICBmb3J3YXJkIGZsb3csIHVzaW5nIGEgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZCBmaXhw
b2ludC4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYWNrd2FyZCBmbG93IGluIERGR1Byb3BhZ2F0
b3IgaXMgYSBzZXBhcmF0ZSBzdGF0aWMgYW5hbHlzaXMsCisgICAgICAgIGFuZCBuZWVkcyB0byBr
ZWVwIGEgc2V0IG9mIGJhY2t3YXJkIGZsb3cgYWJzdHJhY3QgdmFsdWVzIGZvcgorICAgICAgICB2
YXJpYWJsZXMsIGFyZ3VtZW50cywgYW5kIGdsb2JhbHMuICBUbyBtYWtlIHRoaXMgZWFzeSwgdGhp
cyBwYXRjaAorICAgICAgICBmYWN0b3JzIG91dCBERkdHcmFwaCdzIHByZWRpY3Rpb24gdHJhY2tp
bmcgY2FwYWJpbGl0eSBpbnRvCisgICAgICAgIERGR1ByZWRpY3Rpb25UcmFja2VyLCB3aGljaCBu
b3cgZ2V0cyB1c2VkIGJ5IGJvdGggREZHR3JhcGggKGZvcgorICAgICAgICBmb3J3YXJkIGZsb3cg
cHJlZGljdGlvbnMpIGFuZCBERkdQcm9wYWdhdG9yIChmb3IgYmFja3dhcmQgZmxvdworICAgICAg
ICBwcmVkaWN0aW9ucykuICBCYWNrd2FyZCBmbG93IHByZWRpY3Rpb25zIGV2ZW50dWFsbHkgZ2V0
IG1lcmdlZAorICAgICAgICBpbnRvIGZvcndhcmQgZmxvdyBvbmVzLCBidXQgdGhlIHR3byBhcmUg
bm90IGVxdWl2YWxlbnQ6IGEgZm9yd2FyZAorICAgICAgICBmbG93IHByZWRpY3Rpb24gaXMgYSBz
dXBlcnNldCBvZiB0aGUgYmFja3dhcmQgZmxvdyBwcmVkaWN0aW9uLgorICAgICAgICAKKyAgICAg
ICAgRGVidWdnaW5nIHRoZXNlIHByZWRpY3Rpb24gaXNzdWVzIHJlcXVpcmVkIGEgYmV0dGVyIHVu
ZGVyc3RhbmRpbmcKKyAgICAgICAgb2Ygd2hlcmUgd2UgZmFpbCBzcGVjdWxhdGlvbiwgYW5kIHdo
YXQgb3VyIHZhbHVlIHByZWRpY3Rpb25zIGxvb2sKKyAgICAgICAgbGlrZS4gIFRoaXMgcGF0Y2gg
YWxzbyBhZGRzIG9wdGlvbmFsIHZlcmJvc2Ugc3BlY3VsYXRpb24gZmFpbHVyZQorICAgICAgICAo
c28gYW4gaW5mb3JtYXRpdmUgcHJpbnRmIGZpcmVzIHdoZW5ldmVyIHNwZWN1bGF0aW9uIGZhaWx1
cmUgb2NjdXJzKQorICAgICAgICBhbmQgc2xpZ2h0IGltcHJvdmVtZW50cyB0byB0aGUgdmVyYm9z
aXR5IGluIG90aGVyIHBsYWNlcy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
OgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMpOgorICAgICAg
ICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnByb2JhYmlsaXR5T2ZCb29sZWFuKToKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21w
dXRlU3RhdGlzdGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXAp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Zmls
bEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90SW50ZWdlcik6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bkJvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVU
b05vblNwZWN1bGF0aXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmRlYnVnQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omlz
Qm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVP
ZkJvb2xlYW5Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjppc0Jvb2xlYW5QcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVkaWN0
aW9uVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlUHJlZGljdGlvbnMpOgorICAg
ICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojppc0Jvb2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkJv
b2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQm9vbGVhblJlc3Vs
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTnVtZXJpY1Jlc3VsdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1By
ZWRpY3Rpb25UcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Om9wZXJhbmRJc0Fy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uU2xvdDo6UHJlZGljdGlvblNs
b3QpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpQcmVkaWN0aW9uVHJh
Y2tlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVT
aW1pbGFyVG8pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpudW1iZXJP
ZkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Om51bWJl
ck9mVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJn
dW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpwcmVkaWN0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJl
ZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Omdl
dEFyZ3VtZW50UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNr
ZXI6OmdldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2Vy
OjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
Om1lcmdlVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjpTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6
On5TcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZDo6dXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmRlc2NyaXB0aW9u
KToKKwogMjAxMS0wOS0wNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgd2luZG93cyBjaGFuZ2VzIGZvciBKU0M6UmVnRXhwIGZ1bmN0aW9uYWwgdGVz
dHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgJKHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDE2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQm9vbGVhbnMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldICYm
IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAg
ICAgICAgCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHBhcnRpY3VsYXJseSBvcHRpbWl6
ZWQsIGluIHRoYXQgdGhleSB3aWxsIGVhY2gKICAgICAvLyBwZXJmb3JtIHR3byBwYXNzZXMgb3Zl
ciB0aGUgYnVja2V0cyBhcnJheS4gSG93ZXZlciwgdGhleSBhcmUKQEAgLTE0MiwxNyArMTUyLDIz
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQ
cm9iYWJpbGl0eShudW1iZXJPZkFycmF5cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CiAgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIHByb2JhYmlsaXR5T2ZCb29sZWFuKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZCb29sZWFucygpLCBudW1i
ZXJPZlNhbXBsZXMoKSk7CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcChG
SUxFKiBvdXQpCiAgICAgewogICAgICAgICBmcHJpbnRmKG91dCwKLSAgICAgICAgICAgICAgICAi
c2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9
ICV1IiwKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRv
dWJsZSA9ICV1ICgldSksIGNlbGwgPSAldSAoJXUpLCBhcnJheSA9ICV1ICgldSksIGJvb2xlYW4g
PSAldSAoJXUpIiwKICAgICAgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXMoKSwKLSAgICAgICAg
ICAgICAgICBudW1iZXJPZkludDMycygpLAotICAgICAgICAgICAgICAgIG51bWJlck9mRG91Ymxl
cygpLAotICAgICAgICAgICAgICAgIG51bWJlck9mQ2VsbHMoKSwKLSAgICAgICAgICAgICAgICBu
dW1iZXJPZkFycmF5cygpKTsKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mSW50MzIoKSwg
bnVtYmVyT2ZJbnQzMnMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mRG91YmxlKCks
IG51bWJlck9mRG91YmxlcygpLAorICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZDZWxsKCks
IG51bWJlck9mQ2VsbHMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQXJyYXkoKSwg
bnVtYmVyT2ZBcnJheXMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQm9vbGVhbigp
LCBudW1iZXJPZkJvb2xlYW5zKCkpOwogICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CiAgICAg
ICAgICAgICBpZiAoISFidWNrZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0pIHsKQEAgLTE3OCwx
NiArMTk0LDE4IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICB1bnNpZ25lZCBkb3Vi
bGVzOwogICAgICAgICB1bnNpZ25lZCBjZWxsczsKICAgICAgICAgdW5zaWduZWQgYXJyYXlzOwor
ICAgICAgICB1bnNpZ25lZCBib29sZWFuczsKICAgICB9OwogCiAgICAgLy8gT3B0aW1pemVkIG1l
dGhvZCBmb3IgZ2V0dGluZyBhbGwgY291bnRzIGF0IG9uY2UuCiAgICAgdm9pZCBjb21wdXRlU3Rh
dGlzdGljcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3Mp
IGNvbnN0CiAgICAgewotICAgICAgICB1bnNpZ25lZCBzYW1wbGVzID0gMDsKLSAgICAgICAgdW5z
aWduZWQgaW50MzJzICA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGRvdWJsZXMgPSAwOwotICAgICAg
ICB1bnNpZ25lZCBjZWxscyAgID0gMDsKLSAgICAgICAgdW5zaWduZWQgYXJyYXlzICA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIHNhbXBsZXMgID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzICAg
PSAwOworICAgICAgICB1bnNpZ25lZCBkb3VibGVzICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNl
bGxzICAgID0gMDsKKyAgICAgICAgdW5zaWduZWQgYXJyYXlzICAgPSAwOworICAgICAgICB1bnNp
Z25lZCBib29sZWFucyA9IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAgICAgIGlmICghYnVja2V0c1tp
XSkgewpAQCAtMjEzLDE0ICsyMzEsMTYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAg
ICAgICAgICAgY2VsbHMrKzsKICAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZnbG9iYWxE
YXRhLCB2YWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgICAgICAgICAgICAgIGFycmF5cysrOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAg
ICAgICAgICAgICAgICBib29sZWFucysrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBz
dGF0aXN0aWNzLnNhbXBsZXMgPSBzYW1wbGVzOwotICAgICAgICBzdGF0aXN0aWNzLmludDMycyAg
PSBpbnQzMnM7Ci0gICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcyA9IGRvdWJsZXM7Ci0gICAgICAg
IHN0YXRpc3RpY3MuY2VsbHMgICA9IGNlbGxzOwotICAgICAgICBzdGF0aXN0aWNzLmFycmF5cyAg
PSBhcnJheXM7CisgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcyAgPSBzYW1wbGVzOworICAgICAg
ICBzdGF0aXN0aWNzLmludDMycyAgID0gaW50MzJzOworICAgICAgICBzdGF0aXN0aWNzLmRvdWJs
ZXMgID0gZG91YmxlczsKKyAgICAgICAgc3RhdGlzdGljcy5jZWxscyAgICA9IGNlbGxzOworICAg
ICAgICBzdGF0aXN0aWNzLmFycmF5cyAgID0gYXJyYXlzOworICAgICAgICBzdGF0aXN0aWNzLmJv
b2xlYW5zID0gYm9vbGVhbnM7CiAgICAgfQogICAgIAogICAgIGludCBieXRlY29kZU9mZnNldDsg
Ly8gLTEgZm9yIHByb2xvZ3VlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc1
LDExICs0NzUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgQVNTRVJUKHByb2ZpbGUpOwogI2lmIERGR19ERUJVR19WRVJCT1NFCi0g
ICAgICAgIHByaW50ZigiRHluYW1pYyBwcmVkaWN0aW9uIFsldSwgJXVdOiAiLCBub2RlSW5kZXgs
IGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBwcmludGYoIkR5bmFtaWMgcHJvZmlsZSBbJXUsICV1
XTogIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4KTsKICAgICAgICAgcHJvZmlsZS0+ZHVtcChz
dGRvdXQpOwogICAgICAgICBwcmludGYoIlxuIik7CiAjZW5kaWYKICAgICAgICAgbV9ncmFwaFtu
b2RlSW5kZXhdLnByZWRpY3QobWFrZVByZWRpY3Rpb24oKm1fZ2xvYmFsRGF0YSwgKnByb2ZpbGUp
LCBTdHJvbmdQcmVkaWN0aW9uKTsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmlu
dGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbm9k
ZUluZGV4XS5nZXRQcmVkaWN0aW9uKCkpKTsKKyNlbmRpZgogI2Vsc2UKICAgICAgICAgVU5VU0VE
X1BBUkFNKG5vZGVJbmRleCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJ
KHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0
aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTMgQEAgZW51bSBEYXRhRm9y
bWF0IHsKICAgICBEYXRhRm9ybWF0Tm9uZSA9IDAsCiAgICAgRGF0YUZvcm1hdEludGVnZXIgPSAx
LAogICAgIERhdGFGb3JtYXREb3VibGUgPSAyLAotICAgIERhdGFGb3JtYXRDZWxsID0gMywKKyAg
ICBEYXRhRm9ybWF0Qm9vbGVhbiA9IDMsCisgICAgRGF0YUZvcm1hdENlbGwgPSA0LAogICAgIERh
dGFGb3JtYXRKUyA9IDgsCiAgICAgRGF0YUZvcm1hdEpTSW50ZWdlciA9IERhdGFGb3JtYXRKUyB8
IERhdGFGb3JtYXRJbnRlZ2VyLAogICAgIERhdGFGb3JtYXRKU0RvdWJsZSA9IERhdGFGb3JtYXRK
UyB8IERhdGFGb3JtYXREb3VibGUsCiAgICAgRGF0YUZvcm1hdEpTQ2VsbCA9IERhdGFGb3JtYXRK
UyB8IERhdGFGb3JtYXRDZWxsLAorICAgIERhdGFGb3JtYXRKU0Jvb2xlYW4gPSBEYXRhRm9ybWF0
SlMgfCBEYXRhRm9ybWF0Qm9vbGVhbgogfTsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTYxLDYgKzYz
LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRUb1N0cmluZyhEYQogICAgICAgICBy
ZXR1cm4gIkRvdWJsZSI7CiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKICAgICAgICAgcmV0dXJu
ICJDZWxsIjsKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gIkJv
b2xlYW4iOwogICAgIGNhc2UgRGF0YUZvcm1hdEpTOgogICAgICAgICByZXR1cm4gIkpTIjsKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CkBAIC02OSw2ICs3Myw4IEBAIGlubGluZSBjb25z
dCBjaGFyKiBkYXRhRm9ybWF0VG9TdHJpbmcoRGEKICAgICAgICAgcmV0dXJuICJKU0RvdWJsZSI7
CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgICAgICByZXR1cm4gIkpTQ2VsbCI7Cisg
ICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorICAgICAgICByZXR1cm4gIkpTQm9vbGVhbiI7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuICJVbmtub3duIjsKICAgICB9CkBAIC04OCw2
ICs5NCw3IEBAIGlubGluZSBib29sIG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXQKICAgICBj
YXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoK
ICAgICAgICAgc3dpdGNoICh0bykgewogICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgog
ICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CkBAIC05NywxMSArMTA0LDE0IEBAIGlubGlu
ZSBib29sIG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXQKICAgICAgICAgY2FzZSBEYXRhRm9y
bWF0SlNJbnRlZ2VyOgogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKICAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3aGljaCBpcyBjdXJyZW50bHkg
dW51c2VkLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAg
ICBkZWZhdWx0OgorICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3
aGljaCBpcyBjdXJyZW50bHkgdW51c2VkLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsMTAgQEAgdm9pZCBHcmFw
aDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5v
cDsKIAogICAgIHVuc2lnbmVkIHJlZkNvdW50ID0gbm9kZS5yZWZDb3VudCgpOwotICAgIGlmICgh
cmVmQ291bnQpCisgICAgaWYgKCFyZWZDb3VudCkgeworICAgICAgICBwcmludGYoIiUgNGQ6XHRz
a2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLm11c3RHZW5lcmF0ZSgpOwog
ICAgIGlmIChtdXN0R2VuZXJhdGUpCiAgICAgICAgIC0tcmVmQ291bnQ7CkBAIC0xOTMsMTQgKzE5
NSwxNCBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiB2b2lkIEdyYXBo
OjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIGlmIChleGVjKSB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50
cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1l
bnRQcmVkaWN0aW9ucy5zaXplKCkpOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMg
PSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBtX3ByZWRpY3Rp
b25zLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3Qg
YXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7CiAgICAgICAgICAgICBK
U1ZhbHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKICAgICAgICAg
ICAgIGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAg
ICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIFByZWRpY3RJbnQzMiwgV2Vh
a1ByZWRpY3Rpb24pOwogICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJs
ZSgpKQotICAgICAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUg
fD0gUHJlZGljdERvdWJsZTsKKyAgICAgICAgICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RB
cmd1bWVudChhcmcsIFByZWRpY3REb3VibGUsIFdlYWtQcmVkaWN0aW9uKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTIyMiwxMCArMjI0LDEwIEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1
bWVudFR5cGVzKEV4ZWNTdGEKICAgICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlmCiAgICAgICAg
IAotICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92
YWx1ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUpKTsKKyAgICAgICAgbV9w
cmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBtYWtlUHJlZGljdGlvbihnbG9iYWxEYXRh
LCAqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOwogICAg
ICAgICAKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0
aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmdd
Lm1fdmFsdWUpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRp
Y3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7
CiAjZW5kaWYKICAgICB9CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdQcmVkaWN0aW9uVHJh
Y2tlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDIsMTggKzQzLDYgQEAgY2xhc3MgRXhl
Y1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rp
bmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9w
ZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi1z
dHJ1Y3QgUHJlZGljdGlvblNsb3QgewotcHVibGljOgotICAgIFByZWRpY3Rpb25TbG90KCkKLSAg
ICAgICAgOiBtX3ZhbHVlKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgUHJlZGljdGVk
VHlwZSBtX3ZhbHVlOwotfTsKLQogdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4OwogCiAvLyBG
b3IgZXZlcnkgbG9jYWwgdmFyaWFibGUgd2UgdHJhY2sgYW55IGV4aXN0aW5nIGdldCBvciBzZXQg
b2YgdGhlIHZhbHVlLgpAQCAtMTAzLDggKzkyLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogY2xh
c3MgR3JhcGggOiBwdWJsaWMgVmVjdG9yPE5vZGUsIDY0PiB7CiBwdWJsaWM6CiAgICAgR3JhcGgo
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMpCi0gICAgICAgIDog
bV9hcmd1bWVudFByZWRpY3Rpb25zKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX3ZhcmlhYmxl
UHJlZGljdGlvbnMobnVtVmFyaWFibGVzKQorICAgICAgICA6IG1fcHJlZGljdGlvbnMobnVtQXJn
dW1lbnRzLCBudW1WYXJpYWJsZXMpCiAgICAgewogICAgIH0KIApAQCAtMTM1LDcwICsxMjMsMzUg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1tibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KLQorICAgIAorICAgIFByZWRp
Y3Rpb25UcmFja2VyJiBwcmVkaWN0aW9ucygpCisgICAgeworICAgICAgICByZXR1cm4gbV9wcmVk
aWN0aW9uczsKKyAgICB9CisgICAgCiAgICAgYm9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKLSAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgcmV0dXJuIG1l
cmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1h
a2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZVByZWRpY3Rpb25zLnNp
emUoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPj0gMCk7Ci0gICAgICAgICAgICBt
X3ZhcmlhYmxlUHJlZGljdGlvbnMucmVzaXplKG9wZXJhbmQgKyAxKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlUHJlZGljdGlv
bnNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3Qob3BlcmFuZCwgcHJlZGljdGlv
biwgc291cmNlKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2ln
bmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNl
IHNvdXJjZSkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90
Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZmluZCh2YXJOdW1iZXIg
KyAxKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5lbmQoKSkg
ewotICAgICAgICAgICAgUHJlZGljdGlvblNsb3QgcHJlZGljdGlvblNsb3Q7Ci0gICAgICAgICAg
ICBib29sIHJlc3VsdCA9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBt
YWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgICAgIG1fZ2xvYmFs
VmFyUHJlZGljdGlvbnMuYWRkKHZhck51bWJlciArIDEsIHByZWRpY3Rpb25TbG90KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJu
IG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJl
ZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3RH
bG9iYWxWYXIodmFyTnVtYmVyLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgIH0KICAgICAKICAg
ICBib29sIHByZWRpY3QoTm9kZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewot
ICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5s
b2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIo
bm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgY2FzZSBHZXRC
eUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAg
ICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIHJl
dHVybiBub2RlLnByZWRpY3QocHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9ucy5wcmVkaWN0KG5vZGUsIHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgfQogCiAg
ICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRQcmVkaWN0aW9uc1thcmd1bWVudF0ubV92YWx1ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlUHJlZGljdGlvbnMuc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlOwot
ICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25z
LmdldFByZWRpY3Rpb24ob3BlcmFuZCk7CiAgICAgfQogICAgIAogICAgIFByZWRpY3RlZFR5cGUg
Z2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCiAgICAgewotICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2ds
b2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVyICsgMSk7Ci0gICAgICAgIGlmIChpdGVy
ID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gUHJl
ZGljdE5vbmU7Ci0gICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKKyAgICAgICAg
cmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih2YXJOdW1iZXIpOwog
ICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkK
QEAgLTIxMSwyMCArMTY0LDcgQEAgcHVibGljOgogICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0g
VmFsdWVUb0ludDMyKQogICAgICAgICAgICAgbm9kZVB0ciA9ICYoKnRoaXMpW25vZGVQdHItPmNo
aWxkMSgpXTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsKLSAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG5vZGVQ
dHItPmxvY2FsKCkpOwotICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsKLSAgICAg
ICAgY2FzZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAg
ICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0UHJlZGljdGlvbigqbm9kZVB0cik7CiAgICAgfQogICAg
IAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCkBA
IC0yNDQsNiArMTg0LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsKICAgICB9CisgICAgYm9vbCBpc0Jv
b2xlYW5Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQm9vbGVhbkNvbnN0YW50KGNv
ZGVCbG9jayk7CisgICAgfQogICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1
ZXMgZnJvbSBub2Rlcy4KICAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayog
Y29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTI1Nyw2ICsyMDEsMTAg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkRv
dWJsZUNvbnN0YW50KGNvZGVCbG9jayk7CiAgICAgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5D
b25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29k
ZUJsb2NrKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIg
Km9wTmFtZShOb2RlVHlwZSk7CkBAIC0yNzEsOSArMjE5LDcgQEAgcHJpdmF0ZToKICAgICAvLyBX
aGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxs
eSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgog
ICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKIAotICAgIFZlY3RvcjxQcmVkaWN0aW9u
U2xvdCwgMTY+IG1fYXJndW1lbnRQcmVkaWN0aW9uczsKLSAgICBWZWN0b3I8UHJlZGljdGlvblNs
b3QsIDE2PiBtX3ZhcmlhYmxlUHJlZGljdGlvbnM7Ci0gICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJl
ZGljdGlvblNsb3Q+IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnM7CisgICAgUHJlZGljdGlvblRyYWNr
ZXIgbV9wcmVkaWN0aW9uczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw4IEBAIEdQUlJlZyBK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsSW50ZWdlcihOb2QKICAgICBjYXNlIERhdGFGb3JtYXRKUzoK
ICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAg
ICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoK
ICAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtu
b3cgdGhpcyBvcGVyYW5kIHRvIGJlIGludGVnZXIuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogCkBAIC0xNTMsNiArMTU1LDggQEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxE
b3VibGUoTm9kZQogICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgogICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2Ug
RGF0YUZvcm1hdEJvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgICAg
ICAvLyBTaG91bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgd2Uga25vdyB0aGlz
IG9wZXJhbmQgdG8gYmUgbnVtZXJpYy4KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAK
QEAgLTI5NSwxMSArMjk5LDE2IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1
ZShOb2QKICAgICBjYXNlIERhdGFGb3JtYXRKUzoKICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVn
ZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlND
ZWxsOiB7CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpT
Qm9vbGVhbjogewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9n
cHJzLmxvY2soZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CisgICAgICAgIAorICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkg
bmV2ZXIgb2NjdXJzCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDA2LDkgKzQxNSwyNiBAQCBib29sIEpJVENvZGVH
ZW5lcmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyCiAgICAgCiAgICAgcmV0dXJuIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZQogICAgICAg
ICB8fCAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0
SlNDZWxsCisgICAgICAgIHx8IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMp
ID09IERhdGFGb3JtYXRKU0Jvb2xlYW4KICAgICAgICAgfHwgKG5vZGUuaXNDb25zdGFudCgpICYm
ICF2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7CiB9CiAKK2Jvb2wgSklU
Q29kZUdlbmVyYXRvcjo6aXNLbm93bkJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAg
ICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIGlmIChub2RlLmhh
c0Jvb2xlYW5SZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlz
Qm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOworICAgIAorICAgIHJldHVybiAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNCb29sZWFuCisgICAgICAgIHx8IChpbmZvLnNwaWxs
Rm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0Jvb2xlYW47Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgogaW5saW5lIFRvIHNhZmVDYXN0KEZy
b20gdmFsdWUpCiB7CkBAIC01ODgsNyArNjE0LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZU5vbgogICAgIH0KICAgICAKICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJ
bmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQpAQCAtNzQzLDcgKzc2OSw3IEBAIHZv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KICAgICAgICAgY2FsbE9wZXJh
dGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIGFyZzIpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpA
QCAtNzc3LDcgKzgwMyw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b24KICAgICAgICAgCiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xl
YW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgfQogfQogCkBAIC05MzksNyAr
OTY1LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgICAg
ICBkb25lMi5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jv
b2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKIGJvb2wgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlJiBub2RlLCBib29sIGludmVydCkK
QEAgLTk2OCwzMSArOTk0LDYzIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdEJyYW5jaChO
b2RlJiAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAKLSAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAg
Ci0gICAgdmFsdWUudXNlKCk7Ci0gICAgCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dCgpKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotCi0gICAg
YWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKSwg
bm90VGFrZW4pOwotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciks
IHRha2VuKTsKLSAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsKLSAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOwogICAgIAotICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgbV9qaXQubW92ZSh2YWx1
ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4pOwotICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIGlmIChpc0tub3duQm9vbGVhbihub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRp
dGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOworICAgICAgICAKKyAgICAgICAgaWYgKHRh
a2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyOjpaZXJvOworICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAg
ICAgICAgIHRha2VuID0gbm90VGFrZW47CisgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihj
b25kaXRpb24sIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSkpLCB0YWtlbik7CisgICAgICAg
IGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICAgICAgYWRkQnJhbmNoKG1f
aml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAor
ICAgICAgICBib29sIHByZWRpY3RCb29sZWFuID0gaXNCb29sZWFuUHJlZGljdGlvbihtX2ppdC5n
cmFwaCgpLmdldFByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXSkpOwogICAg
IAotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgcmVzdWx0R1BSKSwgdGFrZW4pOwotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEp
KQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgIGlm
IChwcmVkaWN0Qm9vbGVhbikgeworICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRy
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CisgICAgICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpKSwgdGFrZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9pc1Nw
ZWN1bGF0aXZlICYmIHByZWRpY3RCb29sZWFuKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoMCkpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIHRha2VuKTsKKyAgICAKKyAgICAgICAgICAgIGlm
ICghcHJlZGljdEJvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsKKyAg
ICAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CisgICAgCisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKTsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgCisgICAg
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAgICAgICAgICAgIGlmIChub3RUYWtlbiAhPSAobV9i
bG9jayArIDEpKQorICAgICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgfQogfQogCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vZGUpCkBAIC0xMDgxLDYgKzExMzksMTIgQEAg
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZEpT
Q2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgbV9qaXQuZ3Jh
cGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CiB9CiAKK3ZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
KQoreworICAgIEFTU0VSVChtX2lzU3BlY3VsYXRpdmUpOworICAgIHN0YXRpY19jYXN0PFNwZWN1
bGF0aXZlSklUKj4odGhpcyktPnNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCk7Cit9CisKICNp
Zm5kZWYgTkRFQlVHCiBzdGF0aWMgY29uc3QgY2hhciogZGF0YUZvcm1hdFN0cmluZyhEYXRhRm9y
bWF0IGZvcm1hdCkKIHsKQEAgLTEyODcsNiArMTM1MSwxNiBAQCBHUFJUZW1wb3Jhcnk6OkdQUlRl
bXBvcmFyeShKSVRDb2RlR2VuZXJhCiAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7
CiB9CiAKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwg
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
Z3ByKEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgo
KSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZQor
ICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOworfQorCiBHUFJUZW1wb3Jhcnk6OkdQ
UlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIEpTVmFsdWVPcGVyYW5kJiBvcDEpCiAg
ICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQ7CiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ7CiBjbGFzcyBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQ7CitjbGFzcyBT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZDsKIAogCiAvLyA9PT0gSklUQ29kZUdlbmVyYXRvciA9PT0K
QEAgLTQxMCwxNCArNDExLDE4IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBib29sIGlzS25vd25O
b3RJbnRlZ2VyKE5vZGVJbmRleCk7CiAKKyAgICBib29sIGlzS25vd25Cb29sZWFuKE5vZGVJbmRl
eCk7CisgICAgCiAgICAgLy8gQ2hlY2tzL2FjY2Vzc29ycyBmb3IgY29uc3RhbnQgdmFsdWVzLgog
ICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5p
c0NvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0pTQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAg
IGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0
LmlzSW50MzJDb25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50
KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzRG91YmxlQ29uc3RhbnQobm9k
ZUluZGV4KTsgfQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gbV9qaXQuaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGRvdWJsZSB2YWx1
ZU9mRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFs
dWVPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBKU1ZhbHVlIHZhbHVlT2ZKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2Rl
SW5kZXgpOyB9CiAgICAgYm9vbCBpc051bGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQog
ICAgIHsKICAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGVJbmRleCkpCkBAIC01NzUsNiArNTgw
LDggQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRDYWxsKE5vZGUmKTsK
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCk7CiAKICAgICAvLyBDYWxsZWQgb25jZSBhIG5vZGUgaGFzIGNvbXBsZXRlZCBjb2Rl
IGdlbmVyYXRpb24gYnV0IHByaW9yIHRvIHNldHRpbmcKICAgICAvLyBpdHMgcmVzdWx0LCB0byBm
cmVlIHVwIGl0cyBjaGlsZHJlbi4gKFRoaXMgbXVzdCBoYXBwZW4gcHJpb3IgdG8gc2V0dGluZwpA
QCAtMTEyMSw2ICsxMTI4LDcgQEAgcHVibGljOgogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2Vu
ZXJhdG9yKiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVy
YXRvciosIEludGVnZXJPcGVyYW5kJiwgSW50ZWdlck9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3Jh
cnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUNlbGxPcGVyYW5kJik7CisgICAgR1BSVGVt
cG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCYpOwogICAg
IEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgSlNWYWx1ZU9wZXJhbmQmKTsKIAogICAg
IH5HUFJUZW1wb3JhcnkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsMTQg
QEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogI2lmIERGR19KSVRf
QlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRQogICAgIGJyZWFrcG9pbnQoKTsKICNlbmRpZgor
ICAgIAorI2lmIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlv
bkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1
Z0luZm87CisgICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1
Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwo
ZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRp
ZgogCiAgICAgLy8gRG9lcyB0aGlzIHNwZWN1bGF0aW9uIGNoZWNrIHJlcXVpcmUgYW55IGFkZGl0
aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLAogICAgIC8vIHRvIHJlc3RvcmUgYW55IHN0
YXRlIHRoYXQgaGFzIGJlZW4gb3ZlcndyaXR0ZW4gYmVmb3JlIHdlIGVudGVyIGJhY2sgaW4gdG8g
dGhlCkBAIC04NzUsNyArODgzLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogewogICAgIC8vIExpbmsgdGhlIGNvZGUsIHBvcHVsYXRlIGRhdGEgaW4gQ29kZUJs
b2NrIGRhdGEgc3RydWN0dXJlcy4KICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgIGZwcmludGYo
c3RkZXJyLCAiSklUIGNvZGUgc3RhcnQgYXQgWyVwLCAlcClcbiIsIGxpbmtCdWZmZXIuZGVidWdB
ZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpKSAr
IGxpbmtCdWZmZXIuZGVidWdTaXplKCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiSklUIGNvZGUg
Zm9yICVwIHN0YXJ0IGF0IFslcCwgJXApXG4iLCBtX2NvZGVCbG9jaywgbGlua0J1ZmZlci5kZWJ1
Z0FkZHJlc3MoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkp
ICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSk7CiAjZW5kaWYKIAogICAgIC8vIExpbmsgYWxsIGNh
bGxzIG91dCBmcm9tIHRoZSBKSVQgY29kZSB0byB0aGVpciByZXNwZWN0aXZlIGZ1bmN0aW9ucy4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDk0NTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292
ZXJ5Owogc3RydWN0IEVudHJ5TG9jYXRpb247CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKIAor
I2lmbmRlZiBOREVCVUcKK3R5cGVkZWYgdm9pZCAoKlZfREZHRGVidWdPcGVyYXRpb25fRVApKEV4
ZWNTdGF0ZSosIHZvaWQqKTsKKyNlbmRpZgorCisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05f
RkFJTFVSRQorc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2s7CisgICAgdW5zaWduZWQgZGVidWdPZmZzZXQ7Cit9OworI2VuZGlmCisK
IC8vID09PSBDYWxsUmVjb3JkID09PQogLy8KIC8vIEEgcmVjb3JkIG9mIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSB0byBhIGhlbHBlciBmdW5jdGlvbi4KQEAgLTIwNSwxNiArMjE2LDQxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1
bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOwogICAgICAgICByZXR1cm4g
ZnVuY3Rpb25DYWxsOwogICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gQWRkIGEg
ZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qgb24gSklUIGNvZGUgZXhlY3V0aW9u
IHN0YXRlLgorICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVidWdPcGVyYXRpb25fRVAgZnVuY3Rp
b24sIHZvaWQqIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBzdG9yZVB0
cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciAr
IGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFs
RGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdp
c3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB9CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihhcmd1bWVudCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGNhbGwoR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdE
YXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBsb2FkUHRyKG1f
Z2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7
CisgICAgfQorI2VuZGlmCiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBm
b3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50
KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUlu
ZGV4KTsgfQogICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7
IH0KKyAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0
dXJuIGdyYXBoKCkuaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0K
ICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCiAg
ICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBncmFwaCgpLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAg
ICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJl
dHVybiBncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgp
OyB9CiAgICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZEb3VibGVDb25zdGFudChjb2RlQmxvY2soKSwgbm9k
ZUluZGV4KTsgfQorICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KSB7IHJldHVybiBncmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoY29kZUJsb2Nr
KCksIG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5
bmFtaWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgogI2lmIERGR19KSVRf
QVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ1
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsOCBAQAogI2RlZmluZSBERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUg
MAogLy8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUgc3BlY3VsYXRpb24gZmFpbHVyZSBjb2Rl
LgogI2RlZmluZSBERkdfSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorLy8gTG9n
IGV2ZXJ5IHNwZWN1bGF0aW9uIGZhaWx1cmUuCisjZGVmaW5lIERGR19WRVJCT1NFX1NQRUNVTEFU
SU9OX0ZBSUxVUkUgMAogLy8gRGlzYWJsZSB0aGUgREZHIEpJVCB3aXRob3V0IGhhdmluZyB0byB0
b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBE
aXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9y
bS5oIQpAQCAtODksNiArOTEsNyBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CiAj
ZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAgIDB4MTAwMAogI2RlZmluZSBOb2RlUmVzdWx0RG91Ymxl
ICAweDIwMDAKICNkZWZpbmUgTm9kZVJlc3VsdEludDMyICAgMHgzMDAwCisjZGVmaW5lIE5vZGVS
ZXN1bHRCb29sZWFuIDB4NDAwMAogCiAvLyBUaGlzIG1hY3JvIGRlZmluZXMgYSBzZXQgb2YgaW5m
b3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxhdGUgTm9k
ZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZHX09QKG1hY3JvKSBcCkBA
IC0xNDAsMTIgKzE0MywxMiBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CiAgICAg
bWFjcm8oUHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5v
ZGVzIGZvciBjb21wYXJpc29uIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKENvbXBhcmVMZXNz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oQ29tcGFyZUxl
c3NFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBh
cmVHcmVhdGVyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8o
Q29tcGFyZUdyZWF0ZXJFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAg
IG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAg
IG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oQ29tcGFy
ZUxlc3MsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENvbXBhcmVMZXNzRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENvbXBhcmVTdHJpY3RFcSwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENh
bGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApA
QCAtMTU5LDggKzE2Miw4IEBAIHR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKICAgICAv
KiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCcmVha3BvaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tIYXNJbnN0YW5jZSwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAotICAgIG1hY3JvKEluc3RhbmNlT2YsIE5vZGVSZXN1bHRKUykgXAotICAgIG1h
Y3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEluc3RhbmNlT2YsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNybyhKdW1w
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBcCkBAIC0x
OTgsNyArMjAxLDggQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAog
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOwotc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQ
cmVkaWN0Qm9vbGVhbiA9IDB4MTA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
VG9wICAgID0gMHgxZjsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01h
c2sgICAgPSAweDgwOwogCkBAIC0yMjksNiArMjMzLDExIEBAIGlubGluZSBib29sIGlzTnVtYmVy
UHJlZGljdGlvbihQcmVkaWN0ZWQKICAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVy
KSAmJiAhKHZhbHVlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0K
IAoraW5saW5lIGJvb2wgaXNCb29sZWFuUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQor
eworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRpY3RCb29s
ZWFuOworfQorCiBpbmxpbmUgYm9vbCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2
YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgU3Ryb25nUHJlZGlj
dGlvblRhZykpOwpAQCAtMjQ4LDggKzI1NywxMiBAQCBpbmxpbmUgY29uc3QgY2hhciogcHJlZGlj
dGlvblRvU3RyaW5nKFByCiAgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKICAg
ICAgICAgY2FzZSBQcmVkaWN0SW50MzI6CiAgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWlu
dDMyIjsKKyAgICAgICAgY2FzZSBQcmVkaWN0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1kb3VibGUiOwogICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CiAgICAgICAgICAg
ICByZXR1cm4gInAtc3Ryb25nLW51bWJlciI7CisgICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46
CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvb2xlYW4iOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy10b3AiOwogICAgICAgICB9CkBAIC0yNjMs
OCArMjc2LDEyIEBAIGlubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHIKICAg
ICAgICAgcmV0dXJuICJwLXdlYWstYXJyYXkiOwogICAgIGNhc2UgUHJlZGljdEludDMyOgogICAg
ICAgICByZXR1cm4gInAtd2Vhay1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0RG91YmxlOgorICAg
ICAgICByZXR1cm4gInAtd2Vhay1kb3VibGUiOwogICAgIGNhc2UgUHJlZGljdE51bWJlcjoKICAg
ICAgICAgcmV0dXJuICJwLXdlYWstbnVtYmVyIjsKKyAgICBjYXNlIFByZWRpY3RCb29sZWFuOgor
ICAgICAgICByZXR1cm4gInAtd2Vhay1ib29sZWFuIjsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gInAtd2Vhay10b3AiOwogICAgIH0KQEAgLTMyNiw2ICszNDMsOSBAQCBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsCiAgICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQogICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RDZWxsOwogICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0
YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0Qm9vbGVhbjsKKyAgICAKICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFBy
ZWRpY3RUb3A7CiB9CiAjZW5kaWYKQEAgLTQyMyw2ICs0NDMsMTEgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aykuaXNOdW1iZXIoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkg
JiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKKyAgICB9CisgICAg
CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7CkBAIC00
MzQsNiArNDU5LDEyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29u
c3RhbnQoY29kZUJsb2NrKSk7CiAgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOwogICAgIH0KKyAgICAKKyAgICBib29sIHZhbHVl
T2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBB
U1NFUlQoaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmdldEJvb2xlYW4oKTsKKyAgICB9CiAKICAgICBib29s
IGhhc0xvY2FsKCkKICAgICB7CkBAIC00OTIsMTMgKzUyMywxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgewogICAgICAgICByZXR1cm4gKG9wICYgTm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRK
UzsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNCb29sZWFuUmVzdWx0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdEJvb2xlYW47Cisg
ICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXJzIG9yIGRvdWJsZXMuCiAgICAgYm9vbCBo
YXNOdW1lcmljUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIC8vIFRoaXMgY2hlY2sgd2lsbCBuZWVk
IHVwZGF0aW5nIGlmIG1vcmUgcmVzdWx0IHR5cGVzIGFyZSBhZGRlZC4KLSAgICAgICAgQVNTRVJU
KChoYXNJbnQzMlJlc3VsdCgpIHx8IGhhc0RvdWJsZVJlc3VsdCgpKSA9PSAhaGFzSlNSZXN1bHQo
KSk7Ci0gICAgICAgIHJldHVybiAhaGFzSlNSZXN1bHQoKTsKKyAgICAgICAgcmV0dXJuIGhhc0lu
dDMyUmVzdWx0KCkgfHwgaGFzRG91YmxlUmVzdWx0KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0p1
bXAoKQpAQCAtNTYzLDkgKzU5Nyw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgCiAgICAgICAg
IEFTU0VSVChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBQ
cmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgcHJlZGlj
dGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gU3Ryb25nUHJlZGlj
dGlvblRhZyB8IHByZWRpY3Rpb24gfCBtX29wSW5mbzI7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0g
bV9vcEluZm8yICE9IG5ld1ByZWRpY3Rpb247Ci0gICAgICAgIG1fb3BJbmZvMiB8PSBuZXdQcmVk
aWN0aW9uOworICAgICAgICBtX29wSW5mbzIgPSBuZXdQcmVkaWN0aW9uOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzgsNiArNjc4
LDE0IEBAIFJlZ2lzdGVyU2l6ZWRCb29sZWFuIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCisjaWYg
REZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQordm9pZCBkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSosIHZvaWQqIGRlYnVnSW5mb1JhdykKK3sKKyAg
ICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0PFNw
ZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CisgICAgcHJpbnRmKCJT
cGVjdWxhdGlvbiBmYWlsdXJlIGluICVwIGF0IDB4JXghXG4iLCBkZWJ1Z0luZm8tPmNvZGVCbG9j
aywgZGVidWdJbmZvLT5kZWJ1Z09mZnNldCk7Cit9CisjZW5kaWYKKwogfSAvLyBleHRlcm4gIkMi
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1
LDEwIEBAIGRvdWJsZSBkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKEV4ZWNTdGEKIGludDMyX3Qg
ZGZnQ29udmVydEpTVmFsdWVUb0ludDMyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIFJl
Z2lzdGVyU2l6ZWRCb29sZWFuIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKIAorI2lmIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUK
K3ZvaWQgZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2
b2lkKik7CisjZW5kaWYKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblRyYWNr
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25UcmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJl
ZGljdGlvblRyYWNrZXJfaAorI2RlZmluZSBERkdQcmVkaWN0aW9uVHJhY2tlcl9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFy
cyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJn
dW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisKK3N0cnVjdCBQcmVk
aWN0aW9uU2xvdCB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvblNsb3QoKQorICAgICAgICA6IG1f
dmFsdWUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICBQcmVkaWN0ZWRUeXBlIG1fdmFs
dWU7Cit9OworCitjbGFzcyBQcmVkaWN0aW9uVHJhY2tlciB7CitwdWJsaWM6CisgICAgUHJlZGlj
dGlvblRyYWNrZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIo
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMpCisgICAgICAgIDog
bV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1fdmFyaWFibGVzKG51bVZhcmlh
YmxlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVNpbWlsYXJUbyhj
b25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50
cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgICAgIG1fdmFyaWFibGVz
LnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKKyAgICB9CisgICAgCisgICAgc2l6
ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgp
OyB9CisgICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YWJsZXMuc2l6ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleEZvck9wZXJh
bmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXpl
KCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KKworICAgIGJvb2wgcHJl
ZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24s
IFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJl
ZGljdGlvbihtX2FyZ3VtZW50c1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJl
ZGljdGlvbiwgc291cmNlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChpbnQgb3Bl
cmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkK
KyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAg
ICAgIHJldHVybiBwcmVkaWN0QXJndW1lbnQoYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFu
ZCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+
PSBtX3ZhcmlhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kID49IDAp
OworICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlc1tv
cGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICB7
CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRl
ciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOworICAgICAgICBpZiAoaXRlciA9
PSBtX2dsb2JhbFZhcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIFByZWRpY3Rpb25TbG90IHByZWRp
Y3Rpb25TbG90OworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVByZWRpY3Rpb24ocHJl
ZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
CisgICAgICAgICAgICBtX2dsb2JhbFZhcnMuYWRkKHZhck51bWJlciArIDEsIHByZWRpY3Rpb25T
bG90KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24o
cHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChOb2Rl
JiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rpb24s
IHNvdXJjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6
CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBw
cmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0
QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
UHJlZGljdGVkVHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQgYXJndW1lbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWU7CisgICAg
fQorCisgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQorICAgIHsK
KyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0
dXJuIGdldEFyZ3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5k
KSk7CisgICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlOworICAgICAg
ICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0
R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgeworICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2Jh
bFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxW
YXJzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1
cm4gaXRlci0+c2Vjb25kLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUg
Z2V0UHJlZGljdGlvbihOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLm9w
KSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gZ2V0UHJlZGlj
dGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAg
ICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOworICAg
ICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNl
IEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0Ogor
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0UHJlZGljdGlvbigpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICB9CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsK
KyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX3ZhcmlhYmxlczsKKyAgICBIYXNoTWFw
PHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9nbG9iYWxWYXJzOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdQcmVkaWN0aW9uVHJhY2tlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCwyOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAg
ICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgIHsKKyAgICAgICAgLy8gUHJl
ZGljdGlvbnMgaXMgYSBmb3J3YXJkIGZsb3cgcHJvcGVydHkgdGhhdCBwcm9wYWdhdGVzIHRoZSB2
YWx1ZXMgc2VlbiBhdAorICAgICAgICAvLyBhIHBhcnRpY3VsYXIgdmFsdWUgc291cmNlIHRvIHRo
ZWlyIHZhcmlvdXMgdXNlcywgZW5zdXJpbmcgdGhhdCB1c2VzIHBlcmZvcm0KKyAgICAgICAgLy8g
c3BlY3VsYXRpb24gdGhhdCBkb2VzIG5vdCBjb250cmF2ZW5lIHRoZSBleHBlY3RlZCB2YWx1ZXMu
CiAgICAgICAgIG1fcHJlZGljdGlvbnMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChOb2RlSW5kZXggaSA9IDA7IGkgPCBtX2dyYXBoLnNpemUoKTsgKytpKQorICAgICAgICAK
KyAgICAgICAgLy8gVXNlcyBpcyBhIGJhY2t3YXJkIGZsb3cgcHJvcGVydHkgdGhhdCBwcm9wYWdh
dGVzIHRoZSBoYXJkIGV4cGVjdGF0aW9ucyBhdAorICAgICAgICAvLyBjZXJ0YWluIHVzZXMgdG8g
dGhlaXIgdmFsdWUgc291cmNlcywgZW5zdXJpbmcgdGhhdCBwcmVkaWN0aW9ucyBhYm91dAorICAg
ICAgICAvLyB2YWx1ZXMgZG8gbm90IGNvbnRyYXZlbmUgdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGNv
bWVzIHVwIG9ubHkgaW4gdGhlCisgICAgICAgIC8vIGNhc2VzIG9mIG9idmlvdXMgY2VsbCB1c2Vz
LCBsaWtlIEdldEJ5SWQgYW5kIGZyaWVuZHMgYXMgd2VsbCBhcyBDYWxsLgorICAgICAgICAvLyBX
ZSdyZSBlc3NlbnRpYWxseSBzdGF0aWNhbGx5IHNwZWN1bGF0aW5nIHRoYXQgaWYgdGhlIHZhbHVl
IHByb2ZpbGUgaW5kaWNhdGVzCisgICAgICAgIC8vIHRoYXQgb25seSBib29sZWFucyAoZm9yIGV4
YW1wbGUpIGZsb3cgaW50byBhIEdldEJ5SWQsIHRoZW4gdGhlIHZhbHVlCisgICAgICAgIC8vIHBy
b2ZpbGUgaXMgc2ltcGx5IHdyb25nIGR1ZSB0byBpbnN1ZmZpY2llbnQgY292ZXJhZ2UgYW5kIG5l
ZWRzIHRvIGJlCisgICAgICAgIC8vIGFkanVzdGVkIGFjY29yZGluZ2x5LiBUaGUgYWx0ZXJuYXRp
dmVzIHdvdWxkIGJlIHRvIGFzc3VtZSBlaXRoZXIKKyAgICAgICAgLy8gdGhhdCB0aGUgR2V0QnlJ
ZCBuZXZlciBleGVjdXRlcywgb3IgYWx3YXlzIGV4ZWN1dGVzIG9uIGEgYm9vbGVhbiBsZWFkaW5n
CisgICAgICAgIC8vIHRvIHdoYXRldmVyIGJpemFycmUgYmVoYXZpb3IgdGhhdCdzIHN1cHBvc2Vk
IHRvIGNhdXNlLgorICAgICAgICBtX3VzZXMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAg
ICAgbV92YXJpYWJsZVVzZXMuaW5pdGlhbGl6ZVNpbWlsYXJUbyhtX2dyYXBoLnByZWRpY3Rpb25z
KCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9u
ZTsKKyAgICAgICAgICAgIG1fdXNlc1tpXSA9IFByZWRpY3ROb25lOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIHZvaWQgZml4cG9pbnQoKQpAQCAtNTEsOSArNzAsMTAgQEAgcHVibGljOgog
ICAgICAgICBtX2NvdW50ID0gMDsKICNlbmRpZgogICAgICAgICBkbyB7CisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yd2FyZCBw
cm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQg
YW5kCiAgICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKICAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjQsMzAgKzg0LDMz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgy
KSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOwotICAgICAgICAgICAgaWYg
KCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIERvIGFub3RoZXIgZm9yd2FyZCBwYXNzIGJlY2F1c2UgZm9yd2FyZCBwYXNzZXMg
YXJlIG9uIGF2ZXJhZ2UgbW9yZQotICAgICAgICAgICAgLy8gcHJvZml0YWJsZS4KLSAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwog
ICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
dm9pZCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICBib29sIHNl
dFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgCiAgICAg
ICAgIGlmIChtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSA9PSBwcmVkaWN0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgbV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPSBwcmVkaWN0aW9uOwotICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIGJv
b2wgbWVyZ2VVc2UoTm9kZUluZGV4IG5vZGVJbmRleCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQogICAgIHsKLSAgICAgICAgaWYgKERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNb
bV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0uaGFzUmVzdWx0KCkpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fdXNlc1tub2RlSW5k
ZXhdLCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBE
Rkc6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwgcHJlZGlj
dGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQpA
QCAtOTYsMzMgKzExOSw0NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworCisjaWYgREZHX0RFQlVHX1ZFUkJP
U0UKKyAgICAgICAgcHJpbnRmKCIgICAlc1sldV06ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2Nv
bXBpbGVJbmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6IHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAg
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikp
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVl
LmFzQ2VsbCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xvYmFsRGF0YSwg
Y2VsbCkpCi0gICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24o
UHJlZGljdEFycmF5LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0QXJyYXksIFN0cm9u
Z1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRpY3Rp
b24pKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RCb29sZWFuLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQ
cmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3Vz
ZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9u
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV92YXJpYWJsZVVzZXMucHJlZGljdChub2RlLmxv
Y2FsKCksIG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9u
Z1ByZWRpY3Rpb24pOworCiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBt
X2dyYXBoLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKICAgICAgICAgICAgIGlmIChpc1N0
cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgfD0g
bV9ncmFwaC5wcmVkaWN0KG5vZGUubG9jYWwoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgp
XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGljdGlvbnNbbm9k
ZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBtX3ZhcmlhYmxlVXNl
cy5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtMTM1LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgICAg
ICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMTQ0LDEwICsxODAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIGlm
IChpc051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIG1l
cmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE51
bWJlciwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVtYmVyLCBTdHJvbmdQcmVk
aWN0aW9uKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE1OCwxMSArMTk1LDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJl
ZGljdGlvbihyaWdodCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9u
KGxlZnQpICYmIGlzTnVtYmVyUHJlZGljdGlvbihyaWdodCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQ
cmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwg
U3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJs
ZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlv
bikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTc1LDE1ICsyMTIsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihs
ZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKLSAgICAg
ICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQz
MiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rp
b24pKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1lcmdlUHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aERpdjogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQ
cmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGlj
dGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MTk1LDQ4ICsyMzIsNjAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6CiAgICAg
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVk
aWN0aW9uLCBldmVuIHRob3VnaCB3ZSBlYXNpbHkKLSAgICAgICAgICAgIC8vIGNvdWxkLgotICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQ
cmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdEJvb2xlYW4sIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRCeUlkOgog
ICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNo
aWxkMSgpLCBQcmVkaWN0Q2VsbCB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBub2RlLnByZWRpY3QobV91c2VzW21fY29tcGlsZUluZGV4XSAmIH5QcmVkaWN0
aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQ
cmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAg
IGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0sIFByZWRpY3RDZWxsIHwgU3Ry
b25nUHJlZGljdGlvblRhZyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUucHJlZGljdCht
X3VzZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0
aW9uKTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0
aW9uKCkpKQotICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9u
KCkpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLmdldFBy
ZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwg
U3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX3ZhcmlhYmxlVXNlcy5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1f
dXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rp
b24pOwogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRH
bG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOwogICAgICAgICAgICAgaWYgKGlz
U3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7Ci0gICAgICAgICAgICBtX2NoYW5n
ZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGlj
dGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rp
b24pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3RHbG9iYWxWYXIobm9k
ZS52YXJOdW1iZXIoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSAmIH5QcmVkaWN0aW9u
VGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
VXNlKG5vZGUuY2hpbGQxKCksIG1fdmFyaWFibGVVc2VzLmdldEdsb2JhbFZhclByZWRpY3Rpb24o
bm9kZS52YXJOdW1iZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVj
YXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAg
ICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uo
bm9kZS5jaGlsZDEoKSwgUHJlZGljdENlbGwgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBUaGVzZSBnZXQgaWdu
b3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIERG
Rzo6SnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgUmV0dXJuOgotICAg
ICAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAg
Y2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjU1LDYgKzMwNCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAj
ZW5kaWYKICAgICAgICAgfQorCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRm
KCJleHBlY3QoJXMpIHVzZSglcykgJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rp
b25zW21fY29tcGlsZUluZGV4XSksIHByZWRpY3Rpb25Ub1N0cmluZyhtX3VzZXNbbV9jb21waWxl
SW5kZXhdKSwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKKyNlbmRpZgorICAgICAgICAKKyAg
ICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFn
YXRlRm9yd2FyZCgpCkBAIC0yODMsNiArMzM4LDkgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXgg
bV9jb21waWxlSW5kZXg7CiAgICAgCiAgICAgVmVjdG9yPFByZWRpY3RlZFR5cGUsIDE2PiBtX3By
ZWRpY3Rpb25zOworICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAxNj4gbV91c2VzOworICAgIAor
ICAgIFByZWRpY3Rpb25UcmFja2VyIG1fdmFyaWFibGVVc2VzOwogCiAjaWYgREZHX0RFQlVHX1ZF
UkJPU0UKICAgICB1bnNpZ25lZCBtX2NvdW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0NTk1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw4ICsxMjgsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50SQogCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1h
dENlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRK
U0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6IHsKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CiAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTIyMywxMyArMjI1
LDE0IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZvcm1h
dE5vbmU6Ci0gICAgICAgIC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCisgICAgY2FzZSBE
YXRhRm9ybWF0Tm9uZTogLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERh
dGFGb3JtYXRCb29sZWFuOiAvLyBUaGlzIHR5cGUgbmV2ZXIgb2NjdXJzLgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKKyAgICBj
YXNlIERhdGFGb3JtYXRKUzoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKICAgICAg
ICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhq
c1ZhbHVlR3ByKTsKICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CkBAIC0zNDks
NyArMzUyLDc2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoK
ICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
IHsKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29s
ZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CisgICAgfQor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkR1BS
UmVnOworfQorCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5v
ZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9k
ZUluZGV4XTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyXTsKKworICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKKworICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgeworICAgICAgICAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3By
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oKTsKKyAgICAgICAgICAgIHJldHVybiBncHI7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OworCisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Jvb2xlYW4pIHsKKyAgICAg
ICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCBncHIpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3Vs
YXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsK
KyAgICAgICAgfQorICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0
Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKKyAgICAgICAgR1BSUmVn
IGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJl
dHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKKyAgICAgICAgR1BS
UmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCBncHIpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
LCBncHIsIEludmFsaWRHUFJSZWcpKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJuIGdw
cjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRh
Rm9ybWF0SW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNlIERh
dGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0
YUZvcm1hdENlbGw6IHsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsK
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQpAQCAtNTI4LDcgKzYwMCw3IEBAIGJv
b2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICAgICAgCiAgICAgICAg
IC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCiAg
ICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjEs
NyArNjMzLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIC8vIGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFm
bG93IHdpdGggdmlydHVhbCByZWdpc3RlcnMuCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7
Ci0gICAgICAgICAgICBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEpTVmFs
dWUobV9jb21waWxlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVzdWx0LmdwcigpLCBpc0FycmF5
UHJlZGljdGlvbihwcmVkaWN0aW9uKSA/IERhdGFGb3JtYXRKU0NlbGwgOiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAg
ICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBm
b3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOworICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9y
bWF0SlNCb29sZWFuOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvcm1hdCA9
IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNv
dW50KCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01NzgsNiArNjU5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBib29s
ZWFuKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYm9v
bGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihub2RlLmxvY2FsKCkpKTsKQEAgLTg0MSw2ICs5MjYsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTG9naWNhbE5vdDogewor
ICAgICAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhN
RTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVj
b3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KIApAQCAtODUwLDcgKzk0Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVz
dWx0LmdwcigpKTsKIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ug
c2hvdWxkIHVzZSBpdCBoZXJlLgotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTEyMjcsNyArMTMyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHNjcmF0Y2hSZWcpOwogCiAgICAg
ICAgIHB1dFJlc3VsdC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRj
aFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hSZWcs
IG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiA5NDU5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsOCBAQCBjbGFzcyBT
cGVjdWxhdGl2ZUpJVDsKIC8vIFRoaXMgZW51bSBkZXNjcmliZXMgdGhlIHR5cGVzIG9mIGFkZGl0
aW9uYWwgcmVjb3ZlcnkgdGhhdAogLy8gbWF5IG5lZWQgYmUgcGVyZm9ybWVkIHNob3VsZCBhIHNw
ZWN1bGF0aW9uIGNoZWNrIGZhaWwuCiBlbnVtIFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIHsKLSAg
ICBTcGVjdWxhdGl2ZUFkZAorICAgIFNwZWN1bGF0aXZlQWRkLAorICAgIEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrCiB9OwogCiAvLyA9PT0gU3BlY3VsYXRpb25SZWNvdmVyeSA9PT0KQEAgLTEzMiw4
ICsxMzMsMTEgQEAgcHVibGljOgogICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5v
ZGVJbmRleCk7CiAgICAgRlBSUmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZUluZGV4KTsKICAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4KTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
SklUQ29kZUdlbmVyYXRvcjsKKyAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOwogICAgIHZv
aWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKQEAgLTQwOCw2ICs0MTIsNDcgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCitjbGFzcyBTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQo
U3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGpp
dCkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKElu
dmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CisgICAgCisg
ICAgflNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dw
ck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQtPnVubG9jayhtX2dw
ck9ySW52YWxpZCk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGdw
cigpCisgICAgeworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFu
KGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAgIG1faml0LT51c2UobV9pbmRleCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAgICBOb2RlSW5kZXgg
bV9pbmRleDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7Cit9OworCiAKIC8vID09PSBTcGVj
dWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQ1OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMyLDYgKzIzMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIFJldHVybkFkZHJlc3NQdHIgZXhjZXB0aW9uTG9jYXRpb247CiAgICAgICAgIEpTVmFsdWUg
aG9zdENhbGxSZXR1cm5WYWx1ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGludDY0X3QgZGVi
dWdEYXRhQnVmZmVyWzY0XTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFx
dWVKU0NsYXNzKiwgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNp
b24gOTQ1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI2LDkgKzEyNiwxOCBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlw
dGlvbigpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiPEpTVmFsdWUoKT4i
KTsKICAgICBlbHNlIGlmIChpc0ludDMyKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9u
LCBzaXplLCAiSW50MzI6ICVkIiwgYXNJbnQzMigpKTsKLSAgICBlbHNlIGlmIChpc0RvdWJsZSgp
KQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRvdWJsZTogJWxmIiwgYXNE
b3VibGUoKSk7Ci0gICAgZWxzZSBpZiAoaXNDZWxsKCkpCisgICAgZWxzZSBpZiAoaXNEb3VibGUo
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBz
aXplLCAiRG91YmxlOiAlbGYsICVseCIsIGFzRG91YmxlKCksIHJlaW50ZXJwcmV0RG91YmxlVG9J
bnRwdHIoYXNEb3VibGUoKSkpOworI2Vsc2UKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
ZG91YmxlIGFzRG91YmxlOworICAgICAgICAgICAgdWludDMyX3QgYXNUd29JbnQzMnNbMl07Cisg
ICAgICAgIH0gdTsKKyAgICAgICAgdS5hc0RvdWJsZSA9IGFzRG91YmxlKCk7CisgICAgICAgIHNu
cHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlbGYsICUwOHg6JTA4eCIsIGFzRG91
YmxlKCksIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0pOworI2VuZGlmCisgICAg
fSBlbHNlIGlmIChpc0NlbGwoKSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUs
ICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKICAgICBlbHNlIGlmIChpc1RydWUoKSkKICAgICAgICAg
c25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJUcnVlIik7Cg==
</data>
<flag name="review"
          id="102967"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106531</attachid>
            <date>2011-09-06 18:44:38 -0700</date>
            <delta_ts>2011-09-06 19:46:59 -0700</delta_ts>
            <desc>the patch - fixed a silly bug</desc>
            <filename>dynboolopt_patch_7.diff</filename>
            <type>text/plain</type>
            <size>76994</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ2MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM4IEBA
CisyMDExLTA5LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIEpJVCBkb2VzIG5vdCBvcHRpbWl6ZSBib29sZWFucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2NzAKKworICAgICAgICBSZXZpZXdlZCBieSBH
YXZpbiBCYXJyYWNsb3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBib29sZWFuIHZh
bHVlIHByb2ZpbGluZywgYm9vbGVhbiBwcmVkaWN0aW9uIGluIHRoZSBERkcsCisgICAgICAgIGJv
b2xlYW4gZm9yd2FyZCBmbG93IHByb3BhZ2F0aW9uIGluIHRoZSBERkdQcm9wYWdhdG9yLCBib29s
ZWFuCisgICAgICAgIGRhdGEgZm9ybWF0IGluIERGRyBnZW5lcmF0aW9uIGluZm8sIGFuZCBjb21w
cmVoZW5zaXZlIG9wdGltaXphdGlvbnMKKyAgICAgICAgYmFzZWQgb24gYm90aCBib29sZWFuIHBy
ZWRpY3Rpb24gYW5kIGJvb2xlYW4gZ2VuZXJhdGlvbiBpbmZvLgorICAgICAgICBUaGlzIGlzIGJy
aW5ncyB0aGUgc3BlZWQtdXAgb24gdjgtcmljaGFyZHMgdG8gMTIlLCBhbmQgZ2l2ZXMgc2xpZ2h0
CisgICAgICAgIHNwZWVkLXVwcyBlbHNld2hlcmUgYXMgd2VsbC4KKyAgICAgICAgCisgICAgICAg
IE1ha2luZyB0aGlzIHdvcmsgcmlnaHQgcmVxdWlyZWQgbmF2aWdhdGluZyBzb21lIHN1YnRsZXRp
ZXMgaW4KKyAgICAgICAgdmFsdWUgcHJvZmlsaW5nLiAgU29tZSBmdW5jdGlvbnMgZ2V0IGNvbXBp
bGVkIHdpdGggaW5zdWZmaWNpZW50CisgICAgICAgIGluZm9ybWF0aW9uIGJlY2F1c2Ugc29tZSBp
bXBvcnRhbnQgcGF0aCBvZiB0aGUgZnVuY3Rpb24gbmV2ZXIKKyAgICAgICAgZXhlY3V0ZWQuICBJ
biB0aGVzZSBjYXNlcywgd2Ugd2lzaCB0byBmYWxsIGJhY2sgb24gc3RhdGljCisgICAgICAgIHNw
ZWN1bGF0aW9uLiAgQnV0IHRvIGRvIHNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHByZWRpY3Rp
b25zIHRoYXQKKyAgICAgICAgYXJlIGluaGVyZW50IGluIHRoZSBjb2RlIChsaWtlIHRoYXQgR2V0
QnlJZCBhbG1vc3QgY2VydGFpbmx5IHRha2VzCisgICAgICAgIGEgY2VsbCBvcGVyYW5kKSBhcmUg
cmVmbGVjdGVkIGluIHByZWRpY3Rpb25zIHRoYXQgd2UgbWFrZSBpbgorICAgICAgICBERkdQcm9w
YWdhdG9yLiAgVGh1cywgREZHUHJvcGFnYXRvciBub3cgZG9lcyBib3RoIGJhY2t3YXJkIGFuZAor
ICAgICAgICBmb3J3YXJkIGZsb3csIHVzaW5nIGEgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZCBm
aXhwb2ludC4KKyAgICAgICAgCisgICAgICAgIFRoZSBiYWNrd2FyZCBmbG93IGluIERGR1Byb3Bh
Z2F0b3IgaXMgYSBzZXBhcmF0ZSBzdGF0aWMgYW5hbHlzaXMsCisgICAgICAgIGFuZCBuZWVkcyB0
byBrZWVwIGEgc2V0IG9mIGJhY2t3YXJkIGZsb3cgYWJzdHJhY3QgdmFsdWVzIGZvcgorICAgICAg
ICB2YXJpYWJsZXMsIGFyZ3VtZW50cywgYW5kIGdsb2JhbHMuICBUbyBtYWtlIHRoaXMgZWFzeSwg
dGhpcyBwYXRjaAorICAgICAgICBmYWN0b3JzIG91dCBERkdHcmFwaCdzIHByZWRpY3Rpb24gdHJh
Y2tpbmcgY2FwYWJpbGl0eSBpbnRvCisgICAgICAgIERGR1ByZWRpY3Rpb25UcmFja2VyLCB3aGlj
aCBub3cgZ2V0cyB1c2VkIGJ5IGJvdGggREZHR3JhcGggKGZvcgorICAgICAgICBmb3J3YXJkIGZs
b3cgcHJlZGljdGlvbnMpIGFuZCBERkdQcm9wYWdhdG9yIChmb3IgYmFja3dhcmQgZmxvdworICAg
ICAgICBwcmVkaWN0aW9ucykuICBCYWNrd2FyZCBmbG93IHByZWRpY3Rpb25zIGV2ZW50dWFsbHkg
Z2V0IG1lcmdlZAorICAgICAgICBpbnRvIGZvcndhcmQgZmxvdyBvbmVzLCBidXQgdGhlIHR3byBh
cmUgbm90IGVxdWl2YWxlbnQ6IGEgZm9yd2FyZAorICAgICAgICBmbG93IHByZWRpY3Rpb24gaXMg
YSBzdXBlcnNldCBvZiB0aGUgYmFja3dhcmQgZmxvdyBwcmVkaWN0aW9uLgorICAgICAgICAKKyAg
ICAgICAgRGVidWdnaW5nIHRoZXNlIHByZWRpY3Rpb24gaXNzdWVzIHJlcXVpcmVkIGEgYmV0dGVy
IHVuZGVyc3RhbmRpbmcKKyAgICAgICAgb2Ygd2hlcmUgd2UgZmFpbCBzcGVjdWxhdGlvbiwgYW5k
IHdoYXQgb3VyIHZhbHVlIHByZWRpY3Rpb25zIGxvb2sKKyAgICAgICAgbGlrZS4gIFRoaXMgcGF0
Y2ggYWxzbyBhZGRzIG9wdGlvbmFsIHZlcmJvc2Ugc3BlY3VsYXRpb24gZmFpbHVyZQorICAgICAg
ICAoc28gYW4gaW5mb3JtYXRpdmUgcHJpbnRmIGZpcmVzIHdoZW5ldmVyIHNwZWN1bGF0aW9uIGZh
aWx1cmUgb2NjdXJzKQorICAgICAgICBhbmQgc2xpZ2h0IGltcHJvdmVtZW50cyB0byB0aGUgdmVy
Ym9zaXR5IGluIG90aGVyIHBsYWNlcy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMpOgorICAg
ICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnByb2JhYmlsaXR5T2ZCb29sZWFuKToKKyAgICAgICAg
KEpTQzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpj
b21wdXRlU3RhdGlzdGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRv
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24pOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBo
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGlj
dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRpY3Rpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjp2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVl
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90SW50ZWdl
cik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bkJvb2xlYW4p
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZW1pdEJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6aXNCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRp
dmVUb05vblNwZWN1bGF0aXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlu
ayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmRlYnVnQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmlzQm9vbGVhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFs
dWVPZkJvb2xlYW5Db25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjppc0Jvb2xlYW5QcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVk
aWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlUHJlZGljdGlvbnMpOgor
ICAgICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjppc0Jvb2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVP
ZkJvb2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQm9vbGVhblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTnVtZXJpY1Jlc3VsdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25UcmFja2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Om9wZXJhbmRJ
c0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uU2xvdDo6UHJlZGljdGlv
blNsb3QpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpQcmVkaWN0aW9u
VHJhY2tlcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxp
emVTaW1pbGFyVG8pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFja2VyOjpudW1i
ZXJPZkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6Om51
bWJlck9mVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6
YXJndW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25U
cmFja2VyOjpwcmVkaWN0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25U
cmFja2VyOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uVHJhY2tlcjo6
cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRyYWNrZXI6
OmdldEFyZ3VtZW50UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblRy
YWNrZXI6OmdldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25UcmFj
a2VyOjpnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0
b3I6Om1lcmdlVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVByZWRp
Y3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjpTcGVjdWxhdGVC
b29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQ6On5TcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVC
b29sZWFuT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZDo6dXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmRlc2NyaXB0
aW9uKToKKwogMjAxMS0wOS0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciByOTQ1NTkuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiA5NDYxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZkJvb2xlYW5zKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSAmJiBKU1ZhbHVlOjpkZWNvZGUoYnVj
a2V0c1tpXSkuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgICAgIAogICAgIC8vIFRoZXNl
IG1ldGhvZHMgYXJlIG5vdCBwYXJ0aWN1bGFybHkgb3B0aW1pemVkLCBpbiB0aGF0IHRoZXkgd2ls
bCBlYWNoCiAgICAgLy8gcGVyZm9ybSB0d28gcGFzc2VzIG92ZXIgdGhlIGJ1Y2tldHMgYXJyYXku
IEhvd2V2ZXIsIHRoZXkgYXJlCkBAIC0xNDIsMTcgKzE1MiwyMyBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZB
cnJheXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBw
cm9iYWJpbGl0eU9mQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0
ZVByb2JhYmlsaXR5KG51bWJlck9mQm9vbGVhbnMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOworICAg
IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoRklMRSogb3V0KQogICAgIHsKICAg
ICAgICAgZnByaW50ZihvdXQsCi0gICAgICAgICAgICAgICAgInNhbXBsZXMgPSAldSwgaW50MzIg
PSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkgPSAldSIsCisgICAgICAgICAgICAg
ICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSAoJXUpLCBkb3VibGUgPSAldSAoJXUpLCBjZWxs
ID0gJXUgKCV1KSwgYXJyYXkgPSAldSAoJXUpLCBib29sZWFuID0gJXUgKCV1KSIsCiAgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnQz
MnMoKSwKLSAgICAgICAgICAgICAgICBudW1iZXJPZkRvdWJsZXMoKSwKLSAgICAgICAgICAgICAg
ICBudW1iZXJPZkNlbGxzKCksCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZBcnJheXMoKSk7Cisg
ICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkludDMyKCksIG51bWJlck9mSW50MzJzKCksCisg
ICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkRvdWJsZSgpLCBudW1iZXJPZkRvdWJsZXMoKSwK
KyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQ2VsbCgpLCBudW1iZXJPZkNlbGxzKCksCisg
ICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkFycmF5KCksIG51bWJlck9mQXJyYXlzKCksCisg
ICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkJvb2xlYW4oKSwgbnVtYmVyT2ZCb29sZWFucygp
KTsKICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewogICAgICAgICAgICAgaWYgKCEhYnVja2V0
c1tpXSB8fCAhIXdlYWtCdWNrZXRzW2ldKSB7CkBAIC0xNzgsMTYgKzE5NCwxOCBAQCBzdHJ1Y3Qg
VmFsdWVQcm9maWxlIHsKICAgICAgICAgdW5zaWduZWQgZG91YmxlczsKICAgICAgICAgdW5zaWdu
ZWQgY2VsbHM7CiAgICAgICAgIHVuc2lnbmVkIGFycmF5czsKKyAgICAgICAgdW5zaWduZWQgYm9v
bGVhbnM7CiAgICAgfTsKIAogICAgIC8vIE9wdGltaXplZCBtZXRob2QgZm9yIGdldHRpbmcgYWxs
IGNvdW50cyBhdCBvbmNlLgogICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAogICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgc2FtcGxlcyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGludDMycyAgPSAwOwot
ICAgICAgICB1bnNpZ25lZCBkb3VibGVzID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2VsbHMgICA9
IDA7Ci0gICAgICAgIHVuc2lnbmVkIGFycmF5cyAgPSAwOworICAgICAgICB1bnNpZ25lZCBzYW1w
bGVzICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludDMycyAgID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgZG91YmxlcyAgPSAwOworICAgICAgICB1bnNpZ25lZCBjZWxscyAgICA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGFycmF5cyAgID0gMDsKKyAgICAgICAgdW5zaWduZWQgYm9vbGVhbnMgPSAwOwog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0
czsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWJ1Y2tldHNbaV0pIHsKQEAgLTIxMywxNCArMjMx
LDE2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgICAgIGNlbGxzKys7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheSgmZ2xvYmFsRGF0YSwgdmFsdWUuYXNDZWxsKCkp
KQogICAgICAgICAgICAgICAgICAgICBhcnJheXMrKzsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgYm9vbGVh
bnMrKzsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzID0g
c2FtcGxlczsKLSAgICAgICAgc3RhdGlzdGljcy5pbnQzMnMgID0gaW50MzJzOwotICAgICAgICBz
dGF0aXN0aWNzLmRvdWJsZXMgPSBkb3VibGVzOwotICAgICAgICBzdGF0aXN0aWNzLmNlbGxzICAg
PSBjZWxsczsKLSAgICAgICAgc3RhdGlzdGljcy5hcnJheXMgID0gYXJyYXlzOworICAgICAgICBz
dGF0aXN0aWNzLnNhbXBsZXMgID0gc2FtcGxlczsKKyAgICAgICAgc3RhdGlzdGljcy5pbnQzMnMg
ICA9IGludDMyczsKKyAgICAgICAgc3RhdGlzdGljcy5kb3VibGVzICA9IGRvdWJsZXM7CisgICAg
ICAgIHN0YXRpc3RpY3MuY2VsbHMgICAgPSBjZWxsczsKKyAgICAgICAgc3RhdGlzdGljcy5hcnJh
eXMgICA9IGFycmF5czsKKyAgICAgICAgc3RhdGlzdGljcy5ib29sZWFucyA9IGJvb2xlYW5zOwog
ICAgIH0KICAgICAKICAgICBpbnQgYnl0ZWNvZGVPZmZzZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDk0NjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSwxMSArNDc1LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IG1fcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEFTU0VS
VChwcm9maWxlKTsKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAgICBwcmludGYoIkR5bmFt
aWMgcHJlZGljdGlvbiBbJXUsICV1XTogIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgcHJpbnRmKCJEeW5hbWljIHByb2ZpbGUgWyV1LCAldV06ICIsIG5vZGVJbmRleCwgYnl0
ZWNvZGVJbmRleCk7CiAgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKICAgICAgICAgcHJp
bnRmKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0KG1h
a2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9maWxlKSwgU3Ryb25nUHJlZGljdGlvbik7
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjog
JXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW25vZGVJbmRleF0uZ2V0UHJlZGljdGlv
bigpKSk7CisjZW5kaWYKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShub2RlSW5kZXgpOwog
ICAgICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5NDYxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsMTEgKzQyLDEzIEBAIGVudW0gRGF0YUZvcm1hdCB7CiAgICAgRGF0YUZvcm1h
dE5vbmUgPSAwLAogICAgIERhdGFGb3JtYXRJbnRlZ2VyID0gMSwKICAgICBEYXRhRm9ybWF0RG91
YmxlID0gMiwKLSAgICBEYXRhRm9ybWF0Q2VsbCA9IDMsCisgICAgRGF0YUZvcm1hdEJvb2xlYW4g
PSAzLAorICAgIERhdGFGb3JtYXRDZWxsID0gNCwKICAgICBEYXRhRm9ybWF0SlMgPSA4LAogICAg
IERhdGFGb3JtYXRKU0ludGVnZXIgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50ZWdlciwK
ICAgICBEYXRhRm9ybWF0SlNEb3VibGUgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0RG91Ymxl
LAogICAgIERhdGFGb3JtYXRKU0NlbGwgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0Q2VsbCwK
KyAgICBEYXRhRm9ybWF0SlNCb29sZWFuID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdEJvb2xl
YW4KIH07CiAKICNpZm5kZWYgTkRFQlVHCkBAIC02MSw2ICs2Myw4IEBAIGlubGluZSBjb25zdCBj
aGFyKiBkYXRhRm9ybWF0VG9TdHJpbmcoRGEKICAgICAgICAgcmV0dXJuICJEb3VibGUiOwogICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6CiAgICAgICAgIHJldHVybiAiQ2VsbCI7CisgICAgY2FzZSBE
YXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJCb29sZWFuIjsKICAgICBjYXNlIERh
dGFGb3JtYXRKUzoKICAgICAgICAgcmV0dXJuICJKUyI7CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJ
bnRlZ2VyOgpAQCAtNjksNiArNzMsOCBAQCBpbmxpbmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRv
U3RyaW5nKERhCiAgICAgICAgIHJldHVybiAiSlNEb3VibGUiOwogICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKICAgICAgICAgcmV0dXJuICJKU0NlbGwiOworICAgIGNhc2UgRGF0YUZvcm1hdEpT
Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJKU0Jvb2xlYW4iOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiAiVW5rbm93biI7CiAgICAgfQpAQCAtODgsNiArOTQsNyBAQCBpbmxpbmUgYm9v
bCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRl
Z2VyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpT
Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgICAgIHN3aXRjaCAodG8p
IHsKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKICAgICAgICAgY2FzZSBEYXRhRm9y
bWF0RG91YmxlOgpAQCAtOTcsMTEgKzEwNCwxNCBAQCBpbmxpbmUgYm9vbCBuZWVkRGF0YUZvcm1h
dENvbnZlcnNpb24oRGF0CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKICAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2Vs
bDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyBE
YXRhRm9ybWF0Qm9vbGVhbiwgd2hpY2ggaXMgY3VycmVudGx5IHVudXNlZC4KICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgICAg
Ly8gVGhpcyBjYXB0dXJlcyBEYXRhRm9ybWF0Qm9vbGVhbiwgd2hpY2ggaXMgY3VycmVudGx5IHVu
dXNlZC4KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDk0NjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDggKzUyLDEwIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5v
ZGVJbmRleCwgQ28KICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKICAgICB1bnNpZ25lZCBy
ZWZDb3VudCA9IG5vZGUucmVmQ291bnQoKTsKLSAgICBpZiAoIXJlZkNvdW50KQorICAgIGlmICgh
cmVmQ291bnQpIHsKKyAgICAgICAgcHJpbnRmKCIlIDRkOlx0c2tpcHBlZCAlc1xuIiwgKGludClu
b2RlSW5kZXgsIG9wTmFtZShvcCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgIGJvb2wg
bXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKICAgICBpZiAobXVzdEdlbmVyYXRl
KQogICAgICAgICAtLXJlZkNvdW50OwpAQCAtMTkzLDE0ICsxOTUsMTQgQEAgdm9pZCBHcmFwaDo6
cmVmQ2hpbGRyZW4oTm9kZUluZGV4IG9wKQogdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlw
ZXMoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoZXhl
YykgewotICAgICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgp
KTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9wcmVkaWN0aW9ucy5udW1iZXJPZkFyZ3VtZW50
cygpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IG51bWJl
ck9mQXJndW1lbnRzOyArK2FyZykgewogICAgICAgICAgICAgSlNWYWx1ZSBhcmd1bWVudFZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoYXJnIC0gMSk7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRWYWx1
ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10u
bV92YWx1ZSB8PSBQcmVkaWN0SW50MzI7CisgICAgICAgICAgICAgICAgbV9wcmVkaWN0aW9ucy5w
cmVkaWN0QXJndW1lbnQoYXJnLCBQcmVkaWN0SW50MzIsIFdlYWtQcmVkaWN0aW9uKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50VmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgICAg
ICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7Cisg
ICAgICAgICAgICAgICAgbV9wcmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBQcmVkaWN0
RG91YmxlLCBXZWFrUHJlZGljdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yMjIs
MTAgKzIyNCwxMCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhCiAg
ICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgbWVyZ2VQcmVk
aWN0aW9uKG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KGdsb2JhbERhdGEsICpwcm9maWxlKSk7CisgICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFy
Z3VtZW50KGFyZywgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUpICYgflByZWRp
Y3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAgICAgCiAjaWYgREZHX0RFQlVH
X1ZFUkJPU0UKLSAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rp
b25Ub1N0cmluZyhtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlKSk7CisgICAgICAg
IHByaW50ZigiICAgIFByZWRpY3Rpb246ICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9wcmVk
aWN0aW9ucy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkpOwogI2VuZGlmCiAgICAgfQogI2Vs
c2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NjE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJE
RkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblRyYWNrZXIuaCIKICNpbmNsdWRlICJS
ZWdpc3RlckZpbGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTQyLDE4ICs0Myw2IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNl
IERGRyB7CiAKLS8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9y
YXJpZXMgZnJvbSBhcmd1bWVudHMuCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KLQotc3RydWN0IFByZWRpY3Rpb25TbG90
IHsKLXB1YmxpYzoKLSAgICBQcmVkaWN0aW9uU2xvdCgpCi0gICAgICAgIDogbV92YWx1ZShQcmVk
aWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIFByZWRpY3RlZFR5cGUgbV92YWx1ZTsKLX07Ci0K
IHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKIAogLy8gRm9yIGV2ZXJ5IGxvY2FsIHZhcmlh
YmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4KQEAgLTEw
Myw4ICs5Miw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKIGNsYXNzIEdyYXBoIDogcHVibGljIFZl
Y3RvcjxOb2RlLCA2ND4gewogcHVibGljOgogICAgIEdyYXBoKHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgICAgICA6IG1fYXJndW1lbnRQcmVkaWN0aW9u
cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV92YXJpYWJsZVByZWRpY3Rpb25zKG51bVZhcmlh
YmxlcykKKyAgICAgICAgOiBtX3ByZWRpY3Rpb25zKG51bUFyZ3VtZW50cywgbnVtVmFyaWFibGVz
KQogICAgIHsKICAgICB9CiAKQEAgLTEzNSw3MCArMTIzLDM1IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiAqbV9ibG9ja3NbYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlQmVnaW4pXTsKICAgICB9Ci0KKyAgICAKKyAgICBQcmVkaWN0aW9uVHJhY2tlciYgcHJlZGlj
dGlvbnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnM7CisgICAgfQorICAg
IAogICAgIGJvb2wgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
LCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVy
YW5kICsgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1
bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0
aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCh1bnNpZ25l
ZClvcGVyYW5kID49IG1fdmFyaWFibGVQcmVkaWN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChvcGVyYW5kID49IDApOwotICAgICAgICAgICAgbV92YXJpYWJsZVByZWRpY3Rpb25z
LnJlc2l6ZShvcGVyYW5kICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUs
IG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9ucy5wcmVkaWN0KG9wZXJhbmQsIHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewotICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2dsb2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVyICsgMSk7Ci0gICAgICAgIGlmIChp
dGVyID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgIFByZWRp
Y3Rpb25TbG90IHByZWRpY3Rpb25TbG90OwotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJn
ZVByZWRpY3Rpb24ocHJlZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGlj
dGlvbiwgc291cmNlKSk7Ci0gICAgICAgICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2
YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9uU2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRl
ci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwor
ICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5wcmVkaWN0R2xvYmFsVmFyKHZhck51bWJlciwg
cHJlZGljdGlvbiwgc291cmNlKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBwcmVkaWN0KE5vZGUm
IG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2Up
CiAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwg
c291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
LSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIHBy
ZWRpY3Rpb24sIHNvdXJjZSk7Ci0gICAgICAgIGNhc2UgR2V0QnlJZDoKLSAgICAgICAgY2FzZSBH
ZXRNZXRob2Q6Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgIGNhc2UgQ2FsbDoKLSAg
ICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHBy
ZWRpY3Rpb24sIHNvdXJjZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMucHJlZGljdChu
b2RlLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgIH0KIAogICAgIFByZWRpY3RlZFR5cGUgZ2V0
UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5k
ICsgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJn
dW1lbnRdLm1fdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5k
IDwgbV92YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3Zh
cmlhYmxlUHJlZGljdGlvbnNbb3BlcmFuZF0ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuIFByZWRp
Y3ROb25lOworICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXRQcmVkaWN0aW9uKG9wZXJh
bmQpOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRpY3Rp
b24odW5zaWduZWQgdmFyTnVtYmVyKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
UHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5m
aW5kKHZhck51bWJlciArIDEpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhclByZWRp
Y3Rpb25zLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgICAgICBy
ZXR1cm4gaXRlci0+c2Vjb25kLm1fdmFsdWU7CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25z
LmdldEdsb2JhbFZhclByZWRpY3Rpb24odmFyTnVtYmVyKTsKICAgICB9CiAgICAgCiAgICAgUHJl
ZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKE5vZGUmIG5vZGUpCkBAIC0yMTEsMjAgKzE2NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFZhbHVlVG9JbnQzMikKICAgICAg
ICAgICAgIG5vZGVQdHIgPSAmKCp0aGlzKVtub2RlUHRyLT5jaGlsZDEoKV07CiAgICAgICAgIAot
ICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPm9wKSB7Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0g
ICAgICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihub2RlUHRyLT5sb2NhbCgpKTsKLSAgICAg
ICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0R2xvYmFsVmFyUHJl
ZGljdGlvbihub2RlUHRyLT52YXJOdW1iZXIoKSk7Ci0gICAgICAgIGNhc2UgR2V0QnlJZDoKLSAg
ICAgICAgY2FzZSBHZXRNZXRob2Q6Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgIGNh
c2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbm9k
ZVB0ci0+Z2V0UHJlZGljdGlvbigpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIFByZWRpY3ROb25lOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25z
LmdldFByZWRpY3Rpb24oKm5vZGVQdHIpOwogICAgIH0KICAgICAKICAgICAvLyBIZWxwZXIgbWV0
aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgpAQCAtMjQ0LDYgKzE4NCwxMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJsZUNvbnN0
YW50KGNvZGVCbG9jayk7CiAgICAgfQorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1
cm4gYXQobm9kZUluZGV4KS5pc0Jvb2xlYW5Db25zdGFudChjb2RlQmxvY2spOworICAgIH0KICAg
ICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCiAgICAg
SlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4
IG5vZGVJbmRleCkKICAgICB7CkBAIC0yNTcsNiArMjAxLDEwIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZEb3VibGVDb25zdGFudChjb2RlQmxv
Y2spOwogICAgIH0KKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQo
bm9kZUluZGV4KS52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQogCiAj
aWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOwpA
QCAtMjcxLDkgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3Vu
dCBnb2VzIGZyb20gMCB0byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBh
bGwgb2YgaXRzIGNoaWxkcmVuLCBhbmQgdmljZSB2ZXJzYS4KICAgICB2b2lkIHJlZkNoaWxkcmVu
KE5vZGVJbmRleCk7CiAKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50
UHJlZGljdGlvbnM7Ci0gICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZVBy
ZWRpY3Rpb25zOwotICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90PiBtX2dsb2Jh
bFZhclByZWRpY3Rpb25zOworICAgIFByZWRpY3Rpb25UcmFja2VyIG1fcHJlZGljdGlvbnM7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk0NjE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6Zmls
bEludGVnZXIoTm9kCiAgICAgY2FzZSBEYXRhRm9ybWF0SlM6CiAgICAgY2FzZSBEYXRhRm9ybWF0
Q2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9v
bGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgICAgIC8vIFNob3VsZCBv
bmx5IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBi
ZSBpbnRlZ2VyLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtMTUzLDYgKzE1
NSw4IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAg
Ly8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgog
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUg
Y2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIG51bWVy
aWMuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0yOTUsMTEgKzI5OSwxNiBA
QCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9kCiAgICAgY2FzZSBEYXRh
Rm9ybWF0SlM6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgogICAgIGNhc2UgRGF0YUZv
cm1hdEpTRG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDogeworICAgIGNhc2UgRGF0
YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKICAgICAgICAg
R1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRCb29s
ZWFuOgorICAgICAgICAvLyB0aGlzIHR5cGUgY3VycmVudGx5IG5ldmVyIG9jY3VycworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTQwNiw5ICs0MTUsMjYgQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90
SW50ZWdlcgogICAgIAogICAgIHJldHVybiAoaW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0YUZv
cm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUKICAgICAgICAgfHwgKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTQ2VsbAorICAgICAgICB8fCAo
aW5mby5yZWdpc3RlckZvcm1hdCgpIHwgRGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNCb29s
ZWFuCiAgICAgICAgIHx8IChub2RlLmlzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KS5pc0ludDMyKCkpOwogfQogCitib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25v
d25Cb29sZWFuKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0
LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICBpZiAobm9kZS5oYXNCb29sZWFuUmVzdWx0KCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpc0Jvb2xlYW5Db25zdGFudChub2Rl
SW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAKKyAg
ICByZXR1cm4gKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZv
cm1hdEpTQm9vbGVhbgorICAgICAgICB8fCAoaW5mby5zcGlsbEZvcm1hdCgpIHwgRGF0YUZvcm1h
dEpTKSA9PSBEYXRhRm9ybWF0SlNCb29sZWFuOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUbywg
dHlwZW5hbWUgRnJvbT4KIGlubGluZSBUbyBzYWZlQ2FzdChGcm9tIHZhbHVlKQogewpAQCAtNTg4
LDcgKzYxNCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KICAg
ICB9CiAgICAgCiAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3Vs
dEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4
LCBib29sIGludmVydCkKQEAgLTc0Myw3ICs3NjksNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlTm9uCiAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24s
IHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgs
IERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTc3Nyw3ICs4MDMsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwogICAgIH0KIH0KIApAQCAtOTM5LDcgKzk2NSw3IEBAIHZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KICAgICAgICAgZG9uZTIubGluaygmbV9qaXQp
OwogICAgIH0KICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogfQogCiBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlU3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCkBAIC05NjgsMzEgKzk5NCw2MyBA
QCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRCcmFuY2goTm9kZSYgCiAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIHZhbHVlLnVzZSgpOwot
ICAgIAogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JC
eXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5v
ZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLQotICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6Oklt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIG5vdFRha2VuKTsKLSAgICBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVl
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCB0YWtlbik7Ci0gICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBu
b3RUYWtlbik7Ci0gICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSksIHRha2VuKTsKICAgICAKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwotICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7Ci0gICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRm
Z0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybzsKKyAgICAgICAgCisgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEp
KSB7CisgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICB0YWtlbiA9IG5vdFRh
a2VuOworICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwg
VHJ1c3RlZEltbTMyKHRydWUpKSwgdGFrZW4pOworICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1f
YmxvY2sgKyAxKSkKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2Vu
KTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgYm9vbCBwcmVkaWN0
Qm9vbGVhbiA9IGlzQm9vbGVhblByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9u
KG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV0pKTsKICAgICAKLSAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiksIHRha2Vu
KTsKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNo
KG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsK
KyAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRha2VuKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1faXNTcGVjdWxhdGl2ZSAmJiBwcmVkaWN0
Qm9vbGVhbikgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5qdW1wKCkpOwor
ICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpLCBu
b3RUYWtlbik7CisgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpLCB0YWtlbik7CisgICAgCisgICAgICAgICAgICBpZiAoIXByZWRpY3RCb29sZWFuKSB7
CisgICAgICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRh
a2VuKTsKKyAgICAgICAgICAgIH0KICAgICAKLSAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOwor
ICAgIAorICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAgICAgICAgICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIpLCB0YWtl
bik7CisgICAgICAgICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKKyAgICAgICAg
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworICAgIH0KIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bChOb2RlJiBub2RlKQpAQCAtMTA4MSw2ICsxMTM5LDEyIEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dD
YWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhd
LmV4Y2VwdGlvbkluZm8pOwogfQogCit2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9u
Q2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3sKKyAgICBBU1NFUlQobV9p
c1NwZWN1bGF0aXZlKTsKKyAgICBzdGF0aWNfY2FzdDxTcGVjdWxhdGl2ZUpJVCo+KHRoaXMpLT5z
cGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwpOworfQorCiAjaWZuZGVmIE5ERUJVRwogc3RhdGlj
IGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3JtYXQpCiB7CkBAIC0x
Mjg3LDYgKzEzNTEsMTYgQEAgR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVy
YQogICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwogfQogCitHUFJUZW1wb3Jhcnk6
OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQor
eworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9
IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2pp
dC0+YWxsb2NhdGUoKTsKK30KKwogR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdl
bmVyYXRvciogaml0LCBKU1ZhbHVlT3BlcmFuZCYgb3AxKQogICAgIDogbV9qaXQoaml0KQogICAg
ICwgbV9ncHIoSW52YWxpZEdQUlJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDYxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOwogY2xhc3MgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZDsK
IGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOworY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQ7CiAKIAogLy8gPT09IEpJVENvZGVHZW5lcmF0b3IgPT09CkBAIC00MTAsMTQgKzQxMSwxOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2RlSW5kZXgp
OwogCisgICAgYm9vbCBpc0tub3duQm9vbGVhbihOb2RlSW5kZXgpOworICAgIAogICAgIC8vIENo
ZWNrcy9hY2Nlc3NvcnMgZm9yIGNvbnN0YW50IHZhbHVlcy4KICAgICBib29sIGlzQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNDb25zdGFudChub2RlSW5kZXgp
OyB9CiAgICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzSW50MzJDb25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0ludDMyQ29uc3RhbnQobm9k
ZUluZGV4KTsgfQogICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KSB7IHJldHVybiBtX2ppdC5pc0RvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29s
IGlzQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0Lmlz
Qm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5v
ZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZEb3VibGVDb25zdGFudChu
b2RlSW5kZXgpOyB9CiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KSB7IHJldHVybiBtX2ppdC52YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOyB9Cisg
ICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0
dXJuIG1faml0LnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wg
aXNOdWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIGlmICgh
aXNDb25zdGFudChub2RlSW5kZXgpKQpAQCAtNTc1LDYgKzU4MCw4IEBAIHByb3RlY3RlZDoKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBlbWl0Q2FsbChOb2RlJik7CisgICAgCisgICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwogCiAgICAgLy8g
Q2FsbGVkIG9uY2UgYSBub2RlIGhhcyBjb21wbGV0ZWQgY29kZSBnZW5lcmF0aW9uIGJ1dCBwcmlv
ciB0byBzZXR0aW5nCiAgICAgLy8gaXRzIHJlc3VsdCwgdG8gZnJlZSB1cCBpdHMgY2hpbGRyZW4u
IChUaGlzIG11c3QgaGFwcGVuIHByaW9yIHRvIHNldHRpbmcKQEAgLTExMjEsNiArMTEyOCw3IEBA
IHB1YmxpYzoKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIEludGVnZXJPcGVy
YW5kJik7CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBJbnRlZ2VyT3BlcmFu
ZCYsIEludGVnZXJPcGVyYW5kJik7CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3Iq
LCBTcGVjdWxhdGVDZWxsT3BlcmFuZCYpOworICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJh
dG9yKiwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29k
ZUdlbmVyYXRvciosIEpTVmFsdWVPcGVyYW5kJik7CiAKICAgICB+R1BSVGVtcG9yYXJ5KCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiA5NDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsMjMgKzQ4OCw0NSBAQCB2b2lkIEpJVENvbXBpbGVy
OjpqdW1wRnJvbVNwZWN1bGF0aXZlVG9OCiAjaWYgREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElP
Tl9GQUlMVVJFCiAgICAgYnJlYWtwb2ludCgpOwogI2VuZGlmCisgICAgCisjaWYgREZHX1ZFUkJP
U0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyog
ZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0lu
Zm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQg
PSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCiAKICAgICAvLyBEb2VzIHRo
aXMgc3BlY3VsYXRpb24gY2hlY2sgcmVxdWlyZSBhbnkgYWRkaXRpb25hbCByZWNvdmVyeSB0byBi
ZSBwZXJmb3JtZWQsCiAgICAgLy8gdG8gcmVzdG9yZSBhbnkgc3RhdGUgdGhhdCBoYXMgYmVlbiBv
dmVyd3JpdHRlbiBiZWZvcmUgd2UgZW50ZXIgYmFjayBpbiB0byB0aGUKICAgICAvLyBub24tc3Bl
Y3VsYXRpdmUgcGF0aC4KICAgICBpZiAocmVjb3ZlcnkpIHsKLSAgICAgICAgLy8gVGhlIG9ubHkg
YWRkaXRpb25hbCByZWNvdmVyeSB3ZSBjdXJyZW50bHkgc3VwcG9ydCBpcyBmb3IgaW50ZWdlciBh
ZGQgb3BlcmF0aW9uCi0gICAgICAgIEFTU0VSVChyZWNvdmVyeS0+dHlwZSgpID09IFNwZWN1bGF0
aXZlQWRkKTsKLSAgICAgICAgQVNTRVJUKGNoZWNrLm1fZ3BySW5mb1tHUFJJbmZvOjp0b0luZGV4
KHJlY292ZXJ5LT5kZXN0KCkpXS5ub2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAgICAgLy8gUmV2
ZXJ0IHRoZSBhZGQuCi0gICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRl
c3QoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiByZWNvdmVyeS0+ZGVzdCgpIHNob3VsZCBo
YXZlIGJlZW4gYm94ZWQgcHJpb3IgdG8gdGhlIGFkZGl0aW9uLCB0aGVuIHJlYm94Ci0gICAgICAg
IC8vIGl0LgotICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCA9IGNoZWNrLm1fZ3BySW5mb1tHUFJJ
bmZvOjp0b0luZGV4KHJlY292ZXJ5LT5kZXN0KCkpXS5mb3JtYXQ7Ci0gICAgICAgIEFTU0VSVChm
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVn
ZXIgfHwgZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7Ci0gICAgICAgIGlmIChmb3JtYXQgIT0gRGF0
YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDogeworICAgICAgICAgICAgQVNT
RVJUKGNoZWNrLm1fZ3BySW5mb1tHUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LT5kZXN0KCkpXS5u
b2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIC8vIFJldmVydCB0aGUgYWRkLgorICAg
ICAgICAgICAgc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gSWYgcmVjb3ZlcnktPmRlc3QoKSBzaG91bGQgaGF2ZSBi
ZWVuIGJveGVkIHByaW9yIHRvIHRoZSBhZGRpdGlvbiwgdGhlbiByZWJveAorICAgICAgICAgICAg
Ly8gaXQuCisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCA9IGNoZWNrLm1fZ3BySW5mb1tH
UFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LT5kZXN0KCkpXS5mb3JtYXQ7CisgICAgICAgICAgICBB
U1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0
SlNJbnRlZ2VyIHx8IGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgaWYgKGZv
cm1hdCAhPSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBvclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5TcGVj
dWxhdGlvbkNoZWNrOiB7CisgICAgICAgICAgICBBU1NFUlQoY2hlY2subV9ncHJJbmZvW0dQUklu
Zm86OnRvSW5kZXgocmVjb3ZlcnktPmRlc3QoKSldLm5vZGVJbmRleCAhPSBOb05vZGUpOworICAg
ICAgICAgICAgLy8gUmVib3ggdGhlIChub24tKWJvb2xlYW4KKyAgICAgICAgICAgIHhvclB0cihU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+
ZGVzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gRmlyc3QsIHdlIG5l
ZWQgYSByZXZlcnNlIG1hcHBpbmcgdGhhdCB0ZWxscyB1cywgZm9yIGEgTm9kZUluZGV4LCB3aGlj
aCByZWdpc3RlcgpAQCAtODc1LDcgKzg5Nyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKIHsKICAgICAvLyBMaW5rIHRoZSBjb2RlLCBwb3B1bGF0ZSBkYXRhIGlu
IENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZXMuCiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAgICBm
cHJpbnRmKHN0ZGVyciwgIkpJVCBjb2RlIHN0YXJ0IGF0IFslcCwgJXApXG4iLCBsaW5rQnVmZmVy
LmRlYnVnQWRkcmVzcygpLCBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0FkZHJl
c3MoKSkgKyBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkpJ
VCBjb2RlIGZvciAlcCBzdGFydCBhdCBbJXAsICVwKVxuIiwgbV9jb2RlQmxvY2ssIGxpbmtCdWZm
ZXIuZGVidWdBZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRk
cmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCkpOwogI2VuZGlmCiAKICAgICAvLyBMaW5r
IGFsbCBjYWxscyBvdXQgZnJvbSB0aGUgSklUIGNvZGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmdW5j
dGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NDYxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTcgQEAgY2xhc3MgU3BlY3VsYXRp
b25SZWNvdmVyeTsKIHN0cnVjdCBFbnRyeUxvY2F0aW9uOwogc3RydWN0IFNwZWN1bGF0aW9uQ2hl
Y2s7CiAKKyNpZm5kZWYgTkRFQlVHCit0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9u
X0VQKShFeGVjU3RhdGUqLCB2b2lkKik7CisjZW5kaWYKKworI2lmIERGR19WRVJCT1NFX1NQRUNV
TEFUSU9OX0ZBSUxVUkUKK3N0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8geworICAg
IENvZGVCbG9jayogY29kZUJsb2NrOworICAgIHVuc2lnbmVkIGRlYnVnT2Zmc2V0OworfTsKKyNl
bmRpZgorCiAvLyA9PT0gQ2FsbFJlY29yZCA9PT0KIC8vCiAvLyBBIHJlY29yZCBvZiBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUgdG8gYSBoZWxwZXIgZnVuY3Rpb24uCkBAIC0yMDUsMTYgKzIxNiw0
MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25D
YWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIC8v
IEFkZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IG9uIEpJVCBjb2RlIGV4
ZWN1dGlvbiBzdGF0ZS4KKyAgICB2b2lkIGRlYnVnQ2FsbChWX0RGR0RlYnVnT3BlcmF0aW9uX0VQ
IGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAg
c3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgbV9nbG9iYWxEYXRhLT5kZWJ1Z0RhdGFC
dWZmZXIgKyBpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
ICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86
OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgfQorICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYXJndW1lbnQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVu
Y3Rpb24pKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBjYWxsKEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEt
PmRlYnVnRGF0YUJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUklu
Zm86OnRvUmVnaXN0ZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAgbG9h
ZFB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0
ZXIoaSkpOworICAgIH0KKyNlbmRpZgogCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY2hlY2sg
bm9kZXMgZm9yIGNvbnN0YW50cy4KICAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KICAgICBib29s
IGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlND
b25zdGFudChub2RlSW5kZXgpOyB9CiAgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCks
IG5vZGVJbmRleCk7IH0KICAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2Rl
SW5kZXgpOyB9CisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KSB7IHJldHVybiBncmFwaCgpLmlzQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5k
ZXgpOyB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5v
ZGVzLgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4
KTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9k
ZUluZGV4KTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mRG91YmxlQ29uc3RhbnQoY29kZUJsb2Nr
KCksIG5vZGVJbmRleCk7IH0KKyAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KGNv
ZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5l
cmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBE
RkdfSklUX0FTU0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDk0NjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAKICNkZWZpbmUgREZHX0pJVF9CUkVBS19PTl9FVkVS
WV9OT0RFIDAKIC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIHNwZWN1bGF0aW9uIGZhaWx1
cmUgY29kZS4KICNkZWZpbmUgREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFIDAK
Ky8vIExvZyBldmVyeSBzcGVjdWxhdGlvbiBmYWlsdXJlLgorI2RlZmluZSBERkdfVkVSQk9TRV9T
UEVDVUxBVElPTl9GQUlMVVJFIDAKIC8vIERpc2FibGUgdGhlIERGRyBKSVQgd2l0aG91dCBoYXZp
bmcgdG8gdG91Y2ggUGxhdGZvcm0uaCEKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEUg
MAogLy8gRGlzYWJsZSB0aGUgU3BlY3VsYXRpdmVKSVQgd2l0aG91dCBoYXZpbmcgdG8gdG91Y2gg
UGxhdGZvcm0uaCEKQEAgLTg5LDYgKzkxLDcgQEAgdHlwZWRlZiB1aW50MzJfdCBFeGNlcHRpb25J
bmZvOwogI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKICNkZWZpbmUgTm9kZVJlc3Vs
dERvdWJsZSAgMHgyMDAwCiAjZGVmaW5lIE5vZGVSZXN1bHRJbnQzMiAgIDB4MzAwMAorI2RlZmlu
ZSBOb2RlUmVzdWx0Qm9vbGVhbiAweDQwMDAKIAogLy8gVGhpcyBtYWNybyBkZWZpbmVzIGEgc2V0
IG9mIGluZm9ybWF0aW9uIGFib3V0IGFsbCBrbm93biBub2RlIHR5cGVzLCB1c2VkIHRvIHBvcHVs
YXRlIE5vZGVJZCwgTm9kZVR5cGUgYmVsb3cuCiAjZGVmaW5lIEZPUl9FQUNIX0RGR19PUChtYWNy
bykgXApAQCAtMTQwLDEyICsxNDMsMTIgQEAgdHlwZWRlZiB1aW50MzJfdCBFeGNlcHRpb25JbmZv
OwogICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAg
ICAvKiBOb2RlcyBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhDb21w
YXJlTGVzcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENv
bXBhcmVMZXNzRXEsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNy
byhDb21wYXJlR3JlYXRlciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAg
IG1hY3JvKENvbXBhcmVHcmVhdGVyRXEsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKLSAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKLSAgICBtYWNybyhDb21wYXJlU3RyaWN0RXEsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3Jv
KENvbXBhcmVMZXNzLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhDb21wYXJlR3JlYXRlciwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXJFcSwgTm9kZVJlc3VsdEJv
b2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2RlUmVz
dWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb21wYXJlU3RyaWN0
RXEsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgXAogICAgIC8qIENhbGxzLiAqL1wKICAgICBt
YWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFy
Z3MpIFwKQEAgLTE1OSw4ICsxNjIsOCBAQCB0eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87
CiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtw
b2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENoZWNrSGFzSW5zdGFuY2UsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJbnN0YW5jZU9mLCBOb2RlUmVzdWx0SlMpIFwK
LSAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhJbnN0YW5j
ZU9mLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1
bHRCb29sZWFuKSBcCiAgICAgXAogICAgIC8qIEJsb2NrIHRlcm1pbmFscy4gKi9cCiAgICAgbWFj
cm8oSnVtcCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVJc1Rlcm1pbmFsIHwgTm9kZUlzSnVtcCkg
XApAQCAtMTk4LDcgKzIwMSw4IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RB
cnJheSAKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Owog
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CiBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKLXN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgPSAweDBmOworc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdEJvb2xlYW4gPSAweDEwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUg
UHJlZGljdFRvcCAgICA9IDB4MWY7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBTdHJvbmdQ
cmVkaWN0aW9uVGFnID0gMHg4MDsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3Rp
b25UYWdNYXNrICAgID0gMHg4MDsKIApAQCAtMjI5LDYgKzIzMywxMSBAQCBpbmxpbmUgYm9vbCBp
c051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkCiAgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGlj
dE51bWJlcikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7CiB9CiAKK2lubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVk
aWN0Qm9vbGVhbjsKK30KKwogaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9u
Z1ByZWRpY3Rpb25UYWcpKTsKQEAgLTI0OCw4ICsyNTcsMTIgQEAgaW5saW5lIGNvbnN0IGNoYXIq
IHByZWRpY3Rpb25Ub1N0cmluZyhQcgogICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1hcnJh
eSI7CiAgICAgICAgIGNhc2UgUHJlZGljdEludDMyOgogICAgICAgICAgICAgcmV0dXJuICJwLXN0
cm9uZy1pbnQzMiI7CisgICAgICAgIGNhc2UgUHJlZGljdERvdWJsZToKKyAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctZG91YmxlIjsKICAgICAgICAgY2FzZSBQcmVkaWN0TnVtYmVyOgogICAg
ICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1udW1iZXIiOworICAgICAgICBjYXNlIFByZWRpY3RC
b29sZWFuOgorICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1ib29sZWFuIjsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctdG9wIjsKICAgICAgICAgfQpA
QCAtMjYzLDggKzI3NiwxMiBAQCBpbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5n
KFByCiAgICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKICAgICBjYXNlIFByZWRpY3RJbnQz
MjoKICAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOworICAgIGNhc2UgUHJlZGljdERvdWJs
ZToKKyAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKICAgICBjYXNlIFByZWRpY3ROdW1i
ZXI6CiAgICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7CisgICAgY2FzZSBQcmVkaWN0Qm9v
bGVhbjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKICAgICB9CkBAIC0zMjYsNiArMzQzLDkgQEAgaW5s
aW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oSlNHbAogICAgIGlmIChzdGF0aXN0aWNz
LmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKICAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRp
Y3Rpb25UYWcgfCBQcmVkaWN0Q2VsbDsKICAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5ib29sZWFu
cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9u
VGFnIHwgUHJlZGljdEJvb2xlYW47CisgICAgCiAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25U
YWcgfCBQcmVkaWN0VG9wOwogfQogI2VuZGlmCkBAIC00MjMsNiArNDQzLDExIEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spLmlzTnVtYmVyKCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaXNCb29sZWFuQ29u
c3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25z
dGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNCb29sZWFuKCk7CisgICAg
fQorICAgIAogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jaykp
OwpAQCAtNDM0LDYgKzQ1OSwxMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VSVChpc0Rv
dWJsZUNvbnN0YW50KGNvZGVCbG9jaykpOwogICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3Rh
bnQoY29kZUJsb2NrKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKICAgICB9CisgICAgCisgICAgYm9v
bCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jaykpOworICAgICAgICByZXR1
cm4gdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5nZXRCb29sZWFuKCk7CisgICAgfQogCiAg
ICAgYm9vbCBoYXNMb2NhbCgpCiAgICAgewpAQCAtNDkyLDEzICs1MjMsMTYgQEAgc3RydWN0IE5v
ZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIChvcCAmIE5vZGVSZXN1bHRNYXNrKSA9PSBOb2Rl
UmVzdWx0SlM7CiAgICAgfQorICAgIAorICAgIGJvb2wgaGFzQm9vbGVhblJlc3VsdCgpCisgICAg
eworICAgICAgICByZXR1cm4gKG9wICYgTm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRCb29s
ZWFuOworICAgIH0KIAogICAgIC8vIENoZWNrIGZvciBpbnRlZ2VycyBvciBkb3VibGVzLgogICAg
IGJvb2wgaGFzTnVtZXJpY1Jlc3VsdCgpCiAgICAgewotICAgICAgICAvLyBUaGlzIGNoZWNrIHdp
bGwgbmVlZCB1cGRhdGluZyBpZiBtb3JlIHJlc3VsdCB0eXBlcyBhcmUgYWRkZWQuCi0gICAgICAg
IEFTU0VSVCgoaGFzSW50MzJSZXN1bHQoKSB8fCBoYXNEb3VibGVSZXN1bHQoKSkgPT0gIWhhc0pT
UmVzdWx0KCkpOwotICAgICAgICByZXR1cm4gIWhhc0pTUmVzdWx0KCk7CisgICAgICAgIHJldHVy
biBoYXNJbnQzMlJlc3VsdCgpIHx8IGhhc0RvdWJsZVJlc3VsdCgpOwogICAgIH0KIAogICAgIGJv
b2wgaXNKdW1wKCkKQEAgLTU2Myw5ICs1OTcsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIAog
ICAgICAgICBBU1NFUlQoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24pOwogICAgICAgICAKLSAg
ICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8
IHByZWRpY3Rpb247CisgICAgICAgIFByZWRpY3RlZFR5cGUgbmV3UHJlZGljdGlvbiA9IFN0cm9u
Z1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uIHwgbV9vcEluZm8yOwogICAgICAgICBib29sIHJl
c3VsdCA9IG1fb3BJbmZvMiAhPSBuZXdQcmVkaWN0aW9uOwotICAgICAgICBtX29wSW5mbzIgfD0g
bmV3UHJlZGljdGlvbjsKKyAgICAgICAgbV9vcEluZm8yID0gbmV3UHJlZGljdGlvbjsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDk0NjE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc4
LDYgKzY3OCwxNCBAQCBSZWdpc3RlclNpemVkQm9vbGVhbiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKIH0K
IAorI2lmIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUKK3ZvaWQgZGVidWdPcGVyYXRp
b25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKiBkZWJ1Z0luZm9SYXcp
Cit7CisgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBzdGF0aWNf
Y2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qPihkZWJ1Z0luZm9SYXcpOworICAgIHBy
aW50ZigiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAlcCBhdCAweCV4IVxuIiwgZGVidWdJbmZvLT5j
b2RlQmxvY2ssIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQpOworfQorI2VuZGlmCisKIH0gLy8gZXh0
ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTQ2MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1
LDYgKzExNSwxMCBAQCBkb3VibGUgZGZnQ29udmVydEpTVmFsdWVUb051bWJlcihFeGVjU3RhCiBp
bnQzMl90IGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSk7CiBSZWdpc3RlclNpemVkQm9vbGVhbiBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiAKKyNpZiBERkdfVkVSQk9TRV9TUEVDVUxBVElPTl9G
QUlMVVJFCit2b2lkIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0
YXRlKiwgdm9pZCopOworI2VuZGlmCisKIH0gLy8gZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25UcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1ByZWRpY3Rpb25UcmFja2VyX2gKKyNkZWZpbmUgREZHUHJlZGljdGlvblRyYWNrZXJfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1
aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGluZSBib29sIG9wZXJh
bmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQorCitzdHJ1
Y3QgUHJlZGljdGlvblNsb3QgeworcHVibGljOgorICAgIFByZWRpY3Rpb25TbG90KCkKKyAgICAg
ICAgOiBtX3ZhbHVlKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgUHJlZGljdGVkVHlw
ZSBtX3ZhbHVlOworfTsKKworY2xhc3MgUHJlZGljdGlvblRyYWNrZXIgeworcHVibGljOgorICAg
IFByZWRpY3Rpb25UcmFja2VyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFByZWRpY3Rpb25U
cmFja2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQorICAg
ICAgICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX3ZhcmlhYmxlcyhu
dW1WYXJpYWJsZXMpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVTaW1p
bGFyVG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9h
cmd1bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBtX3Zh
cmlhYmxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
LnNpemUoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhG
b3JPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVu
dHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9CisKKyAgICBi
b29sIHByZWRpY3RBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
ZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3Qo
aW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBz
b3VyY2UpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisg
ICAgICAgICAgICByZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5k
KG9wZXJhbmQpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICBpZiAoKHVuc2lnbmVkKW9w
ZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3BlcmFu
ZCA+PSAwKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJp
YWJsZXNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNl
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJO
dW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2Up
CisgICAgeworICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYg
KGl0ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgpKSB7CisgICAgICAgICAgICBQcmVkaWN0aW9uU2xv
dCBwcmVkaWN0aW9uU2xvdDsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNv
dXJjZSkpOworICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVk
aWN0aW9uU2xvdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRp
Y3QoTm9kZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNl
IHNvdXJjZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICBjYXNl
IEdldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVk
aWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgorICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1i
ZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5
VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAg
ICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIFByZWRpY3RlZFR5cGUgZ2V0QXJndW1lbnRQcmVkaWN0aW9uKHVuc2lnbmVkIGFyZ3Vt
ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVl
OworICAgIH0KKworICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkK
KyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAg
ICAgIHJldHVybiBnZXRBcmd1bWVudFByZWRpY3Rpb24oYXJndW1lbnRJbmRleEZvck9wZXJhbmQo
b3BlcmFuZCkpOworICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlcy5z
aXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZTsK
KyAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRU
eXBlIGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0g
bV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CisgICAgICAgIGlmIChpdGVyID09IG1f
Z2xvYmFsVmFycy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAg
ICAgcmV0dXJuIGl0ZXItPnNlY29uZC5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0
ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIGdl
dFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigp
KTsKKyAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICAgICAgICAgIHJldHVybiBub2RlLmdldFByZWRpY3Rpb24oKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1
bWVudHM7CisgICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7CisgICAg
SGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHUHJlZGljdGlvblRyYWNrZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk0NjE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOSArNDAsMjggQEAgcHVibGljOgogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICB7CisgICAgICAg
IC8vIFByZWRpY3Rpb25zIGlzIGEgZm9yd2FyZCBmbG93IHByb3BlcnR5IHRoYXQgcHJvcGFnYXRl
cyB0aGUgdmFsdWVzIHNlZW4gYXQKKyAgICAgICAgLy8gYSBwYXJ0aWN1bGFyIHZhbHVlIHNvdXJj
ZSB0byB0aGVpciB2YXJpb3VzIHVzZXMsIGVuc3VyaW5nIHRoYXQgdXNlcyBwZXJmb3JtCisgICAg
ICAgIC8vIHNwZWN1bGF0aW9uIHRoYXQgZG9lcyBub3QgY29udHJhdmVuZSB0aGUgZXhwZWN0ZWQg
dmFsdWVzLgogICAgICAgICBtX3ByZWRpY3Rpb25zLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7ICsraSkKKyAg
ICAgICAgCisgICAgICAgIC8vIFVzZXMgaXMgYSBiYWNrd2FyZCBmbG93IHByb3BlcnR5IHRoYXQg
cHJvcGFnYXRlcyB0aGUgaGFyZCBleHBlY3RhdGlvbnMgYXQKKyAgICAgICAgLy8gY2VydGFpbiB1
c2VzIHRvIHRoZWlyIHZhbHVlIHNvdXJjZXMsIGVuc3VyaW5nIHRoYXQgcHJlZGljdGlvbnMgYWJv
dXQKKyAgICAgICAgLy8gdmFsdWVzIGRvIG5vdCBjb250cmF2ZW5lIHRoZSBjb2RlIGl0c2VsZi4g
VGhpcyBjb21lcyB1cCBvbmx5IGluIHRoZQorICAgICAgICAvLyBjYXNlcyBvZiBvYnZpb3VzIGNl
bGwgdXNlcywgbGlrZSBHZXRCeUlkIGFuZCBmcmllbmRzIGFzIHdlbGwgYXMgQ2FsbC4KKyAgICAg
ICAgLy8gV2UncmUgZXNzZW50aWFsbHkgc3RhdGljYWxseSBzcGVjdWxhdGluZyB0aGF0IGlmIHRo
ZSB2YWx1ZSBwcm9maWxlIGluZGljYXRlcworICAgICAgICAvLyB0aGF0IG9ubHkgYm9vbGVhbnMg
KGZvciBleGFtcGxlKSBmbG93IGludG8gYSBHZXRCeUlkLCB0aGVuIHRoZSB2YWx1ZQorICAgICAg
ICAvLyBwcm9maWxlIGlzIHNpbXBseSB3cm9uZyBkdWUgdG8gaW5zdWZmaWNpZW50IGNvdmVyYWdl
IGFuZCBuZWVkcyB0byBiZQorICAgICAgICAvLyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gVGhlIGFs
dGVybmF0aXZlcyB3b3VsZCBiZSB0byBhc3N1bWUgZWl0aGVyCisgICAgICAgIC8vIHRoYXQgdGhl
IEdldEJ5SWQgbmV2ZXIgZXhlY3V0ZXMsIG9yIGFsd2F5cyBleGVjdXRlcyBvbiBhIGJvb2xlYW4g
bGVhZGluZworICAgICAgICAvLyB0byB3aGF0ZXZlciBiaXphcnJlIGJlaGF2aW9yIHRoYXQncyBz
dXBwb3NlZCB0byBjYXVzZS4KKyAgICAgICAgbV91c2VzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7
CisgICAgICAgIG1fdmFyaWFibGVVc2VzLmluaXRpYWxpemVTaW1pbGFyVG8obV9ncmFwaC5wcmVk
aWN0aW9ucygpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2dyYXBoLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBtX3ByZWRpY3Rpb25zW2ldID0gUHJl
ZGljdE5vbmU7CisgICAgICAgICAgICBtX3VzZXNbaV0gPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIGZpeHBvaW50KCkKQEAgLTUxLDkgKzcwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKICAgICAgICAgZG8geworICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZv
cndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHkt
c29ydGVkIGFuZAogICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgotICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7CiAgICAg
ICAgICAgICBpZiAoIW1fY2hhbmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY0LDMw
ICs4NCwzMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9u
IGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKLSAgICAgICAg
ICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBEbyBhbm90aGVyIGZvcndhcmQgcGFzcyBiZWNhdXNlIGZvcndhcmQg
cGFzc2VzIGFyZSBvbiBhdmVyYWdlIG1vcmUKLSAgICAgICAgICAgIC8vIHByb2ZpdGFibGUuCi0g
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndh
cmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICB9CiAgICAgCiBwcml2YXRl
OgotICAgIHZvaWQgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAg
Ym9vbCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAg
IAogICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPT0gcHJlZGljdGlv
bikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCiAgICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0gcHJlZGljdGlvbjsK
LSAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikK
KyAgICBib29sIG1lcmdlVXNlKE5vZGVJbmRleCBub2RlSW5kZXgsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChERkc6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRp
Y3Rpb25zW21fY29tcGlsZUluZGV4XSwgcHJlZGljdGlvbikpCi0gICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLmhhc1Jlc3VsdCgp
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBERkc6Om1lcmdlUHJlZGljdGlvbihtX3VzZXNb
bm9kZUluZGV4XSwgcHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAgIGJvb2wgbWVyZ2VQcmVk
aWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gREZHOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0s
IHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICB2b2lkIHByb3BhZ2F0ZU5vZGUoTm9kZSYg
bm9kZSkKQEAgLTk2LDMzICsxMTksNDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKworI2lmIERGR19ERUJV
R19WRVJCT1NFCisgICAgICAgIHByaW50ZigiICAgJXNbJXVdOiAiLCBHcmFwaDo6b3BOYW1lKG9w
KSwgbV9jb21waWxlSW5kZXgpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9m
SlNDb25zdGFudChtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQotICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdElu
dDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikp
OwogICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwg
PSB2YWx1ZS5hc0NlbGwoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZtX2dsb2Jh
bERhdGEsIGNlbGwpKQotICAgICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3RBcnJheSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEFycmF5
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RDZWxsLCBTdHJvbmdQ
cmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RDZWxsLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Qm9vbGVhbiwgU3Ryb25nUHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9j
YWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0KG5vZGUubG9jYWwo
KSwgbV91c2VzW21fY29tcGlsZUluZGV4XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJl
ZGljdGlvbik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fdmFyaWFibGVVc2VzLnByZWRpY3Qo
bm9kZS5sb2NhbCgpLCBtX3VzZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNr
LCBTdHJvbmdQcmVkaWN0aW9uKTsKKwogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uID0gbV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CiAgICAgICAgICAgICBp
ZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgbV9jaGFu
Z2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGljdGlvbnNbbm9kZS5j
aGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rp
b25zW25vZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9u
KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgbV92YXJp
YWJsZVVzZXMuZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzNSw3ICsxNzEsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoK
ICAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTE0NCwxMCArMTgwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAg
ICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFBy
ZWRpY3ROdW1iZXIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE51bWJlciwgU3Ry
b25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNTgsMTEgKzE5NSwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0
cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJl
ZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJp
Z2h0KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0
SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRp
Y3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE3NSwxNSArMjEyLDE1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRp
Y3Rpb24obGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkgewogICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkp
Ci0gICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQ
cmVkaWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGlj
dGlvbikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbiht
YWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9u
Z1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTE5NSw0OCArMjMyLDYwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUVx
OgogICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICAgICAgY2FzZSBJbnN0YW5jZU9m
OiB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHNhZCwgYXMgd2UgZG9uJ3QgaGF2ZSBhIGJvb2xl
YW4gcHJlZGljdGlvbiwgZXZlbiB0aG91Z2ggd2UgZWFzaWx5Ci0gICAgICAgICAgICAvLyBjb3Vs
ZC4KLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwg
U3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9u
KG1ha2VQcmVkaWN0aW9uKFByZWRpY3RCb29sZWFuLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0
QnlJZDoKICAgICAgICAgY2FzZSBHZXRNZXRob2Q6Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uo
bm9kZS5jaGlsZDEoKSwgUHJlZGljdENlbGwgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS5wcmVkaWN0KG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+
UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgaWYgKGlz
U3Ryb25nUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDYWxsOgog
ICAgICAgICBjYXNlIENvbnN0cnVjdDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVz
ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldLCBQcmVkaWN0Q2Vs
bCB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnBy
ZWRpY3QobV91c2VzW21fY29tcGlsZUluZGV4XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25n
UHJlZGljdGlvbik7CiAgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKG5vZGUuZ2V0
UHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJl
ZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obm9k
ZS5nZXRQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RDZWxsLCBTdHJvbmdQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV92YXJpYWJsZVVzZXMucHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJl
cigpLCBtX3VzZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQ
cmVkaWN0aW9uKTsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3Jh
cGguZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKTsKICAgICAgICAgICAg
IGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgbWVy
Z2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewotICAgICAgICAgICAg
bV9jaGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBt
X3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQ
cmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFs
VmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJl
ZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBtX3ZhcmlhYmxlVXNlcy5nZXRHbG9iYWxWYXJQcmVk
aWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIC8vIFRoZXNlIGdldCBpZ25v
cmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCiAgICAgICAgIGNhc2UgUHV0
QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBQdXRCeUlk
OgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlVXNlKG5vZGUuY2hpbGQxKCksIFByZWRpY3RDZWxsIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7
CisgICAgICAgICAgICBicmVhazsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gVGhlc2Ug
Z2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KICAgICAgICAg
Y2FzZSBERkc6Okp1bXA6CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFJldHVy
bjoKLSAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAg
ICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI1NSw2ICszMDQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogI2VuZGlmCiAgICAgICAgIH0KKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAg
IHByaW50ZigiZXhwZWN0KCVzKSB1c2UoJXMpICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9w
cmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0pLCBwcmVkaWN0aW9uVG9TdHJpbmcobV91c2VzW21f
Y29tcGlsZUluZGV4XSksIGNoYW5nZWQgPyAiQ0hBTkdFRCIgOiAiIik7CisjZW5kaWYKKyAgICAg
ICAgCisgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KICAgICAKICAgICB2b2lk
IHByb3BhZ2F0ZUZvcndhcmQoKQpAQCAtMjgzLDYgKzMzOCw5IEBAIHByaXZhdGU6CiAgICAgTm9k
ZUluZGV4IG1fY29tcGlsZUluZGV4OwogICAgIAogICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAx
Nj4gbV9wcmVkaWN0aW9uczsKKyAgICBWZWN0b3I8UHJlZGljdGVkVHlwZSwgMTY+IG1fdXNlczsK
KyAgICAKKyAgICBQcmVkaWN0aW9uVHJhY2tlciBtX3ZhcmlhYmxlVXNlczsKIAogI2lmIERGR19E
RUJVR19WRVJCT1NFCiAgICAgdW5zaWduZWQgbV9jb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDYxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsOCArMTI4LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERh
dGFGb3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CiAgICAgY2FzZSBEYXRh
Rm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOiB7CisgICAgY2FzZSBE
YXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogewogICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwogICAgICAgICByZXR1cm5Gb3JtYXQg
PSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CkBAIC0yMjMs
MTMgKzIyNSwxNCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAg
ICAgfQogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERh
dGFGb3JtYXROb25lOgotICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgorICAg
IGNhc2UgRGF0YUZvcm1hdE5vbmU6IC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCisgICAg
Y2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogLy8gVGhpcyB0eXBlIG5ldmVyIG9jY3Vycy4KICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIAogICAgIGNhc2UgRGF0YUZvcm1hdENl
bGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7
CisgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7
CiAgICAgICAgIEdQUlJlZyBqc1ZhbHVlR3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJz
LmxvY2soanNWYWx1ZUdwcik7CiAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwpA
QCAtMzQ5LDcgKzM1Miw3NiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgogICAgIGNhc2UgRGF0YUZvcm1hdElu
dGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0
RG91YmxlOiB7CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1h
dEpTQm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7CisgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwor
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW52
YWxpZEdQUlJlZzsKK30KKworR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9v
bGVhbihOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFw
aCgpW25vZGVJbmRleF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSkgeworICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdw
ciA9IGFsbG9jYXRlKCk7CisKKyAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZ3ByOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgZ3ByKTsKKworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7
CisgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSks
IGdwcik7CisgICAgICAgIH0KKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIGNhc2UgRGF0
YUZvcm1hdEJvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7CisgICAgICAg
IEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAg
ICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CisgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOwor
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRp
b25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgIG1faml0LnhvclB0cihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIHJl
dHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNh
c2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBj
YXNlIERhdGFGb3JtYXRDZWxsOiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAgLTUyOCw3ICs2MDAs
NyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgICAgIAog
ICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBo
ZXJlLgogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTYxLDcgKzYzMywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVlcyB3aXRoaW4gdGhp
cyBkYXRhZmxvdyB3aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVySlMpOwotICAgICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmlu
aXRKU1ZhbHVlKG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSwg
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgPyBEYXRhRm9ybWF0SlNDZWxsIDogRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAg
ICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
Qm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgZm9ybWF0ID0g
RGF0YUZvcm1hdEpTQm9vbGVhbjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBm
b3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXS5pbml0SlNWYWx1ZShtX2NvbXBpbGVJbmRleCwgbm9k
ZS5yZWZDb3VudCgpLCByZXN1bHQuZ3ByKCksIGZvcm1hdCk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNTc4LDYgKzY1OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKGJvb2xlYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkp
OworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CkBAIC04NDEsNiArOTI2LDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIExvZ2ljYWxO
b3Q6IHsKKyAgICAgICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsg
Ly8gRklYTUU6IFdlIGNvdWxkIHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBu
ZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAKQEAgLTg1MCw3ICs5
NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVl
KSksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJv
b2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMjI3LDcgKzEzMjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBzY3JhdGNoUmVnKTsK
IAogICAgICAgICBwdXRSZXN1bHQubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0
KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChzY3Jh
dGNoUmVnLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTQ2MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDggQEAg
Y2xhc3MgU3BlY3VsYXRpdmVKSVQ7CiAvLyBUaGlzIGVudW0gZGVzY3JpYmVzIHRoZSB0eXBlcyBv
ZiBhZGRpdGlvbmFsIHJlY292ZXJ5IHRoYXQKIC8vIG1heSBuZWVkIGJlIHBlcmZvcm1lZCBzaG91
bGQgYSBzcGVjdWxhdGlvbiBjaGVjayBmYWlsLgogZW51bSBTcGVjdWxhdGlvblJlY292ZXJ5VHlw
ZSB7Ci0gICAgU3BlY3VsYXRpdmVBZGQKKyAgICBTcGVjdWxhdGl2ZUFkZCwKKyAgICBCb29sZWFu
U3BlY3VsYXRpb25DaGVjawogfTsKIAogLy8gPT09IFNwZWN1bGF0aW9uUmVjb3ZlcnkgPT09CkBA
IC0xMzIsOCArMTMzLDExIEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0
cmljdChOb2RlSW5kZXgpOwogICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGVJbmRl
eCk7CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKE5vZGVJbmRleCk7CisgICAgR1BSUmVn
IGZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCk7CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CisgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsK
ICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwogCkBAIC00MDgsNiArNDEyLDQ3IEBAIHBy
aXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAorY2xhc3MgU3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICAgICAgOiBt
X2ppdChqaXQpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICAgICAgZ3ByKCk7CisgICAgfQor
ICAgIAorICAgIH5TcGVjdWxhdGVCb29sZWFuT3BlcmFuZCgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LT51bmxv
Y2sobV9ncHJPckludmFsaWQpOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorICAgIAorICAgIEdQ
UlJlZyBncHIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRl
Qm9vbGVhbihpbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHVzZSgpCisgICAgeworICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgTm9k
ZUluZGV4IG1faW5kZXg7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworfTsKKwogCiAvLyA9
PT0gU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgPT09CiAvLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0NjE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMiw2ICsyMzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklU
KQogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOwogICAgICAgICBK
U1ZhbHVlIGhvc3RDYWxsUmV0dXJuVmFsdWU7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBpbnQ2
NF90IGRlYnVnRGF0YUJ1ZmZlcls2NF07CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hN
YXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xh
c3NEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDk0NjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw5ICsxMjYsMTggQEAgY2hhciogSlNWYWx1ZTo6
ZGVzY3JpcHRpb24oKQogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIjxKU1Zh
bHVlKCk+Iik7CiAgICAgZWxzZSBpZiAoaXNJbnQzMigpKQogICAgICAgICBzbnByaW50ZihkZXNj
cmlwdGlvbiwgc2l6ZSwgIkludDMyOiAlZCIsIGFzSW50MzIoKSk7Ci0gICAgZWxzZSBpZiAoaXNE
b3VibGUoKSkKLSAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICVs
ZiIsIGFzRG91YmxlKCkpOwotICAgIGVsc2UgaWYgKGlzQ2VsbCgpKQorICAgIGVsc2UgaWYgKGlz
RG91YmxlKCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzbnByaW50ZihkZXNjcmlw
dGlvbiwgc2l6ZSwgIkRvdWJsZTogJWxmLCAlbHgiLCBhc0RvdWJsZSgpLCByZWludGVycHJldERv
dWJsZVRvSW50cHRyKGFzRG91YmxlKCkpKTsKKyNlbHNlCisgICAgICAgIHVuaW9uIHsKKyAgICAg
ICAgICAgIGRvdWJsZSBhc0RvdWJsZTsKKyAgICAgICAgICAgIHVpbnQzMl90IGFzVHdvSW50MzJz
WzJdOworICAgICAgICB9IHU7CisgICAgICAgIHUuYXNEb3VibGUgPSBhc0RvdWJsZSgpOworICAg
ICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRvdWJsZTogJWxmLCAlMDh4OiUwOHgi
LCBhc0RvdWJsZSgpLCB1LmFzVHdvSW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdKTsKKyNlbmRp
ZgorICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9u
LCBzaXplLCAiQ2VsbDogJXAiLCBhc0NlbGwoKSk7CiAgICAgZWxzZSBpZiAoaXNUcnVlKCkpCiAg
ICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiVHJ1ZSIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>