<?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>67337</bug_id>
          
          <creation_ts>2011-08-31 16:40:43 -0700</creation_ts>
          <short_desc>Update RegExp and related classes to use 8 bit strings when available</short_desc>
          <delta_ts>2012-01-04 16:35:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67339</dependson>
          <blocked>66161</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460062</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-08-31 16:40:43 -0700</bug_when>
    <thetext>As part of the changes for https://bugs.webkit.org/show_bug.cgi?id=66161 we need to change the JavaScriptCore regular expression code to handle 8 bit strings.  This includes the YARR parser, JIT and interpreter code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463762</commentid>
    <comment_count>1</comment_count>
      <attachid>106671</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-07 16:38:18 -0700</bug_when>
    <thetext>Created attachment 106671
Proposed Patch

This patch contains 8bit code paths for the YARR interpreter and JIT.  The implementations of the JIT have been coded for all current architectures, but I have only tested X86_64 and ARM v7.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463767</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 16:41:29 -0700</bug_when>
    <thetext>Attachment 106671 did not pass style-queue:

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

Source/JavaScriptCore/assembler/X86Assembler.h:845:  cmpw_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:1175:  movzbl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 18 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>463781</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-07 17:03:31 -0700</bug_when>
    <thetext>Forgot to mention performance results of this change.  Running command line benchmarks, SunSpider is 0.1% faster (noise level) and V8 is 0.2% slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463795</commentid>
    <comment_count>4</comment_count>
      <attachid>106671</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 18:05:14 -0700</bug_when>
    <thetext>Comment on attachment 106671
Proposed Patch

Attachment 106671 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9525004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463800</commentid>
    <comment_count>5</comment_count>
      <attachid>106671</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-07 18:18:44 -0700</bug_when>
    <thetext>Comment on attachment 106671
Proposed Patch

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

Looks good. Few issues above, my only major concern is is branch16, but would be prudent to get some non-JIT numbers to prove the extra check in the interpreter isn&apos;t an overhead.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h:1074
&gt; +    Jump branch16(RelationalCondition cond, RegisterID left, TrustedImm32 right)

This is actually doing a 32-bit by 16-bit compare.  We should either make this work like the other branch16 method (only consider the low 16 bits), or we should be ripping out branch16 and just using a branch32.  A method called branch16 that compares 32 bits isn&apos;t right.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:884
&gt; +            m_assembler.testl_rr(left, left);

I think this needs to be a testw?

&gt; Source/JavaScriptCore/runtime/RegExp.cpp:308
&gt; +{

It might help understanding to add the following documentary ASSERT:

// If the state is NotCompiled or ParseError, then there is no representation.
// If there is a representation, and the state must be either JITCode or ByteCode.
ASSERT(!!m_representation == (m_state == JITCode || m_state == ByteCode));

&gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:170
&gt;  

We should probably have some kind of comment on this class indicating that it is a placeholder for something better one we have 8-bit StringImpls.

&gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:209
&gt; +            if (m_charSize == Char8)

We should check the performance impact of this check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464567</commentid>
    <comment_count>6</comment_count>
      <attachid>106826</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-08 18:43:40 -0700</bug_when>
    <thetext>Created attachment 106826
Updated patch addressing the concerns raised with the prior patch.

I checked the performance of the interpreter character size check with JIT turned off running V8 RegExp test.  It is 3% slower.  As we change to use the replacement class we can check and tune at that time.

There still may be an export issue with windows that I will rely on the buildbot catching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464568</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 18:45:39 -0700</bug_when>
    <thetext>Attachment 106826 did not pass style-queue:

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

Source/JavaScriptCore/assembler/X86Assembler.h:845:  cmpw_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:1175:  movzbl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 20 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>464606</commentid>
    <comment_count>8</comment_count>
      <attachid>106826</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 20:11:05 -0700</bug_when>
    <thetext>Comment on attachment 106826
Updated patch addressing the concerns raised with the prior patch.

Attachment 106826 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9626306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464628</commentid>
    <comment_count>9</comment_count>
      <attachid>106826</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 21:11:53 -0700</bug_when>
    <thetext>Comment on attachment 106826
Updated patch addressing the concerns raised with the prior patch.

Attachment 106826 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9626325</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464737</commentid>
    <comment_count>10</comment_count>
      <attachid>106826</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 04:47:20 -0700</bug_when>
    <thetext>Comment on attachment 106826
Updated patch addressing the concerns raised with the prior patch.

Attachment 106826 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9625568</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464897</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-09 10:48:20 -0700</bug_when>
    <thetext>&gt; I checked the performance of the interpreter character size check with JIT turned off running V8 RegExp test.  It is 3% slower.  As we change to use the replacement class we can check and tune at that time.

I&apos;m not convinced by this logic. Why should we expect things to get faster when we rename the abstract iterator class to StringConstCharacterIterator? I expect things not to get faster, since the source of the performance problem -- taking a branch on every character access -- will still be there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465022</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-09 14:26:44 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; I checked the performance of the interpreter character size check with JIT turned off running V8 RegExp test.  It is 3% slower.  As we change to use the replacement class we can check and tune at that time.
&gt; 
&gt; I&apos;m not convinced by this logic. Why should we expect things to get faster when we rename the abstract iterator class to StringConstCharacterIterator? I expect things not to get faster, since the source of the performance problem -- taking a branch on every character access -- will still be there.

I expect that we&apos;ll do more than just change names.  One of the tuning possibilities includes moving to a template implementation of the interpreter that should restore all performance back, no per character branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465023</commentid>
    <comment_count>13</comment_count>
      <attachid>106923</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-09 14:27:53 -0700</bug_when>
    <thetext>Created attachment 106923
Updated patch to fix build failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465025</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 14:30:58 -0700</bug_when>
    <thetext>Attachment 106923 did not pass style-queue:

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

Source/JavaScriptCore/assembler/X86Assembler.h:845:  cmpw_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/X86Assembler.h:1175:  movzbl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 23 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>465691</commentid>
    <comment_count>15</comment_count>
      <attachid>106923</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-12 11:13:41 -0700</bug_when>
    <thetext>Comment on attachment 106923
Updated patch to fix build failures

Looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465828</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-09-12 15:18:36 -0700</bug_when>
    <thetext>Committed r94981: &lt;http://trac.webkit.org/changeset/94981&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466018</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 18:40:11 -0700</bug_when>
    <thetext>This adds a build-time dependency on runtime/UString.cpp from yarr/YarrInterpreter.cpp.  Historically in the Chromium build we&apos;ve avoided compiling any files in runtime/.  Is this an intentional change in the dependencies for yarr or unintentional?  Would you recommend that we start compiling in all of runtime/ even in non-JSC builds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466025</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 18:56:25 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=67979 about this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466036</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 19:20:21 -0700</bug_when>
    <thetext>WTF::String has a latin1() that looks identical to UString&apos;s.  Would it make sense for CharAccess be implemented in terms of WTF::String or WTF::StringImpl instead of JSC::Ustring?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466037</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 19:20:39 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; WTF::String has a latin1() that looks identical to UString&apos;s.  Would it make sense for CharAccess be implemented in terms of WTF::String or WTF::StringImpl instead of JSC::Ustring?

Ack sorry, I meant to post this comment on https://bugs.webkit.org/show_bug.cgi?id=67979</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529877</commentid>
    <comment_count>21</comment_count>
      <attachid>106923</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-04 16:35:05 -0800</bug_when>
    <thetext>Comment on attachment 106923
Updated patch to fix build failures

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

&gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1479
&gt; +    Interpreter(BytecodePattern* pattern, int* output, const UString input, unsigned start, unsigned length)

Shouldn&apos;t this be &quot;const UString&amp;&quot;?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106671</attachid>
            <date>2011-09-07 16:38:18 -0700</date>
            <delta_ts>2011-09-08 18:43:40 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>67337-4.patch</filename>
            <type>text/plain</type>
            <size>45853</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAK
KzIwMTEtMDktMDcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXBkYXRlIFJlZ0V4cCBhbmQgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZSA4IGJpdCBzdHJpbmdz
IHdoZW4gYXZhaWxhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NzMzNworCisgICAgICAgIE1vZGlmaWVkIGJvdGggdGhlIFlhcnIgaW50ZXJwcmV0
ZXIgYW5kIEpJVCB0byBoYW5kbGUgOCBiaXQgc3ViamVjdCBzdHJpbmdzLgorICAgICAgICBUaGUg
Y29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBVU3RyaW5nOjppczhiaXQoKSBtZXRob2Qg
d2hpY2ggY3VycmVudGx5CisgICAgICAgIHJldHVybnMgZmFsc2UuICBJbXBsZW1lbnRlZCBKSVQg
Y2hhbmdlcyBmb3IgYWxsIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgVGVzdGVkIFg4
Nl82NCBhbmQgQVJNIHY3LgorCisgICAgICAgIFRoaXMgaW5jbHVkZXMgc29tZSBjb2RlIHRoYXQg
d2lsbCBsaWtlbHkgY2hhbmdlIGFzIHdlIGNvbXBsZXRlIHRoZSAKKyAgICAgICAgOCBiaXQgc3Ry
aW5nIGNoYW5nZXMuICBUaGlzIGluY2x1ZGVzIHRoZSB3YXkgdGhlIHJhdyBidWZmZXIgcG9pbnRl
cnMKKyAgICAgICAgYXJlIGFjY2Vzc2VkIGFzIHdlbGwgYXMgcmVwbGFjaW5nIHRoZSBDaGFyQWNj
ZXNzIGNsYXNzIHdpdGggYSAKKyAgICAgICAgc3RyaW5nIGludGVyYXRvciByZXR1cm5lZCBmcm9t
IFVTdHJpbmcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxl
ci5jcHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMik6
CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6
bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoOCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpicmFuY2gxNik6CisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk12Nzo6bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpicmFuY2gx
Nik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmJyYW5jaDgpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJNSVBTOjpsb2FkOCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
YnJhbmNoOCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoMTYpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclNINDo6bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNI
NDo6YnJhbmNoOCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2gxNik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpsb2FkOCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2gxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjpicmFuY2g4KToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y21wd19pcik6CisgICAgICAgIChK
U0M6Olg4NkFzc2VtYmxlcjo6bW92emJsX21yKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlJlZ0V4
cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVyKToKKyAgICAg
ICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZy5oOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nOjppczhCaXQpOgorICAgICAgICAqIHlhcnIvWWFyci5oOgorICAg
ICAgICAqIHlhcnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6SW50
ZXJwcmV0ZXI6OkNoYXJBY2Nlc3M6OkNoYXJBY2Nlc3MpOgorICAgICAgICAoSlNDOjpZYXJyOjpJ
bnRlcnByZXRlcjo6Q2hhckFjY2Vzczo6fkNoYXJBY2Nlc3MpOgorICAgICAgICAoSlNDOjpZYXJy
OjpJbnRlcnByZXRlcjo6Q2hhckFjY2Vzczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ollh
cnI6OkludGVycHJldGVyOjpJbnB1dFN0cmVhbTo6SW5wdXRTdHJlYW0pOgorICAgICAgICAoSlND
OjpZYXJyOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpp
bnRlcnByZXQpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6Ollh
cnI6OllhcnJHZW5lcmF0b3I6Omp1bXBJZkNoYXJOb3RFcXVhbHMpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpyZWFkQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZSk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZpeGVkKToK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFj
dGVyR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNr
UGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NGaXhlZCk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlRG90U3RhckVuY2xvc3VyZSk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJHZW5lcmF0b3I6OllhcnJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGls
ZSk6CisgICAgICAgIChKU0M6OllhcnI6OmV4ZWN1dGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJ
VC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpoYXM4Qml0Q29kZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmhhczE2Qml0Q29kZSk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGFyc2VyLmg6Cisg
ICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0wOS0wNyAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbGVhc2UgbW9kZSBidWlsZCBm
aXguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlz
aW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAko
d29ya2luZyBjb3B5KQpAQCAtMjQzLDkgKzI0Myw5IEBAIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2
CiBfX1pOM0pTQzRIZWFwN3Byb3RlY3RFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRIZWFwOGNhcGFj
aXR5RXYKIF9fWk4zSlNDNEhlYXA5dW5wcm90ZWN0RU5TXzdKU1ZhbHVlRQorX19aTjNKU0M0WWFy
cjlpbnRlcnByZXRFUE5TMF8xNUJ5dGVjb2RlUGF0dGVybkVSS05TXzdVU3RyaW5nRWpqUGkKIF9f
Wk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJuQzFFUktOU183VVN0cmluZ0ViYlBQS2MKIF9fWk4zSlND
NFlhcnIxMWJ5dGVDb21waWxlRVJOUzBfMTFZYXJyUGF0dGVybkVQTjNXVEYyMEJ1bXBQb2ludGVy
QWxsb2NhdG9yRQotX19aTjNKU0M0WWFycjlpbnRlcnByZXRFUE5TMF8xNUJ5dGVjb2RlUGF0dGVy
bkVQS3RqalBpCiBfX1pOM0pTQzRjYWxsRVBOU185RXhlY1N0YXRlRU5TXzdKU1ZhbHVlRU5TXzhD
YWxsVHlwZUVSS05TXzhDYWxsRGF0YUVTMl9SS05TXzdBcmdMaXN0RQogX19aTjNKU0M2SlNDZWxs
MTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNKU0M2SlNDZWxsMTFnZXRKU051bWJl
ckV2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuY3BwCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDI3ICsyODgsMjgg
QEAgdm9pZCBBUk1Bc3NlbWJsZXI6OmRhdGFUcmFuc2ZlcjMyKGJvb2wgaQogICAgIH0KIH0KIAot
dm9pZCBBUk1Bc3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lz
dGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSwgaW50MzJfdCBvZmZzZXQpCit2b2lkIEFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIz
Mihib29sIGlzTG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBpbnQzMl90IG9mZnNldCwgYm9vbCBieXRlcykKIHsKICAg
ICBBUk1Xb3JkIG9wMjsKKyAgICBBUk1Xb3JkIHRyYW5zZmVyRmxhZyA9IGJ5dGVzID8gRFRfQllU
RSA6IDA7CiAKICAgICBBU1NFUlQoc2NhbGUgPj0gMCAmJiBzY2FsZSA8PSAzKTsKICAgICBvcDIg
PSBsc2woaW5kZXgsIHNjYWxlKTsKIAogICAgIGlmIChvZmZzZXQgPj0gMCAmJiBvZmZzZXQgPD0g
MHhmZmYpIHsKICAgICAgICAgYWRkX3IoQVJNUmVnaXN0ZXJzOjpTMCwgYmFzZSwgb3AyKTsKLSAg
ICAgICAgZHRyX3UoaXNMb2FkLCBzcmNEc3QsIEFSTVJlZ2lzdGVyczo6UzAsIG9mZnNldCk7Cisg
ICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6OlMwLCBvZmZzZXQgfCB0
cmFuc2ZlckZsYWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChvZmZzZXQgPD0g
MCAmJiBvZmZzZXQgPj0gLTB4ZmZmKSB7CiAgICAgICAgIGFkZF9yKEFSTVJlZ2lzdGVyczo6UzAs
IGJhc2UsIG9wMik7Ci0gICAgICAgIGR0cl9kKGlzTG9hZCwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6
OlMwLCAtb2Zmc2V0KTsKKyAgICAgICAgZHRyX2QoaXNMb2FkLCBzcmNEc3QsIEFSTVJlZ2lzdGVy
czo6UzAsICgtb2Zmc2V0ICYgMHhmZmYpIHwgdHJhbnNmZXJGbGFnKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGxkcl91bl9pbW0oQVJNUmVnaXN0ZXJzOjpTMCwgb2Zmc2V0KTsKICAg
ICBhZGRfcihBUk1SZWdpc3RlcnM6OlMwLCBBUk1SZWdpc3RlcnM6OlMwLCBvcDIpOwotICAgIGR0
cl91cihpc0xvYWQsIHNyY0RzdCwgYmFzZSwgQVJNUmVnaXN0ZXJzOjpTMCk7CisgICAgZHRyX3Vy
KGlzTG9hZCwgc3JjRHN0LCBiYXNlLCBBUk1SZWdpc3RlcnM6OlMwIHwgdHJhbnNmZXJGbGFnKTsK
IH0KIAogdm9pZCBBUk1Bc3NlbWJsZXI6OmRvdWJsZVRyYW5zZmVyKGJvb2wgaXNMb2FkLCBGUFJl
Z2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zmc2V0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCShyZXZp
c2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1NSw3ICs4NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gTWVtb3J5IGxvYWQvc3RvcmUgaGVscGVycwogCiAgICAgICAgIHZvaWQgZGF0
YVRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJh
c2UsIGludDMyX3Qgb2Zmc2V0LCBib29sIGJ5dGVzID0gZmFsc2UpOwotICAgICAgICB2b2lkIGJh
c2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgaW50MzJfdCBvZmZzZXQpOwor
ICAgICAgICB2b2lkIGJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQg
c3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgaW50
MzJfdCBvZmZzZXQsIGJvb2wgYnl0ZXMgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZG91YmxlVHJh
bnNmZXIoYm9vbCBpc0xvYWQsIEZQUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwg
aW50MzJfdCBvZmZzZXQpOwogCiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wgaG5hZGxlcnMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmgJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuZGF0YVRyYW5zZmVyMzIodHJ1ZSwgZGVz
dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgdHJ1ZSk7CiAgICAgfQogCisgICAgdm9p
ZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYmFzZUluZGV4VHJhbnNmZXIzMih0cnVlLCBkZXN0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIHN0YXRpY19jYXN0PGludD4oYWRkcmVzcy5zY2FsZSksIGFkZHJl
c3Mub2Zmc2V0LCB0cnVlKTsKKyAgICB9CisKICAgICB2b2lkIGxvYWQzMihJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
ZGF0YVRyYW5zZmVyMzIodHJ1ZSwgZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7
CkBAIC00MDksNiArNDE0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIEFSTVJlZ2lzdGVyczo6UzEsIHJpZ2h0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDgo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRkZGMDAp
KTsKKyAgICAgICAgbG9hZDMyKGxlZnQsIEFSTVJlZ2lzdGVyczo6UzEpOworICAgICAgICByZXR1
cm4gYnJhbmNoMzIoY29uZCwgQVJNUmVnaXN0ZXJzOjpTMSwgcmlnaHQpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1fdmFs
dWUgJiAweEZGRkYwMDAwKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCBy
aWdodCk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgaW50IHVzZUNvbnN0YW50UG9v
bCA9IDApCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCByaWdodCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDYg
KzQ4MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ4KHNldHVwQXJtQWRkcmVzcyhhZGRyZXNz
KSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgoc2V0dXBBcm1BZGRyZXNzKGFkZHJl
c3MpLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAg
ICAgICAgIERhdGFMYWJlbDMyIGxhYmVsID0gbW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tMzIoYWRk
cmVzcy5vZmZzZXQpLCBkYXRhVGVtcFJlZ2lzdGVyKTsKQEAgLTk2Myw2ICs5NjgsMTIgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgYWRk
cmVzc1RlbXBSZWdpc3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCEoMHhmZmZmMDAwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisgICAgCiAgICAg
SnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBU
cnVzdGVkSW1tMzIgcmlnaHQpCiAgICAgewogICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdp
c3RlciBpbmNhc2UgdGhlIGJyYW5jaDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6
LS8KQEAgLTk3OSwxMSArOTkwLDIwIEBAIHB1YmxpYzoKIAogICAgIEp1bXAgYnJhbmNoOChSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEoMHhmZmZmZmYwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKICAg
ICAgICAgLy8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2g4IHdlIGNh
bGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KICAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVz
c1RlbXBSZWdpc3Rlcik7CiAgICAgICAgIHJldHVybiBicmFuY2g4KGNvbmQsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIsIHJpZ2h0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCEoMHhmZmZmZmYwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKKyAgICAgICAg
Ly8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVz
ZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdp
c3RlciwgcmlnaHQpOworICAgIH0KKyAgICAKICAgICBKdW1wIGJyYW5jaFRlc3QzMihSZXN1bHRD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLnRzdChyZWcsIG1hc2spOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lv
biA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw2ICs0OTYsMzUgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgfQogCisgICAgdm9pZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAm
JiBhZGRyZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkg
eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNz
LmluZGV4LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRk
clRlbXAsIGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgIGxidSAgICAgZGVzdCwgYWRkcmVzcy5v
ZmZzZXQoYWRkclRlbXApCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnNsbChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdp
c3RlciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxidShkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUKKyAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwg
YWRkcmVzcy5iYXNlCisgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVzcy5vZmZz
ZXQgKyAweDgwMDApID4+IDE2CisgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRl
bXAsIGltbVRlbXAKKyAgICAgICAgICAgICBsYnUgICAgIGRlc3QsIChhZGRyZXNzLm9mZnNldCAm
IDB4ZmZmZikoYXQpCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNs
bChhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rl
ciwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVn
aXN0ZXIsIChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubGJ1KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0g
LTMyNzY4ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CkBAIC05MzIsNiArOTYxLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGlt
bVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkZGRjAwKSk7CisgICAgICAgIGxv
YWQ4KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQg
dGhlIHByZXZpb3VzIGxvYWQ4KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNv
LCB3ZSBuZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDgoKS4KKyAgICAgICAgbW92ZShyaWdo
dCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gz
MihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCkKICAgICB7CiAgICAgICAgIGlmIChjb25kID09IEVxdWFsKQpAQCAtMTAzMiw2ICsxMDcx
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gxNihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbW1lZGlhdGUgdmFsdWUgaXMgdW5z
aWduZWQgMTYgYml0cy4KKyAgICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRjAw
MDApKTsgICAgICAgIAorICAgICAgICBtb3ZlKHJpZ2h0LCBpbW1UZW1wUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICB9
CisKICAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBsb2FkMTYobGVmdCwgZGF0
YVRlbXBSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyU0g0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTA5LDYgKzUwOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ4KGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDgoQmFzZUlu
ZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsK
KyAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAg
ICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQ4KHNjciwgYWRkcmVz
cy5vZmZzZXQsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwog
ICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewogICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwpAQCAtMTM1Miw2ICsx
MzYyLDQwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKICAgICB9CiAK
KyAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVm
dCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmlnaHQubV92
YWx1ZSAmIDB4RkZGRkZGMDApKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMy
KFRydXN0ZWRJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAobGVmdC5vZmZz
ZXQpCisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobGVmdC5vZmZzZXQpLCBzY3IpOwor
ICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQ4KHNjciwgc2NyKTsK
KyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFs
dWUsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IxKTsKKworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyLCBzY3Ix
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBBU1NF
UlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBpZiAoKChjb25kID09
IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3ZhbHVlKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcobGVmdCwgbGVmdCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBsZWZ0LCBjb25kKTsKKworICAg
ICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxz
ZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKwogICAgIEp1bXAgYnJh
bmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCAgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQpCiAgICAgewogICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NSw2ICs0NzUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRGF0YUxh
YmVsQ29tcGFjdCh0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIGxvYWQ4KEJhc2VJbmRleCBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6Ymxf
bXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnp3bF9tcihh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxl
LCBkZXN0KTsKQEAgLTg3Myw2ICs4NzgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoMTYoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVx
dWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9y
cihsZWZ0LCBsZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21w
d19pcihyaWdodC5tX3ZhbHVlLCBsZWZ0KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoMTYo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHdfcm0ocmlnaHQsIGxlZnQub2Zmc2V0
LCBsZWZ0LmJhc2UsIGxlZnQuaW5kZXgsIGxlZnQuc2NhbGUpOwpAQCAtOTU2LDYgKzk3MCwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRp
b24oY29uZCkpKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRkZGMDApKTsKKworICAgICAgICBtX2Fz
c2VtYmxlci5jbXBiX2ltKHJpZ2h0Lm1fdmFsdWUsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGxl
ZnQuaW5kZXgsIGxlZnQuc2NhbGUpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
Q0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCiAgICAgSnVtcCBqdW1wKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gOTQ1
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NDIsNiArODQyLDE5IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYK
IAorICAgIHZvaWQgY21wd19pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3AoT1BfR1JPVVAxX0V2SWIsIEdST1VQMV9PUF9DTVAsIGRzdCk7CisgICAgICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CisgICAgICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAxX0V2SXosIEdST1VQMV9PUF9DTVAsIGRzdCk7
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGUxNihpbW0pOworICAgICAgICB9Cisg
ICAgfQorCiAgICAgdm9pZCBjbXB3X3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKICAgICB7CiAgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfT1BFUkFORF9TSVpFKTsKQEAgLTExNTksNiArMTE3Miwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfTU9WWlhfR3ZF
dywgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBt
b3Z6YmxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBp
bnQgc2NhbGUsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdv
Qnl0ZU9wKE9QMl9NT1ZaWF9HdkViLCBkc3QsIGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KTsK
KyAgICB9CisKICAgICB2b2lkIG1vdnpibF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewogICAgICAgICAvLyBJbiA2NC1iaXQsIHRoaXMgbWF5IGNhdXNlIGFuIHVubmVj
ZXNzYXJ5IFJFWCB0byBiZSBwbGFudGVkIChpZiB0aGUgZHN0IHJlZ2lzdGVyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDk0NTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjY3LDI2ICsyNjcsMjYgQEAgUmVnRXhwKiBSZWdFeHA6OmNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsbwogICAgIHJldHVybiBnbG9iYWxEYXRhLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRl
KHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKIH0KIAotdm9pZCBSZWdFeHA6OmNvbXBpbGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQordm9pZCBSZWdFeHA6OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCiB7Ci0gICAgQVNTRVJUKG1f
c3RhdGUgPT0gTm90Q29tcGlsZWQpOwotICAgIG1fcmVwcmVzZW50YXRpb24gPSBhZG9wdFB0cihu
ZXcgUmVnRXhwUmVwcmVzZW50YXRpb24pOwogICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4o
bV9wYXR0ZXJuU3RyaW5nLCBpZ25vcmVDYXNlKCksIG11bHRpbGluZSgpLCAmbV9jb25zdHJ1Y3Rp
b25FcnJvcik7CiAgICAgaWYgKG1fY29uc3RydWN0aW9uRXJyb3IpIHsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIG1fc3RhdGUgPSBQYXJzZUVycm9yOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotCi0gICAgZ2xvYmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJv
bmdDYWNoZSh0aGlzKTsKLQogICAgIEFTU0VSVChtX251bVN1YnBhdHRlcm5zID09IHBhdHRlcm4u
bV9udW1TdWJwYXR0ZXJucyk7CiAKLSAgICBtX3N0YXRlID0gQnl0ZUNvZGU7CisgICAgaWYgKCFt
X3JlcHJlc2VudGF0aW9uKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vdENvbXBpbGVk
KTsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBSZWdFeHBSZXByZXNl
bnRhdGlvbik7CisgICAgICAgIGdsb2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25n
Q2FjaGUodGhpcyk7CisgICAgICAgIG1fc3RhdGUgPSBCeXRlQ29kZTsKKyAgICB9CiAKICNpZiBF
TkFCTEUoWUFSUl9KSVQpCiAgICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNl
cyAmJiBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkgewotICAgICAgICBZYXJyOjpqaXRDb21waWxl
KHBhdHRlcm4sIGdsb2JhbERhdGEsIG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSk7
CisgICAgICAgIFlhcnI6OmppdENvbXBpbGUocGF0dGVybiwgY2hhclNpemUsIGdsb2JhbERhdGEs
IG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSk7CiAjaWYgRU5BQkxFKFlBUlJfSklU
X0RFQlVHKQogICAgICAgICBpZiAoIW1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZS5p
c0ZhbGxCYWNrKCkpCiAgICAgICAgICAgICBtX3N0YXRlID0gSklUQ29kZTsKQEAgLTMwNCw2ICsz
MDQsMjEgQEAgdm9pZCBSZWdFeHA6OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYQogICAgIG1f
cmVwcmVzZW50YXRpb24tPm1fcmVnRXhwQnl0ZWNvZGUgPSBZYXJyOjpieXRlQ29tcGlsZShwYXR0
ZXJuLCAmZ2xvYmFsRGF0YS0+bV9yZWdFeHBBbGxvY2F0b3IpOwogfQogCit2b2lkIFJlZ0V4cDo6
Y29tcGlsZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgWWFycjo6WWFyckNo
YXJTaXplIGNoYXJTaXplKQoreworICAgIGlmIChtX3JlcHJlc2VudGF0aW9uKSB7CisgICAgICAg
IGlmIChtX3N0YXRlICE9IEpJVENvZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjgpICYmIChtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4
cEpJVENvZGUuaGFzOEJpdENvZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjE2KSAmJiAobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdF
eHBKSVRDb2RlLmhhczE2Qml0Q29kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjb21waWxlKCZnbG9iYWxEYXRhLCBjaGFyU2l6ZSk7Cit9CisKKwogaW50IFJlZ0V4cDo6
bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzLCBpbnQgc3Rh
cnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiogb3ZlY3RvcikKIHsKICAgICBpZiAoc3RhcnRPZmZz
ZXQgPCAwKQpAQCAtMzE3LDcgKzMzMiw3IEBAIGludCBSZWdFeHA6Om1hdGNoKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGEKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKG1fc3RhdGUgIT0gUGFy
c2VFcnJvcikgewotICAgICAgICBjb21waWxlSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CisgICAg
ICAgIGNvbXBpbGVJZk5lY2Vzc2FyeShnbG9iYWxEYXRhLCBzLmlzOEJpdCgpID8gWWFycjo6Q2hh
cjggOiBZYXJyOjpDaGFyMTYpOwogCiAgICAgICAgIGludCBvZmZzZXRWZWN0b3JTaXplID0gKG1f
bnVtU3VicGF0dGVybnMgKyAxKSAqIDI7CiAgICAgICAgIGludCogb2Zmc2V0VmVjdG9yOwpAQCAt
MzQwLDEzICszNTUsMTYgQEAgaW50IFJlZ0V4cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YQogICAgICAgICBpbnQgcmVzdWx0OwogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICAgICAgaWYg
KG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0
ZShtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUsIHMuY2hhcmFjdGVycygpLCBzdGFy
dE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgIGlmIChzLmlz
OEJpdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUobV9yZXByZXNl
bnRhdGlvbi0+bV9yZWdFeHBKSVRDb2RlLCBzLmxhdGluMSgpLmRhdGEoKSwgc3RhcnRPZmZzZXQs
IHMubGVuZ3RoKCksIG9mZnNldFZlY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJ
VENvZGUsIHMuY2hhcmFjdGVycygpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVj
dG9yKTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfREVCVUcpCiAgICAgICAgICAgICBtYXRjaENvbXBh
cmVXaXRoSW50ZXJwcmV0ZXIocywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsK
ICNlbmRpZgogICAgICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgcmVzdWx0ID0gWWFy
cjo6aW50ZXJwcmV0KG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMu
Y2hhcmFjdGVycygpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlcHJlc2VudGF0aW9uLT5tX3Jl
Z0V4cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVj
dG9yKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdCA+PSAtMSk7CiAKICNpZiBSRUdFWFBfRlVOQ19U
RVNUX0RBVEFfR0VOCkBAIC0zODgsNyArNDA2LDcgQEAgdm9pZCBSZWdFeHA6Om1hdGNoQ29tcGFy
ZVdpdGhJbnRlcnByZXRlcgogICAgIGZvciAodW5zaWduZWQgaiA9IDAsIGkgPSAwOyBpIDwgbV9u
dW1TdWJwYXR0ZXJucyArIDE7IGogKz0gMiwgaSsrKQogICAgICAgICBpbnRlcnByZXRlck9mZnNl
dFZlY3RvcltqXSA9IC0xOwogCi0gICAgaW50ZXJwcmV0ZXJSZXN1bHQgPSBZYXJyOjppbnRlcnBy
ZXQobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBCeXRlY29kZS5nZXQoKSwgcy5jaGFyYWN0ZXJz
KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBpbnRlcnByZXRlck9mZnNldFZlY3Rvcik7Cisg
ICAgaW50ZXJwcmV0ZXJSZXN1bHQgPSBZYXJyOjppbnRlcnByZXQobV9yZXByZXNlbnRhdGlvbi0+
bV9yZWdFeHBCeXRlY29kZS5nZXQoKSwgcywgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIGludGVy
cHJldGVyT2Zmc2V0VmVjdG9yKTsKIAogICAgIGlmIChqaXRSZXN1bHQgIT0gaW50ZXJwcmV0ZXJS
ZXN1bHQpCiAgICAgICAgIGRpZmZlcmVuY2VzKys7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNp
bmNsdWRlICJSZWdFeHBLZXkuaCIKKyNpbmNsdWRlICJ5YXJyL1lhcnIuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTkxLDEzICs5
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgTm90Q29tcGlsZWQKICAgICAgICAg
fSBtX3N0YXRlOwogCi0gICAgICAgIHZvaWQgY29tcGlsZShKU0dsb2JhbERhdGEqKTsKLSAgICAg
ICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9yZXByZXNlbnRhdGlvbikKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBjb21waWxlKCZnbG9iYWxEYXRhKTsKLSAgICAgICAgfQor
ICAgICAgICB2b2lkIGNvbXBpbGUoSlNHbG9iYWxEYXRhKiwgWWFycjo6WWFyckNoYXJTaXplKTsK
KyAgICAgICAgdm9pZCBjb21waWxlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgWWFycjo6WWFy
ckNoYXJTaXplKTsKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9ERUJVRykKICAgICAgICAgdm9pZCBt
YXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0ZXIoY29uc3QgVVN0cmluZyYsIGludCBzdGFydE9mZnNl
dCwgaW50KiBvZmZzZXRWZWN0b3IsIGludCBqaXRSZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzKCk7CiAgICAg
fQogCisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQ1N0
cmluZyBhc2NpaSgpIGNvbnN0OwogICAgIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CiAgICAgQ1N0
cmluZyB1dGY4KGJvb2wgc3RyaWN0ID0gZmFsc2UpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnIuaAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDEzIEBAIGVudW0gSlNSZWdF
eHBSZXN1bHQgewogICAgIEpTUmVnRXhwRXJyb3JJbnRlcm5hbCA9IC00CiB9OwogCitlbnVtIFlh
cnJDaGFyU2l6ZSB7CisgICAgQ2hhcjgsCisgICAgQ2hhcjE2Cit9OworCiBQYXNzT3duUHRyPEJ5
dGVjb2RlUGF0dGVybj4gYnl0ZUNvbXBpbGUoWWFyclBhdHRlcm4mLCBCdW1wUG9pbnRlckFsbG9j
YXRvciopOwotaW50IGludGVycHJldChCeXRlY29kZVBhdHRlcm4qLCBjb25zdCBVQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KTsKK2ludCBp
bnRlcnByZXQoQnl0ZWNvZGVQYXR0ZXJuKiwgY29uc3QgVVN0cmluZyYgaW5wdXQsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OllhcnIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDEw
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiWWFyckludGVycHJldGVyLmgiCiAK
KyNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgPHd0Zi9C
dW1wUG9pbnRlckFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
I2lmbmRlZiBOREVCVUcKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTY2LDkgKzE2OCw2MSBAQCBw
dWJsaWM6CiAgICAgICAgIGFsbG9jYXRvclBvb2wgPSBhbGxvY2F0b3JQb29sLT5kZWFsbG9jKGNv
bnRleHQpOwogICAgIH0KIAorICAgIGNsYXNzIENoYXJBY2Nlc3MgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgQ2hhckFjY2Vzcyhjb25zdCBVU3RyaW5nJiBzKQorICAgICAgICAgICAgOiBtX2J1ZmZl
cigwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocy5pczhCaXQoKSkgeworICAgICAgICAg
ICAgICAgIG1fY2hhclNpemUgPSBDaGFyODsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1fcHRyLnB0cjggPSBtX2J1ZmZlciA9
IHN0YXRpY19jYXN0PGNoYXIgKj4oZmFzdE1hbGxvYyhsZW5ndGgpKTsKKyAgICAgICAgICAgICAg
ICBtZW1jcHkobV9idWZmZXIsIHMubGF0aW4xKCkuZGF0YSgpLCBsZW5ndGgpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2NoYXJTaXplID0gQ2hhcjE2OworICAgICAg
ICAgICAgICAgIG1fcHRyLnB0cjE2ID0gcy5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBDaGFyQWNjZXNzKGNvbnN0IGNoYXIqIHB0cikKKyAgICAgICAg
ICAgIDogbV9jaGFyU2l6ZShDaGFyOCkKKyAgICAgICAgICAgICwgbV9idWZmZXIoMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9wdHIucHRyOCA9IHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IENoYXJBY2Nlc3MoY29uc3QgVUNoYXIqIHB0cikKKyAgICAgICAgICAgIDogbV9jaGFyU2l6ZShD
aGFyMTYpCisgICAgICAgICAgICAsIG1fYnVmZmVyKDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fcHRyLnB0cjE2ID0gcHRyOworICAgICAgICB9CisKKyAgICAgICAgfkNoYXJBY2Nlc3MoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAg
ICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUg
VUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHRyLnB0
cjhbaW5kZXhdOworICAgICAgICAgICAgcmV0dXJuIG1fcHRyLnB0cjE2W2luZGV4XTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgY29uc3Qg
Y2hhciogcHRyODsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBwdHIxNjsKKyAgICAgICAgfSBt
X3B0cjsKKyAgICAgICAgWWFyckNoYXJTaXplIG1fY2hhclNpemU7CisgICAgICAgIGNoYXIqIG1f
YnVmZmVyOworICAgIH07CisKICAgICBjbGFzcyBJbnB1dFN0cmVhbSB7CiAgICAgcHVibGljOgot
ICAgICAgICBJbnB1dFN0cmVhbShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIElucHV0U3RyZWFtKGNvbnN0IFVTdHJpbmcmIGlucHV0
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICAgICAgOiBpbnB1dChp
bnB1dCkKICAgICAgICAgICAgICwgcG9zKHN0YXJ0KQogICAgICAgICAgICAgLCBsZW5ndGgobGVu
Z3RoKQpAQCAtMjc4LDcgKzMzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0OworICAgICAgICBDaGFyQWNjZXNzIGlucHV0
OwogICAgICAgICB1bnNpZ25lZCBwb3M7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICB9
OwpAQCAtMTQyMCwxMCArMTQ3NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvdXRwdXRb
MF07CiAgICAgfQogCi0gICAgSW50ZXJwcmV0ZXIoQnl0ZWNvZGVQYXR0ZXJuKiBwYXR0ZXJuLCBp
bnQqIG91dHB1dCwgY29uc3QgVUNoYXIqIGlucHV0Q2hhciwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCkKKyAgICBJbnRlcnByZXRlcihCeXRlY29kZVBhdHRlcm4qIHBhdHRlcm4sIGlu
dCogb3V0cHV0LCBjb25zdCBVU3RyaW5nIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
bGVuZ3RoKQogICAgICAgICA6IHBhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBvdXRwdXQob3V0
cHV0KQotICAgICAgICAsIGlucHV0KGlucHV0Q2hhciwgc3RhcnQsIGxlbmd0aCkKKyAgICAgICAg
LCBpbnB1dChpbnB1dCwgc3RhcnQsIGxlbmd0aCkKICAgICAgICAgLCBhbGxvY2F0b3JQb29sKDAp
CiAgICAgICAgICwgcmVtYWluaW5nTWF0Y2hDb3VudChtYXRjaExpbWl0KQogICAgIHsKQEAgLTE5
MTAsNyArMTk2NCw3IEBAIFBhc3NPd25QdHI8Qnl0ZWNvZGVQYXR0ZXJuPiBieXRlQ29tcGlsZSgK
ICAgICByZXR1cm4gQnl0ZUNvbXBpbGVyKHBhdHRlcm4pLmNvbXBpbGUoYWxsb2NhdG9yKTsKIH0K
IAotaW50IGludGVycHJldChCeXRlY29kZVBhdHRlcm4qIGJ5dGVjb2RlLCBjb25zdCBVQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQoraW50
IGludGVycHJldChCeXRlY29kZVBhdHRlcm4qIGJ5dGVjb2RlLCBjb25zdCBVU3RyaW5nJiBpbnB1
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCiB7CiAgICAg
cmV0dXJuIEludGVycHJldGVyKGJ5dGVjb2RlLCBvdXRwdXQsIGlucHV0LCBzdGFydCwgbGVuZ3Ro
KS5pbnRlcnByZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsMTkgKzI1NiwxOSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RF
cXVhbCwgaW5kZXgsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZDaGFyRXF1YWxz
KFVDaGFyIGNoLCBpbnQgaW5wdXRQb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBicmFu
Y2gxNihFcXVhbCwgQmFzZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28sIGlucHV0UG9zaXRp
b24gKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2gpKTsKLSAgICB9Ci0KICAgICBKdW1wIGp1bXBJ
ZkNoYXJOb3RFcXVhbHMoVUNoYXIgY2gsIGludCBpbnB1dFBvc2l0aW9uKQogICAgIHsKKyAgICAg
ICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoOChO
b3RFcXVhbCwgQmFzZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNPbmUsIGlucHV0UG9zaXRpb24g
KiBzaXplb2YoY2hhcikpLCBJbW0zMihjaCkpOwogICAgICAgICByZXR1cm4gYnJhbmNoMTYoTm90
RXF1YWwsIEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBpbnB1dFBvc2l0aW9uICog
c2l6ZW9mKFVDaGFyKSksIEltbTMyKGNoKSk7CiAgICAgfQogCiAgICAgdm9pZCByZWFkQ2hhcmFj
dGVyKGludCBpbnB1dFBvc2l0aW9uLCBSZWdpc3RlcklEIHJlZykKICAgICB7Ci0gICAgICAgIGxv
YWQxNihCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgaW5wdXRQb3NpdGlvbiAqIHNp
emVvZihVQ2hhcikpLCByZWcpOworICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAg
ICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzT25lLCBpbnB1dFBv
c2l0aW9uICogc2l6ZW9mKGNoYXIpKSwgcmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bG9hZDE2KEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBpbnB1dFBvc2l0aW9uICog
c2l6ZW9mKFVDaGFyKSksIHJlZyk7CiAgICAgfQogCiAgICAgdm9pZCBzdG9yZVRvRnJhbWUoUmVn
aXN0ZXJJRCByZWcsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCkBAIC02NTgsNiArNjU4LDEyIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAgICAgUGF0dGVy
blRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyIGNoID0gdGVybS0+cGF0dGVy
bkNoYXJhY3RlcjsKIAorICAgICAgICBpZiAoKGNoID4gMHhmZikgJiYgKG1fY2hhclNpemUgPT0g
Q2hhcjgpKSB7CisgICAgICAgICAgICAvLyBIYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVy
IGFuZCBhbiA4IGJpdCBzdHJpbmcgLSBzaG9ydCBjaXJjdWl0CisgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKIAogICAgICAgICBpZiAo
bmV4dE9wLm1fb3AgPT0gT3BUZXJtKSB7CkBAIC02NjksMjQgKzY3NSwzNCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgICAgICAgICBVQ2hhciBj
aDIgPSBuZXh0VGVybS0+cGF0dGVybkNoYXJhY3RlcjsKIAorICAgICAgICAgICAgICAgIGludCBz
aGlmdEFtb3VudCA9IG1fY2hhclNpemUgPT0gQ2hhcjggPyA4IDogMTY7CiAgICAgICAgICAgICAg
ICAgaW50IG1hc2sgPSAwOwotICAgICAgICAgICAgICAgIGludCBjaFBhaXIgPSBjaCB8IChjaDIg
PDwgMTYpOworICAgICAgICAgICAgICAgIGludCBjaFBhaXIgPSBjaCB8IChjaDIgPDwgc2hpZnRB
bW91bnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXNrIHw9IDMyOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSUFs
cGhhKGNoMikpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDMyIDw8IDE2OworICAg
ICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAzMiA8PCBzaGlmdEFtb3VudDsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwgaW5k
ZXgsIFRpbWVzVHdvLCAodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkgKiBzaXplb2Yo
VUNoYXIpKTsKLSAgICAgICAgICAgICAgICBpZiAobWFzaykgewotICAgICAgICAgICAgICAgICAg
ICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGFkZHJlc3MsIGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKGNoUGFpciB8IG1hc2spKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZX
b3JkcyhOb3RFcXVhbCwgYWRkcmVzcywgSW1tMzIoY2hQYWlyKSkpOwotCisgICAgICAgICAgICAg
ICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzZUlu
ZGV4IGFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwgKHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQpICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1h
c2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBjaGFyYWN0ZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDE2KE5vdEVx
dWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoUGFpciB8IG1hc2spKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJh
bmNoMTYoTm90RXF1YWwsIGFkZHJlc3MsIEltbTMyKGNoUGFpcikpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwg
aW5kZXgsIFRpbWVzVHdvLCAodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkgKiBzaXpl
b2YoVUNoYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoYWRkcmVzcywgY2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBhaXIgfCBtYXNrKSkpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgYWRkcmVzcywgSW1tMzIo
Y2hQYWlyKSkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXh0T3AubV9p
c0RlYWRDb2RlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CkBAIC03MTksMTUgKzczNSwyMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtCiAgICAgICAgIHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZlR2V0
KCkpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAg
ICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChDaGVj
a2VkPGludD4odGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRf
dD4odGVybS0+cXVhbnRpdHlDb3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoVUNoYXIp
KSkudW5zYWZlR2V0KCkpOworICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwgY291bnRS
ZWdpc3RlciwgbV9jaGFyU2NhbGUsIChDaGVja2VkPGludD4odGVybS0+aW5wdXRQb3NpdGlvbiAt
IG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVybS0+cXVhbnRpdHlDb3VudCkpICogc3Rh
dGljX2Nhc3Q8aW50PihtX2NoYXJTaXplID09IENoYXI4ID8gc2l6ZW9mKGNoYXIpIDogc2l6ZW9m
KFVDaGFyKSkpLnVuc2FmZUdldCgpKTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3Jl
Q2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywg
Y2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAg
ICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3MsIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBv
cjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBvcC5tX2p1bXBz
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xv
d2VyKGNoKSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0
ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9V
cHBlcihjaCkpKTsKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDE2KE5vdEVx
dWFsLCBhZGRyZXNzLCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09
IENoYXI4KQorICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDgoTm90RXF1
YWwsIGFkZHJlc3MsIEltbTMyKGNoKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDE2KE5vdEVxdWFsLCBhZGRyZXNzLCBJbW0zMihj
aCkpKTsKICAgICAgICAgfQogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVn
aXN0ZXIpOwogICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgaW5kZXgp
LmxpbmtUbyhsb29wLCB0aGlzKTsKQEAgLTc0OCwyNiArNzcwLDMxIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KIAogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgY291bnRSZWdpc3Rlcik7CiAKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAg
IExhYmVsIGxvb3AodGhpcyk7Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQo
KSk7Ci0gICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShj
aCkpIHsKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1f
Y2hlY2tlZCwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwg
Y2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkpKTsKKyAgICAgICAgaWYg
KChjaCA+IDB4ZmYpICYmIChtX2NoYXJTaXplID09IENoYXI4KSkgeworICAgICAgICAgICAgLy8g
SGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hv
cnQgY2lyY3VpdAorICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8
fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkpKTsKLSAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1
dFBvc2l0aW9uIC0gbV9jaGVja2VkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIGluZGV4KTsKLSAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQgPT0gcXVhbnRpZnlJ
bmZpbml0ZSkKLSAgICAgICAgICAgIGp1bXAobG9vcCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0
eUNvdW50LnVuc2FmZUdldCgpKSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgSnVt
cExpc3QgZmFpbHVyZXM7CisgICAgICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKKyAgICAgICAgICAgIGlmIChtX3Bh
dHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShjaCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFj
dGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmlj
b2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1VwcGVyKGNoKSkpOworICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBv
c2l0aW9uIC0gbV9jaGVja2VkKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50
ID09IHF1YW50aWZ5SW5maW5pdGUpCisgICAgICAgICAgICAgICAganVtcChsb29wKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdp
c3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC51bnNhZmVHZXQoKSkpLmxpbmtUbyhsb29w
LCB0aGlzKTsKIAotICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFp
bHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgfQogICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOwogCiAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxv
Y2F0aW9uKTsKQEAgLTgxNSwyNCArODQyLDI5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW0KIAogICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRp
b24sIGNvdW50UmVnaXN0ZXIpOwogCi0gICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChh
dEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ICE9IHF1YW50
aWZ5SW5maW5pdGUpCi0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNo
MzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZl
R2V0KCkpKSk7Ci0gICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlB
bHBoYShjaCkpIHsKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlv
biAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMy
KDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkp
KTsKKyAgICAgICAgaWYgKChjaCA+IDB4ZmYpICYmIChtX2NoYXJTaXplID09IENoYXI4KSkgewor
ICAgICAgICAgICAgLy8gSGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBi
aXQgc3RyaW5nIC0gc2hvcnQgY2lyY3VpdAorICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1f
cGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6
OnRvVXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVt
cElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVy
KTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBu
b25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOworICAgICAgICAgICAgaWYg
KHRlcm0tPnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKKyAgICAgICAgICAgICAg
ICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIs
IEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZlR2V0KCkpKSk7CisgICAgICAgICAgICBp
ZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7CisgICAgICAg
ICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBj
aGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1faWdu
b3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkp
KTsKKyAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5v
dEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkpOworICAgICAgICAg
ICAgfQogCi0gICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGluZGV4KTsKIAorICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAg
ICAgICB9CiAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmxpbmsodGhpcyk7CisKICAgICAgICAg
c3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOwogICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRl
LmZhbGx0aHJvdWdoKCk7CiAgICAgfQpAQCAtODczLDcgKzkwNSwxMCBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsK
ICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlu
cHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKENoZWNrZWQ8aW50Pih0ZXJtLT5pbnB1dFBv
c2l0aW9uIC0gbV9jaGVja2VkICsgQ2hlY2tlZDxpbnQ2NF90Pih0ZXJtLT5xdWFudGl0eUNvdW50
KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihVQ2hhcikpKS51bnNhZmVHZXQoKSksIGNoYXJh
Y3Rlcik7CisgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAgICAgbG9h
ZDgoQmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc09uZSwgKENoZWNrZWQ8aW50
Pih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgQ2hlY2tlZDxpbnQ2NF90Pih0ZXJt
LT5xdWFudGl0eUNvdW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihjaGFyKSkpLnVuc2Fm
ZUdldCgpKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZDE2KEJh
c2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChDaGVja2VkPGludD4odGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVybS0+cXVh
bnRpdHlDb3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoVUNoYXIpKSkudW5zYWZlR2V0
KCkpLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3Rlciwg
bWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAgaWYgKHRlcm0tPmlu
dmVydCgpKQpAQCAtMTAxNiw3ICsxMDUxLDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW0KICAgICAgICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5kKGJyYW5jaFRlc3Qz
MihaZXJvLCBtYXRjaFBvcykpOwogICAgICAgICBMYWJlbCBmaW5kQk9MTG9vcCh0aGlzKTsKICAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7Ci0gICAgICAgIGxvYWQxNihC
YXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc1R3bywgMCksIGNoYXJhY3Rlcik7CisgICAg
ICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4
KGlucHV0LCBtYXRjaFBvcywgVGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28s
IDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3Rlciwg
Zm91bmRCZWdpbm5pbmdOZXdMaW5lLCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkp
OwogICAgICAgICBicmFuY2hUZXN0MzIoTm9uWmVybywgbWF0Y2hQb3MpLmxpbmtUbyhmaW5kQk9M
TG9vcCwgdGhpcyk7CiAgICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChqdW1wKCkpOwpAQCAt
MTAzNCw3ICsxMDcyLDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZW0KIAogICAgICAgICBMYWJlbCBmaW5kRU9MTG9vcCh0aGlzKTsgICAgICAgIAogICAgICAgICBm
b3VuZEVuZGluZ05ld0xpbmUuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBtYXRjaFBvcywgbGVuZ3Ro
KSk7Ci0gICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc1R3bywg
MCksIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAg
ICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNPbmUsIDApLCBjaGFy
YWN0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0
LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJh
Y3RlckNsYXNzKGNoYXJhY3RlciwgZm91bmRFbmRpbmdOZXdMaW5lLCBtX3BhdHRlcm4ubmV3bGlu
ZUNoYXJhY3RlckNsYXNzKCkpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIG1hdGNo
UG9zKTsKICAgICAgICAganVtcChmaW5kRU9MTG9vcCk7CkBAIC0yMzk4LDggKzI0MzksMTAgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgIH0KIAogcHVibGlj
OgotICAgIFlhcnJHZW5lcmF0b3IoWWFyclBhdHRlcm4mIHBhdHRlcm4pCisgICAgWWFyckdlbmVy
YXRvcihZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplKQogICAgICAg
ICA6IG1fcGF0dGVybihwYXR0ZXJuKQorICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCisg
ICAgICAgICwgbV9jaGFyU2NhbGUobV9jaGFyU2l6ZSA9PSBDaGFyOCA/IFRpbWVzT25lOiBUaW1l
c1R3bykKICAgICAgICAgLCBtX3Nob3VsZEZhbGxCYWNrKGZhbHNlKQogICAgICAgICAsIG1fY2hl
Y2tlZCgwKQogICAgIHsKQEAgLTI0MzEsMTMgKzI0NzQsMjAgQEAgcHVibGljOgogICAgICAgICAv
LyBMaW5rICYgZmluYWxpemUgdGhlIGNvZGUuCiAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cigqZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsRGF0YS0+cmVnZXhBbGxvY2F0b3IpOwogICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtEYXRhTGFiZWxzKGxpbmtCdWZmZXIpOwotICAgICAg
ICBqaXRPYmplY3Quc2V0KGxpbmtCdWZmZXIuZmluYWxpemVDb2RlKCkpOworICAgICAgICBpZiAo
bV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGppdE9iamVjdC5zZXQ4Qml0Q29kZShs
aW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaml0
T2JqZWN0LnNldDE2Qml0Q29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICAgICAg
aml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBZYXJyUGF0dGVybiYgbV9wYXR0ZXJuOwogCisgICAgWWFyckNoYXJTaXplIG1fY2hh
clNpemU7CisKKyAgICBTY2FsZSBtX2NoYXJTY2FsZTsKKwogICAgIC8vIFVzZWQgdG8gZGV0ZWN0
IHJlZ3VsYXIgZXhwcmVzc2lvbiBjb25zdHJ1Y3RzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkKICAg
ICAvLyBzdXBwb3J0ZWQgaW4gdGhlIEpJVDsgZmFsbCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlciB3
aGVuIHRoaXMgaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBtX3Nob3VsZEZhbGxCYWNrOwpAQCAtMjQ2
MSw5ICsyNTExLDE0IEBAIHByaXZhdGU6CiAgICAgQmFja3RyYWNraW5nU3RhdGUgbV9iYWNrdHJh
Y2tpbmdTdGF0ZTsKIH07CiAKLXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCit2b2lk
IGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCiB7Ci0g
ICAgWWFyckdlbmVyYXRvcihwYXR0ZXJuKS5jb21waWxlKGdsb2JhbERhdGEsIGppdE9iamVjdCk7
CisgICAgWWFyckdlbmVyYXRvcihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZShnbG9iYWxEYXRh
LCBqaXRPYmplY3QpOworfQorCitpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3Qs
IGNvbnN0IGNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQq
IG91dHB1dCkKK3sKKyAgICByZXR1cm4gaml0T2JqZWN0LmV4ZWN1dGUoaW5wdXQsIHN0YXJ0LCBs
ZW5ndGgsIG91dHB1dCk7CiB9CiAKIGludCBleGVjdXRlKFlhcnJDb2RlQmxvY2smIGppdE9iamVj
dCwgY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBp
bnQqIG91dHB1dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlz
aW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVk
ZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJQYXR0ZXJuLmgiCiAKICNpZiBDUFUoWDg2KSAmJiAh
Q09NUElMRVIoTVNWQykKQEAgLTQ3LDcgKzQ4LDggQEAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiBu
YW1lc3BhY2UgWWFyciB7CiAKIGNsYXNzIFlhcnJDb2RlQmxvY2sgewotICAgIHR5cGVkZWYgaW50
ICgqWWFyckpJVENvZGUpKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpIFlBUlJfQ0FMTDsKKyAgICB0eXBlZGVmIGludCAoKllh
cnJKSVRDb2RlOCkoY29uc3QgY2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgsIGludCogb3V0cHV0KSBZQVJSX0NBTEw7CisgICAgdHlwZWRlZiBpbnQgKCpZYXJySklU
Q29kZTE2KShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIGludCogb3V0cHV0KSBZQVJSX0NBTEw7CiAKIHB1YmxpYzoKICAgICBZYXJyQ29kZUJsb2Nr
KCkKQEAgLTYxLDI0ICs2MywzNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEZhbGxCYWNrKGJv
b2wgZmFsbGJhY2spIHsgbV9uZWVkRmFsbEJhY2sgPSBmYWxsYmFjazsgfQogICAgIGJvb2wgaXNG
YWxsQmFjaygpIHsgcmV0dXJuIG1fbmVlZEZhbGxCYWNrOyB9Ci0gICAgdm9pZCBzZXQoTWFjcm9B
c3NlbWJsZXI6OkNvZGVSZWYgcmVmKSB7IG1fcmVmID0gcmVmOyB9CisgICAgYm9vbCBoYXM4Qml0
Q29kZSgpIHsgcmV0dXJuIG1fcmVmOC5tX3NpemU7IH0KKyAgICBib29sIGhhczE2Qml0Q29kZSgp
IHsgcmV0dXJuIG1fcmVmMTYubV9zaXplOyB9CisgICAgdm9pZCBzZXQ4Qml0Q29kZShNYWNyb0Fz
c2VtYmxlcjo6Q29kZVJlZiByZWYpIHsgbV9yZWY4ID0gcmVmOyB9CisgICAgdm9pZCBzZXQxNkJp
dENvZGUoTWFjcm9Bc3NlbWJsZXI6OkNvZGVSZWYgcmVmKSB7IG1fcmVmMTYgPSByZWY7IH0KIAot
ICAgIGludCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCisgICAgaW50IGV4ZWN1dGUoY29uc3QgY2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAg
ICAgICAgQVNTRVJUKGhhczhCaXRDb2RlKCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxZYXJySklUQ29kZTg+KG1fcmVmOC5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5w
dXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CiAgICAgfQogCisgICAgaW50IGV4ZWN1dGUoY29u
c3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91
dHB1dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGUoKSk7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlMTY+KG1fcmVmMTYubV9jb2RlLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQpOworICAgIH0KICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1f
cmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q29kZVJlZiBtX3JlZjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q29k
ZVJlZiBtX3JlZjg7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNvZGVSZWYgbV9yZWYxNjsKICAgICBi
b29sIG1fbmVlZEZhbGxCYWNrOwogfTsKIAotdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiwg
SlNHbG9iYWxEYXRhKiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KTsKK3ZvaWQgaml0Q29tcGls
ZShZYXJyUGF0dGVybiYsIFlhcnJDaGFyU2l6ZSwgSlNHbG9iYWxEYXRhKiwgWWFyckNvZGVCbG9j
ayYgaml0T2JqZWN0KTsKIGludCBleGVjdXRlKFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgY29u
c3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91
dHB1dCk7CitpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IGNoYXIq
IGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJyUGFyc2VyLmgJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyclBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRlKQogICAgICAgICAsIG1fYmFj
a1JlZmVyZW5jZUxpbWl0KGJhY2tSZWZlcmVuY2VMaW1pdCkKICAgICAgICAgLCBtX2VycihOb0Vy
cm9yKQotICAgICAgICAsIG1fZGF0YShwYXR0ZXJuLmNoYXJhY3RlcnMoKSkKKyAgICAgICAgLCBt
X2RhdGEocGF0dGVybikKICAgICAgICAgLCBtX3NpemUocGF0dGVybi5sZW5ndGgoKSkKICAgICAg
ICAgLCBtX2luZGV4KDApCiAgICAgICAgICwgbV9wYXJlbnRoZXNlc05lc3RpbmdEZXB0aCgwKQpA
QCAtNzkzLDcgKzc5Myw3IEBAIHByaXZhdGU6CiAgICAgRGVsZWdhdGUmIG1fZGVsZWdhdGU7CiAg
ICAgdW5zaWduZWQgbV9iYWNrUmVmZXJlbmNlTGltaXQ7CiAgICAgRXJyb3JDb2RlIG1fZXJyOwot
ICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CisgICAgY29uc3QgVVN0cmluZyYgbV9kYXRhOwogICAg
IHVuc2lnbmVkIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIHVuc2lnbmVkIG1f
cGFyZW50aGVzZXNOZXN0aW5nRGVwdGg7Cg==
</data>
<flag name="review"
          id="103159"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="103164"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106826</attachid>
            <date>2011-09-08 18:43:40 -0700</date>
            <delta_ts>2011-09-09 14:27:53 -0700</delta_ts>
            <desc>Updated patch addressing the concerns raised with the prior patch.</desc>
            <filename>67337-7.patch</filename>
            <type>text/plain</type>
            <size>50744</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDktMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXBkYXRlIFJlZ0V4cCBhbmQgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZSA4IGJpdCBzdHJpbmdz
IHdoZW4gYXZhaWxhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NzMzNworCisgICAgICAgIE1vZGlmaWVkIGJvdGggdGhlIFlhcnIgaW50ZXJwcmV0
ZXIgYW5kIEpJVCB0byBoYW5kbGUgOCBiaXQgc3ViamVjdCBzdHJpbmdzLgorICAgICAgICBUaGUg
Y29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBVU3RyaW5nOjppczhiaXQoKSBtZXRob2Qg
d2hpY2ggY3VycmVudGx5CisgICAgICAgIHJldHVybnMgZmFsc2UuICBJbXBsZW1lbnRlZCBKSVQg
Y2hhbmdlcyBmb3IgYWxsIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgVGVzdGVkIFg4
Nl82NCBhbmQgQVJNIHY3LgorCisgICAgICAgIFRoaXMgaW5jbHVkZXMgc29tZSBjb2RlIHRoYXQg
d2lsbCBsaWtlbHkgY2hhbmdlIGFzIHdlIGNvbXBsZXRlIHRoZQorICAgICAgICA4IGJpdCBzdHJp
bmcgY2hhbmdlcy4gIFRoaXMgaW5jbHVkZXMgdGhlIHdheSB0aGUgcmF3IGJ1ZmZlciBwb2ludGVy
cworICAgICAgICBhcmUgYWNjZXNzZWQgYXMgd2VsbCBhcyByZXBsYWNpbmcgdGhlIENoYXJBY2Nl
c3MgY2xhc3Mgd2l0aCBhCisgICAgICAgIHN0cmluZyBpbnRlcmF0b3IgcmV0dXJuZWQgZnJvbSBV
U3RyaW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogYXNzZW1ibGVyL0FS
TUFzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJh
bnNmZXIzMik6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAq
IGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6dWJmeCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpBUk1JbnN0cnVjdGlvbkZv
cm1hdHRlcjo6dHdvV29yZE9wMTJSZWc0MEltbTNSZWc0SW1tMjBJbW01KToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaDgp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoMTYpOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNdjc6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6
YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpicmFuY2g4KToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ck1JUFM6OmJyYW5jaDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5j
aDE2KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaDoKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmJyYW5jaDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJh
bmNoMTYpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDgpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoOCk6CisgICAgICAgICogYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmV4dHViKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwcmludEluc3RyKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y21wd19pcik6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bW92emJsX21yKToKKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAgICAgIChK
U0M6OlJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpt
YXRjaCk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVy
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmlu
Zy5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjppczhCaXQpOgorICAgICAgICAqIHlhcnIvWWFy
ci5oOgorICAgICAgICAqIHlhcnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
WWFycjo6SW50ZXJwcmV0ZXI6OkNoYXJBY2Nlc3M6OkNoYXJBY2Nlc3MpOgorICAgICAgICAoSlND
OjpZYXJyOjpJbnRlcnByZXRlcjo6Q2hhckFjY2Vzczo6fkNoYXJBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6Q2hhckFjY2Vzczo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OllhcnI6OkludGVycHJldGVyOjpJbnB1dFN0cmVhbTo6SW5wdXRTdHJlYW0pOgorICAg
ICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpZYXJyOjppbnRlcnByZXQpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omp1bXBJZkNoYXJOb3RFcXVhbHMpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpyZWFkQ2hhcmFjdGVyKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3Rl
ckZpeGVkKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0
ZXJuQ2hhcmFjdGVyR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
YmFja3RyYWNrUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NGaXhlZCk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlRG90U3RhckVuY2xvc3VyZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OllhcnJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
aml0Q29tcGlsZSk6CisgICAgICAgIChKU0M6OllhcnI6OmV4ZWN1dGUpOgorICAgICAgICAqIHlh
cnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpoYXM4Qml0
Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmhhczE2Qml0Q29kZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2RlKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGFy
c2VyLmg6CisgICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0wOS0w
OCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBidW1wIGFs
bG9jYXRvciBmb3IgaW5pdGlhbCBwcm9wZXJ0eSBzdG9yYWdlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDkg
KzI0Myw5IEBAIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzRIZWFwN3Byb3RlY3RF
TlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRIZWFwOGNhcGFjaXR5RXYKIF9fWk4zSlNDNEhlYXA5dW5w
cm90ZWN0RU5TXzdKU1ZhbHVlRQorX19aTjNKU0M0WWFycjlpbnRlcnByZXRFUE5TMF8xNUJ5dGVj
b2RlUGF0dGVybkVSS05TXzdVU3RyaW5nRWpqUGkKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJu
QzFFUktOU183VVN0cmluZ0ViYlBQS2MKIF9fWk4zSlNDNFlhcnIxMWJ5dGVDb21waWxlRVJOUzBf
MTFZYXJyUGF0dGVybkVQTjNXVEYyMEJ1bXBQb2ludGVyQWxsb2NhdG9yRQotX19aTjNKU0M0WWFy
cjlpbnRlcnByZXRFUE5TMF8xNUJ5dGVjb2RlUGF0dGVybkVQS3RqalBpCiBfX1pOM0pTQzRjYWxs
RVBOU185RXhlY1N0YXRlRU5TXzdKU1ZhbHVlRU5TXzhDYWxsVHlwZUVSS05TXzhDYWxsRGF0YUVT
Ml9SS05TXzdBcmdMaXN0RQogX19aTjNKU0M2SlNDZWxsMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxE
YXRhRQogX19aTjNKU0M2SlNDZWxsMTFnZXRKU051bWJlckV2CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTQ1
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIz
Miw2IEBAIEVYUE9SVFMKICAgICA/aW5pdGlhbGl6ZU1haW5UaHJlYWRAV1RGQEBZQVhYWgogICAg
ID9pbml0aWFsaXplVGhyZWFkaW5nQEpTQ0BAWUFYWFoKICAgICA/aW5pdGlhbGl6ZVRocmVhZGlu
Z0BXVEZAQFlBWFhaCi0gICAgP2ludGVycHJldEBZYXJyQEpTQ0BAWUFIUEFVQnl0ZWNvZGVQYXR0
ZXJuQDEyQFBCX1dJSVBBSEBaCiAgICAgP2lzQWNjZXNzb3JEZXNjcmlwdG9yQFByb3BlcnR5RGVz
Y3JpcHRvckBKU0NAQFFCRV9OWFoKICAgICA/aXNCdXN5QEhlYXBASlNDQEBRQUVfTlhaCiAgICAg
P2lzRGF0YURlc2NyaXB0b3JAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFX05YWgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAko
cmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFz
c2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwyNyArMjg4LDI4IEBAIHZvaWQgQVJN
QXNzZW1ibGVyOjpkYXRhVHJhbnNmZXIzMihib29sIGkKICAgICB9CiB9CiAKLXZvaWQgQVJNQXNz
ZW1ibGVyOjpiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0Rz
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qg
b2Zmc2V0KQordm9pZCBBUk1Bc3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xv
YWQsIFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgs
IGludCBzY2FsZSwgaW50MzJfdCBvZmZzZXQsIGJvb2wgYnl0ZXMpCiB7CiAgICAgQVJNV29yZCBv
cDI7CisgICAgQVJNV29yZCB0cmFuc2ZlckZsYWcgPSBieXRlcyA/IERUX0JZVEUgOiAwOwogCiAg
ICAgQVNTRVJUKHNjYWxlID49IDAgJiYgc2NhbGUgPD0gMyk7CiAgICAgb3AyID0gbHNsKGluZGV4
LCBzY2FsZSk7CiAKICAgICBpZiAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDw9IDB4ZmZmKSB7CiAg
ICAgICAgIGFkZF9yKEFSTVJlZ2lzdGVyczo6UzAsIGJhc2UsIG9wMik7Ci0gICAgICAgIGR0cl91
KGlzTG9hZCwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6OlMwLCBvZmZzZXQpOworICAgICAgICBkdHJf
dShpc0xvYWQsIHNyY0RzdCwgQVJNUmVnaXN0ZXJzOjpTMCwgb2Zmc2V0IHwgdHJhbnNmZXJGbGFn
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAob2Zmc2V0IDw9IDAgJiYgb2Zmc2V0
ID49IC0weGZmZikgewogICAgICAgICBhZGRfcihBUk1SZWdpc3RlcnM6OlMwLCBiYXNlLCBvcDIp
OwotICAgICAgICBkdHJfZChpc0xvYWQsIHNyY0RzdCwgQVJNUmVnaXN0ZXJzOjpTMCwgLW9mZnNl
dCk7CisgICAgICAgIGR0cl9kKGlzTG9hZCwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6OlMwLCAoLW9m
ZnNldCAmIDB4ZmZmKSB8IHRyYW5zZmVyRmxhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBsZHJfdW5faW1tKEFSTVJlZ2lzdGVyczo6UzAsIG9mZnNldCk7CiAgICAgYWRkX3IoQVJN
UmVnaXN0ZXJzOjpTMCwgQVJNUmVnaXN0ZXJzOjpTMCwgb3AyKTsKLSAgICBkdHJfdXIoaXNMb2Fk
LCBzcmNEc3QsIGJhc2UsIEFSTVJlZ2lzdGVyczo6UzApOworICAgIGR0cl91cihpc0xvYWQsIHNy
Y0RzdCwgYmFzZSwgQVJNUmVnaXN0ZXJzOjpTMCB8IHRyYW5zZmVyRmxhZyk7CiB9CiAKIHZvaWQg
QVJNQXNzZW1ibGVyOjpkb3VibGVUcmFuc2Zlcihib29sIGlzTG9hZCwgRlBSZWdpc3RlcklEIHNy
Y0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAkocmV2aXNpb24gOTQ1NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTUsNyArODU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IE1lbW9yeSBsb2FkL3N0b3JlIGhlbHBlcnMKIAogICAgICAgICB2b2lkIGRhdGFUcmFuc2ZlcjMy
KGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90
IG9mZnNldCwgYm9vbCBieXRlcyA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBiYXNlSW5kZXhUcmFu
c2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qgb2Zmc2V0KTsKKyAgICAgICAgdm9p
ZCBiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qgb2Zmc2V0
LCBib29sIGJ5dGVzID0gZmFsc2UpOwogICAgICAgICB2b2lkIGRvdWJsZVRyYW5zZmVyKGJvb2wg
aXNMb2FkLCBGUFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zm
c2V0KTsKIAogICAgICAgICAvLyBDb25zdGFudCBwb29sIGhuYWRsZXJzCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZpc2lv
biA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDYgKzYwMCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IE9QX01PVl9pbW1fVDMgICA9IDB4RjI0MCwKICAgICAgICAgT1BfU1VCX2ltbV9UNCAgID0gMHhG
MkEwLAogICAgICAgICBPUF9NT1ZUICAgICAgICAgPSAweEYyQzAsCisgICAgICAgIE9QX1VCRlhf
VDEgICAgICA9IDB4RjNDMCwKICAgICAgICAgT1BfTk9QX1QyYSAgICAgID0gMHhGM0FGLAogICAg
ICAgICBPUF9MRFJCX2ltbV9UMyAgPSAweEY4MTAsCiAgICAgICAgIE9QX0xEUkJfcmVnX1QyICA9
IDB4RjgxMCwKQEAgLTE0ODAsNiArMTQ4MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVXb3JkT3AxMFJlZzNSZWczKE9QX1RTVF9yZWdfVDEsIHJtLCBybik7CiAgICAg
fQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHViZngoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBybiwgdW5zaWduZWQgbHNiLCB1bnNpZ25lZCB3aWR0aCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChsc2IgPCAzMik7CisgICAgICAgIEFTU0VSVCgod2lkdGggPj0gMSkgJiYgKHdpZHRoIDw9IDMy
KSk7CisgICAgICAgIEFTU0VSVCgobHNiICsgd2lkdGgpIDw9IDMyKTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIudHdvV29yZE9wMTJSZWc0MEltbTNSZWc0SW1tMjBJbW01KE9QX1VCRlhfVDEsIHJkLCBy
biwgKGxzYiAmIDB4MWMpIDw8IDEwLCAobHNiICYgMHgzKSA8PCA2LCAod2lkdGggLSAxKSAmIDB4
MWYpOworICAgIH0KKwogICAgIHZvaWQgdmFkZF9GNjQoRlBEb3VibGVSZWdpc3RlcklEIHJkLCBG
UERvdWJsZVJlZ2lzdGVySUQgcm4sIEZQRG91YmxlUmVnaXN0ZXJJRCBybSkKICAgICB7CiAgICAg
ICAgIG1fZm9ybWF0dGVyLnZmcE9wKE9QX1ZBRERfVDIsIE9QX1ZBRERfVDJiLCB0cnVlLCBybiwg
cmQsIHJtKTsKQEAgLTIyNDcsNiArMjI1NiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9i
dWZmZXIucHV0U2hvcnQoKHJlZzIgPDwgMTIpIHwgaW1tKTsKICAgICAgICAgfQogCisgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB0d29Xb3JkT3AxMlJlZzQwSW1tM1JlZzRJbW0yMEltbTUoT3Bj
b2RlSUQxIG9wLCBSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgdWludDE2X3QgaW1t
MSwgdWludDE2X3QgaW1tMiwgdWludDE2X3QgaW1tMykKKyAgICAgICAgeworICAgICAgICAgICAg
bV9idWZmZXIucHV0U2hvcnQob3AgfCByZWcxKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dFNo
b3J0KChpbW0xIDw8IDEyKSB8IChyZWcyIDw8IDgpIHwgKGltbTIgPDwgNikgfCBpbW0zKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIC8vIEZvcm1hdHMgdXAgaW5zdHJ1Y3Rpb25zIG9mIHRoZSBwYXR0
ZXJuOgogICAgICAgICAvLyAgICAxMTExMTExMTFCMTFhYWFhOmJiYmIyMjJTQTJDMmNjY2MKICAg
ICAgICAgLy8gV2hlcmUgMXMgaW4gdGhlIHBhdHRlcm4gY29tZSBmcm9tIG9wMSwgMnMgaW4gdGhl
IHBhdHRlcm4gY29tZSBmcm9tIG9wMiwgUyBpcyB0aGUgcHJvdmlkZWQgc2l6ZSBiaXQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTS5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1MywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmRhdGFUcmFuc2ZlcjMyKHRydWUsIGRlc3Qs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIHRydWUpOwogICAgIH0KIAorICAgIHZvaWQg
bG9hZDgoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmJhc2VJbmRleFRyYW5zZmVyMzIodHJ1ZSwgZGVzdCwgYWRkcmVzcy5iYXNl
LCBhZGRyZXNzLmluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KGFkZHJlc3Muc2NhbGUpLCBhZGRyZXNz
Lm9mZnNldCwgdHJ1ZSk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmRh
dGFUcmFuc2ZlcjMyKHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOwpA
QCAtNDA5LDYgKzQxNCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2gzMihjb25k
LCBBUk1SZWdpc3RlcnM6OlMxLCByaWdodCk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2g4KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkZGRjAwKSk7
CisgICAgICAgIGxvYWQ4KGxlZnQsIEFSTVJlZ2lzdGVyczo6UzEpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZCwgQVJNUmVnaXN0ZXJzOjpTMSwgcmlnaHQpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRy
dXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1fdmFsdWUg
JiAweEZGRkYwMDAwKSk7CisgICAgICAgIHJpZ2h0Lm1fdmFsdWUgPDw9IDE2OworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZfcihBUk1SZWdpc3RlcnM6OlMxLCBsZWZ0KTsKKyAgICAgICAgbHNoaWZ0
MzIoMTYsIEFSTVJlZ2lzdGVyczo6UzEpCisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBB
Uk1SZWdpc3RlcnM6OlMxLCByaWdodCk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwg
aW50IHVzZUNvbnN0YW50UG9vbCA9IDApCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBf
cihsZWZ0LCByaWdodCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgzLDYgKzQ4MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ4KHNldHVw
QXJtQWRkcmVzcyhhZGRyZXNzKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBsb2FkOChCYXNl
SW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgoc2V0
dXBBcm1BZGRyZXNzKGFkZHJlc3MpLCBkZXN0KTsKKyAgICB9CisgICAgCiAgICAgRGF0YUxhYmVs
MzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsID0gbW92ZVdpdGhQYXRj
aChUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBkYXRhVGVtcFJlZ2lzdGVyKTsKQEAgLTk2
Myw2ICs5NjgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBi
cmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3Rl
ZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoMHhmZmZmMDAwMCAmIHJpZ2h0
Lm1fdmFsdWUpKTsKKyAgICAgICAgLy8gRXh0cmFjdCB0aGUgbG93ZXIgMTYgYml0cyBpbnRvIGEg
dGVtcCBmb3IgY29tcGFyaXNvbgorICAgICAgICBtX2Fzc2VtYmxlci51YmZ4KGRhdGFUZW1wUmVn
aXN0ZXIsIGxlZnQsIDAsIDE2KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFU
ZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisgICAgCiAgICAgSnVtcCBicmFuY2gxNihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQp
CiAgICAgewogICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJy
YW5jaDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KQEAgLTk3OSwxMSArOTky
LDIwIEBAIHB1YmxpYzoKIAogICAgIEp1bXAgYnJhbmNoOChSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQogICAgIHsKKyAgICAgICAgQVNT
RVJUKCEoMHhmZmZmZmYwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKICAgICAgICAgLy8gdXNlIGFkZHJl
c3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2g4IHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJl
Z2lzdGVyLiA6LS8KICAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CiAg
ICAgICAgIHJldHVybiBicmFuY2g4KGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsK
ICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNl
SW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
MHhmZmZmZmYwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKKyAgICAgICAgLy8gdXNlIGFkZHJlc3NUZW1w
UmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rl
ci4gOi0vCisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgcmlnaHQpOworICAg
IH0KKyAgICAKICAgICBKdW1wIGJyYW5jaFRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnRzdChyZWcsIG1hc2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5Niw2ICs0OTYsMzUgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgdm9pZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRyZXNzLm9mZnNldCA8
PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNj
YWxlCisgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGFkZHJlc3MuYmFz
ZQorICAgICAgICAgICAgIGxidSAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQoYWRkclRlbXApCisg
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNl
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxidShkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAg
ICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUKKyAg
ICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVzcy5iYXNlCisgICAg
ICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVzcy5vZmZzZXQgKyAweDgwMDApID4+IDE2
CisgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGltbVRlbXAKKyAgICAg
ICAgICAgICBsYnUgICAgIGRlc3QsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZmZikoYXQpCisgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRyVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIsIChhZGRyZXNzLm9m
ZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGJ1KGRlc3Qs
IGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGFkZHJlc3Mu
b2Zmc2V0IDw9IDMyNzY3CkBAIC05MzIsNiArOTYxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CiAg
ICAgfQogCisgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUlu
ZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJp
Z2h0Lm1fdmFsdWUgJiAweEZGRkZGRjAwKSk7CisgICAgICAgIGxvYWQ4KGxlZnQsIGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhlIHByZXZpb3VzIGxvYWQ4
KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3ZSBuZWVkIHRvIHB1dCBt
b3ZlKCkgYWZ0ZXIgbG9hZDgoKS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAg
ICAgIGlmIChjb25kID09IEVxdWFsKQpAQCAtMTAzMiw2ICsxMDcxLDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdp
c3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoZSBpbW1lZGlhdGUgdmFsdWUgaXMgdW5zaWduZWQgMTYgYml0cy4KKyAg
ICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRjAwMDApKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYW5kaShpbW1UZW1wUmVnaXN0ZXIsIGxlZnQsIDB4ZmZmZik7CisgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisKICAg
ICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQs
IFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBsb2FkMTYobGVmdCwgZGF0YVRlbXBS
ZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyU0g0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTA5LDYgKzUwOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ4KGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5vZmZzZXQsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDgoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAg
ICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBh
ZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQ4KHNjciwgYWRkcmVzcy5vZmZz
ZXQsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwogICAgIHZv
aWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwpAQCAtMTM1Miw2ICsxMzYyLDQ1
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKICAgICB9CiAKKyAgICBK
dW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1
c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAm
IDB4RkZGRkZGMDApKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0
ZWRJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAobGVmdC5vZmZzZXQpCisg
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobGVmdC5vZmZzZXQpLCBzY3IpOworICAgICAg
ICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQ4KHNjciwgc2NyKTsKKyAgICAg
ICAgZXh0dWIoc2NyLCBzY3IpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNj
cjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IxKTsKKworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyLCBzY3IxKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoIShy
aWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworCisgICAgICAgIGV4dHV3KGxlZnQsIHNjcik7CisgICAgICAgIGlmICgo
KGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3IsIHNjcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBzY3IsIGNvbmQpOwor
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90
RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRydWUoKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsNiArNDc1
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbENvbXBhY3QodGhpcyk7CiAg
ICAgfQogCisgICAgdm9pZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX21yKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUsIGRlc3QpOworICAgIH0K
KwogICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6d2xfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSwgZGVzdCk7CkBAIC04NzMsNiAr
ODc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIHJp
Z2h0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBp
ZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3Zh
bHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHdfcnIobGVmdCwgbGVmdCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHdfaXIocmlnaHQubV92YWx1ZSwg
bGVmdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24o
Y29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5jbXB3X3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBsZWZ0Lmlu
ZGV4LCBsZWZ0LnNjYWxlKTsKQEAgLTk1Niw2ICs5NzAsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQog
CisgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxl
ZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1f
dmFsdWUgJiAweEZGRkZGRjAwKSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wYl9pbShyaWdo
dC5tX3ZhbHVlLCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBsZWZ0LmluZGV4LCBsZWZ0LnNjYWxl
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25k
KSkpOworICAgIH0KKwogICAgIEp1bXAganVtcCgpCiAgICAgewogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qbXAoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1NINEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUy
LDYgKzE1Miw3IEBAIGVudW0gewogICAgIFRTVF9PUENPREUgPSAweDIwMDgsCiAgICAgVFNUSU1N
X09QQ09ERSA9IDB4YzgwMCwKICAgICBUU1RCX09QQ09ERSA9IDB4Y2MwMCwKKyAgICBFWFRVQl9P
UENPREUgPSAweDYwMGMsCiAgICAgRVhUVVdfT1BDT0RFID0gMHg2MDBkLAogICAgIFhPUl9PUENP
REUgPSAweDIwMGEsCiAgICAgWE9SSU1NX09QQ09ERSA9IDB4Y2EwMCwKQEAgLTc1OCw2ICs3NTks
MTIgQEAgcHVibGljOgogICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CiAgICAgfQogCisgICAgdm9p
ZCBleHR1YihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhUVUJfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBleHR1dyhSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDEoRVhUVVdfT1BDT0RFLCBkc3QsIHNyYyk7CkBAIC0xODEwLDYgKzE4
MTcsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTU9WV19SRUFEX1IwUk1fT1BDT0RFOgogICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBAKFIwLCBSJWQpLCBSJWRcbiI7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFWFRVQl9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIEVYVFUuQiBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVYVFVXX09QQ09ERToKICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRVhUVS5XIFIl
ZCwgUiVkXG4iOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDk0NTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtODQyLDYgKzg0MiwxOSBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2b2lk
IGNtcHdfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4
KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9Q
X0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQ01QLCBkc3QpOworICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQ01QLCBkc3QpOworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IHZvaWQgY21wd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRl
ci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CkBAIC0xMTU5LDYgKzExNzIsMTEgQEAgcHVibGlj
OgogICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX01PVlpYX0d2RXcsIGRzdCwgYmFz
ZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQgbW92emJsX21yKGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJf
TU9WWlhfR3ZFYiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CisgICAgfQorCiAg
ICAgdm9pZCBtb3Z6YmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsK
ICAgICAgICAgLy8gSW4gNjQtYml0LCB0aGlzIG1heSBjYXVzZSBhbiB1bm5lY2Vzc2FyeSBSRVgg
dG8gYmUgcGxhbnRlZCAoaWYgdGhlIGRzdCByZWdpc3RlcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NywyNiAr
MjY3LDI2IEBAIFJlZ0V4cCogUmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG8KICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShwYXR0ZXJuU3Ry
aW5nLCBmbGFncyk7CiB9CiAKLXZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
WWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IE5v
dENvbXBpbGVkKTsKLSAgICBtX3JlcHJlc2VudGF0aW9uID0gYWRvcHRQdHIobmV3IFJlZ0V4cFJl
cHJlc2VudGF0aW9uKTsKICAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0
cmluZywgaWdub3JlQ2FzZSgpLCBtdWx0aWxpbmUoKSwgJm1fY29uc3RydWN0aW9uRXJyb3IpOwog
ICAgIGlmIChtX2NvbnN0cnVjdGlvbkVycm9yKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLQotICAgIGdsb2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUodGhp
cyk7Ci0KICAgICBBU1NFUlQobV9udW1TdWJwYXR0ZXJucyA9PSBwYXR0ZXJuLm1fbnVtU3VicGF0
dGVybnMpOwogCi0gICAgbV9zdGF0ZSA9IEJ5dGVDb2RlOworICAgIGlmICghbV9yZXByZXNlbnRh
dGlvbikgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb3RDb21waWxlZCk7CisgICAgICAg
IG1fcmVwcmVzZW50YXRpb24gPSBhZG9wdFB0cihuZXcgUmVnRXhwUmVwcmVzZW50YXRpb24pOwor
ICAgICAgICBnbG9iYWxEYXRhLT5yZWdFeHBDYWNoZSgpLT5hZGRUb1N0cm9uZ0NhY2hlKHRoaXMp
OworICAgICAgICBtX3N0YXRlID0gQnl0ZUNvZGU7CisgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJf
SklUKQogICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBn
bG9iYWxEYXRhLCBtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUpOworICAgICAgICBZ
YXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCBnbG9iYWxEYXRhLCBtX3JlcHJlc2Vu
dGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9ERUJVRykKICAg
ICAgICAgaWYgKCFtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUuaXNGYWxsQmFjaygp
KQogICAgICAgICAgICAgbV9zdGF0ZSA9IEpJVENvZGU7CkBAIC0yOTksMTEgKzI5OSwzNiBAQCB2
b2lkIFJlZ0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgICAgIH0KICNlbmRp
ZgogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNoYXJTaXplKTsKICNlbmRpZgogCiAg
ICAgbV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxl
KHBhdHRlcm4sICZnbG9iYWxEYXRhLT5tX3JlZ0V4cEFsbG9jYXRvcik7CiB9CiAKK3ZvaWQgUmVn
RXhwOjpjb21waWxlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBZYXJyOjpZ
YXJyQ2hhclNpemUgY2hhclNpemUpCit7CisgICAgLy8gSWYgdGhlIHN0YXRlIGlzIE5vdENvbXBp
bGVkIG9yIFBhcnNlRXJyb3IsIHRoZW4gdGhlcmUgaXMgbm8gcmVwcmVzZW50YXRpb24uCisgICAg
Ly8gSWYgdGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiwgYW5kIHRoZSBzdGF0ZSBtdXN0IGJlIGVp
dGhlciBKSVRDb2RlIG9yIEJ5dGVDb2RlLgorICAgIEFTU0VSVCghIW1fcmVwcmVzZW50YXRpb24g
PT0gKG1fc3RhdGUgPT0gSklUQ29kZSB8fCBtX3N0YXRlID09IEJ5dGVDb2RlKSk7CisgICAgCisg
ICAgaWYgKG1fcmVwcmVzZW50YXRpb24pIHsKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCisgICAgICAg
IGlmIChtX3N0YXRlICE9IEpJVENvZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjgpICYmIChtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4
cEpJVENvZGUuaGFzOEJpdENvZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjE2KSAmJiAobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdF
eHBKSVRDb2RlLmhhczE2Qml0Q29kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIH0KKworICAgIGNvbXBpbGUoJmdsb2JhbERhdGEs
IGNoYXJTaXplKTsKK30KKworCiBpbnQgUmVnRXhwOjptYXRjaChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFVTdHJpbmcmIHMsIGludCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+
KiBvdmVjdG9yKQogewogICAgIGlmIChzdGFydE9mZnNldCA8IDApCkBAIC0zMTcsNyArMzQyLDcg
QEAgaW50IFJlZ0V4cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYQogICAgICAgICByZXR1
cm4gLTE7CiAKICAgICBpZiAobV9zdGF0ZSAhPSBQYXJzZUVycm9yKSB7Ci0gICAgICAgIGNvbXBp
bGVJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKKyAgICAgICAgY29tcGlsZUlmTmVjZXNzYXJ5KGds
b2JhbERhdGEsIHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CiAKICAg
ICAgICAgaW50IG9mZnNldFZlY3RvclNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsK
ICAgICAgICAgaW50KiBvZmZzZXRWZWN0b3I7CkBAIC0zNDAsMTMgKzM2NSwxNiBAQCBpbnQgUmVn
RXhwOjptYXRjaChKU0dsb2JhbERhdGEmIGdsb2JhbERhCiAgICAgICAgIGludCByZXN1bHQ7CiAj
aWYgRU5BQkxFKFlBUlJfSklUKQogICAgICAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVn
RXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZz
ZXRWZWN0b3IpOworICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUs
IHMubGF0aW4xKCkuZGF0YSgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9y
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVj
dXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0
YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOwogI2lmIEVOQUJMRShZQVJSX0pJ
VF9ERUJVRykKICAgICAgICAgICAgIG1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRlcihzLCBzdGFy
dE9mZnNldCwgb2Zmc2V0VmVjdG9yLCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0gZWxzZQog
I2VuZGlmCi0gICAgICAgICAgICByZXN1bHQgPSBZYXJyOjppbnRlcnByZXQobV9yZXByZXNlbnRh
dGlvbi0+bV9yZWdFeHBCeXRlY29kZS5nZXQoKSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0
LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6
aW50ZXJwcmV0KG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0
YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOwogICAgICAgICBBU1NFUlQocmVz
dWx0ID49IC0xKTsKIAogI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4KQEAgLTM4OCw3ICs0
MTYsNyBAQCB2b2lkIFJlZ0V4cDo6bWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVyCiAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMCwgaSA9IDA7IGkgPCBtX251bVN1YnBhdHRlcm5zICsgMTsgaiArPSAy
LCBpKyspCiAgICAgICAgIGludGVycHJldGVyT2Zmc2V0VmVjdG9yW2pdID0gLTE7CiAKLSAgICBp
bnRlcnByZXRlclJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlcHJlc2VudGF0aW9uLT5tX3Jl
Z0V4cEJ5dGVjb2RlLmdldCgpLCBzLmNoYXJhY3RlcnMoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCksIGludGVycHJldGVyT2Zmc2V0VmVjdG9yKTsKKyAgICBpbnRlcnByZXRlclJlc3VsdCA9IFlh
cnI6OmludGVycHJldChtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBz
LCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgaW50ZXJwcmV0ZXJPZmZzZXRWZWN0b3IpOwogCiAg
ICAgaWYgKGppdFJlc3VsdCAhPSBpbnRlcnByZXRlclJlc3VsdCkKICAgICAgICAgZGlmZmVyZW5j
ZXMrKzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lv
biA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlJlZ0V4cEtleS5oIgorI2lu
Y2x1ZGUgInlhcnIvWWFyci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtOTEsMTMgKzkyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBOb3RDb21waWxlZAogICAgICAgICB9IG1fc3RhdGU7CiAKLSAgICAgICAgdm9p
ZCBjb21waWxlKEpTR2xvYmFsRGF0YSopOwotICAgICAgICB2b2lkIGNvbXBpbGVJZk5lY2Vzc2Fy
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
X3JlcHJlc2VudGF0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNv
bXBpbGUoJmdsb2JhbERhdGEpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgY29tcGlsZShKU0ds
b2JhbERhdGEqLCBZYXJyOjpZYXJyQ2hhclNpemUpOworICAgICAgICB2b2lkIGNvbXBpbGVJZk5l
Y2Vzc2FyeShKU0dsb2JhbERhdGEmLCBZYXJyOjpZYXJyQ2hhclNpemUpOwogCiAjaWYgRU5BQkxF
KFlBUlJfSklUX0RFQlVHKQogICAgICAgICB2b2lkIG1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRl
cihjb25zdCBVU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqIG9mZnNldFZlY3RvciwgaW50
IGppdFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5o
CShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKICAgICB9CiAKKyAgICBib29sIGlzOEJpdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBDU3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAgICAg
Q1N0cmluZyBsYXRpbjEoKSBjb25zdDsKICAgICBDU3RyaW5nIHV0ZjgoYm9vbCBzdHJpY3QgPSBm
YWxzZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5oCShyZXZpc2lvbiA5
NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsOCArNTcsMTMgQEAgZW51bSBKU1JlZ0V4cFJlc3VsdCB7CiAgICAgSlNSZWdFeHBF
cnJvckludGVybmFsID0gLTQKIH07CiAKK2VudW0gWWFyckNoYXJTaXplIHsKKyAgICBDaGFyOCwK
KyAgICBDaGFyMTYKK307CisKIFBhc3NPd25QdHI8Qnl0ZWNvZGVQYXR0ZXJuPiBieXRlQ29tcGls
ZShZYXJyUGF0dGVybiYsIEJ1bXBQb2ludGVyQWxsb2NhdG9yKik7Ci1pbnQgaW50ZXJwcmV0KEJ5
dGVjb2RlUGF0dGVybiosIGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOworaW50IGludGVycHJldChCeXRlY29kZVBhdHRlcm4q
LCBjb25zdCBVU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwg
aW50KiBvdXRwdXQpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJZYXJySW50ZXJwcmV0ZXIuaCIKIAorI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNp
bmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUg
PHN0ZGlvLmg+CkBAIC0xNjYsOSArMTY4LDYzIEBAIHB1YmxpYzoKICAgICAgICAgYWxsb2NhdG9y
UG9vbCA9IGFsbG9jYXRvclBvb2wtPmRlYWxsb2MoY29udGV4dCk7CiAgICAgfQogCisgICAgLy8g
VGhpcyBjbGFzcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgY2hhcmFjdGVyIGl0ZXJhdG9y
LCBjdXJyZW50IAorICAgIC8vIHByb3Bvc2VkIG5hbWUgU3RyaW5nQ29uc3RDaGFyYWN0ZXJJdGVy
YXRvci4KKyAgICBjbGFzcyBDaGFyQWNjZXNzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENoYXJB
Y2Nlc3MoY29uc3QgVVN0cmluZyYgcykKKyAgICAgICAgICAgIDogbV9idWZmZXIoMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpIHsKKyAgICAgICAgICAgICAgICBtX2No
YXJTaXplID0gQ2hhcjg7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gcy5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICBtX3B0ci5wdHI4ID0gbV9idWZmZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyICo+KGZhc3RNYWxsb2MobGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1f
YnVmZmVyLCBzLmxhdGluMSgpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbV9jaGFyU2l6ZSA9IENoYXIxNjsKKyAgICAgICAgICAgICAgICBt
X3B0ci5wdHIxNiA9IHMuY2hhcmFjdGVycygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgQ2hhckFjY2Vzcyhjb25zdCBjaGFyKiBwdHIpCisgICAgICAgICAgICA6IG1fY2hh
clNpemUoQ2hhcjgpCisgICAgICAgICAgICAsIG1fYnVmZmVyKDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fcHRyLnB0cjggPSBwdHI7CisgICAgICAgIH0KKworICAgICAgICBDaGFyQWNjZXNz
KGNvbnN0IFVDaGFyKiBwdHIpCisgICAgICAgICAgICA6IG1fY2hhclNpemUoQ2hhcjE2KQorICAg
ICAgICAgICAgLCBtX2J1ZmZlcigwKQorICAgICAgICB7CisgICAgICAgICAgICBtX3B0ci5wdHIx
NiA9IHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIH5DaGFyQWNjZXNzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAgICAgICAgICAgZmFz
dEZyZWUobV9idWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIFVDaGFyIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NoYXJT
aXplID09IENoYXI4KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3B0ci5wdHI4W2luZGV4XTsK
KyAgICAgICAgICAgIHJldHVybiBtX3B0ci5wdHIxNltpbmRleF07CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHB0cjg7
CisgICAgICAgICAgICBjb25zdCBVQ2hhciogcHRyMTY7CisgICAgICAgIH0gbV9wdHI7CisgICAg
ICAgIFlhcnJDaGFyU2l6ZSBtX2NoYXJTaXplOworICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAg
ICB9OworCiAgICAgY2xhc3MgSW5wdXRTdHJlYW0gewogICAgIHB1YmxpYzoKLSAgICAgICAgSW5w
dXRTdHJlYW0oY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoKQorICAgICAgICBJbnB1dFN0cmVhbShjb25zdCBVU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgICAgIDogaW5wdXQoaW5wdXQpCiAgICAg
ICAgICAgICAsIHBvcyhzdGFydCkKICAgICAgICAgICAgICwgbGVuZ3RoKGxlbmd0aCkKQEAgLTI3
OCw3ICszMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dDsKKyAgICAgICAgQ2hhckFjY2VzcyBpbnB1dDsKICAgICAgICAg
dW5zaWduZWQgcG9zOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgfTsKQEAgLTE0MjAs
MTAgKzE0NzYsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3V0cHV0WzBdOwogICAgIH0K
IAotICAgIEludGVycHJldGVyKEJ5dGVjb2RlUGF0dGVybiogcGF0dGVybiwgaW50KiBvdXRwdXQs
IGNvbnN0IFVDaGFyKiBpbnB1dENoYXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgSW50ZXJwcmV0ZXIoQnl0ZWNvZGVQYXR0ZXJuKiBwYXR0ZXJuLCBpbnQqIG91dHB1dCwg
Y29uc3QgVVN0cmluZyBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKICAg
ICAgICAgOiBwYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwgb3V0cHV0KG91dHB1dCkKLSAgICAg
ICAgLCBpbnB1dChpbnB1dENoYXIsIHN0YXJ0LCBsZW5ndGgpCisgICAgICAgICwgaW5wdXQoaW5w
dXQsIHN0YXJ0LCBsZW5ndGgpCiAgICAgICAgICwgYWxsb2NhdG9yUG9vbCgwKQogICAgICAgICAs
IHJlbWFpbmluZ01hdGNoQ291bnQobWF0Y2hMaW1pdCkKICAgICB7CkBAIC0xOTEwLDcgKzE5NjYs
NyBAQCBQYXNzT3duUHRyPEJ5dGVjb2RlUGF0dGVybj4gYnl0ZUNvbXBpbGUoCiAgICAgcmV0dXJu
IEJ5dGVDb21waWxlcihwYXR0ZXJuKS5jb21waWxlKGFsbG9jYXRvcik7CiB9CiAKLWludCBpbnRl
cnByZXQoQnl0ZWNvZGVQYXR0ZXJuKiBieXRlY29kZSwgY29uc3QgVUNoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKK2ludCBpbnRlcnByZXQo
Qnl0ZWNvZGVQYXR0ZXJuKiBieXRlY29kZSwgY29uc3QgVVN0cmluZyYgaW5wdXQsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogewogICAgIHJldHVybiBJbnRl
cnByZXRlcihieXRlY29kZSwgb3V0cHV0LCBpbnB1dCwgc3RhcnQsIGxlbmd0aCkuaW50ZXJwcmV0
KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNp
b24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU2LDE5ICsyNTYsMTkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4
LCBsZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmQ2hhckVxdWFscyhVQ2hhciBjaCwg
aW50IGlucHV0UG9zaXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYnJhbmNoMTYoRXF1YWws
IEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBpbnB1dFBvc2l0aW9uICogc2l6ZW9m
KFVDaGFyKSksIEltbTMyKGNoKSk7Ci0gICAgfQotCiAgICAgSnVtcCBqdW1wSWZDaGFyTm90RXF1
YWxzKFVDaGFyIGNoLCBpbnQgaW5wdXRQb3NpdGlvbikKICAgICB7CisgICAgICAgIGlmIChtX2No
YXJTaXplID09IENoYXI4KQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDgoTm90RXF1YWwsIEJh
c2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzT25lLCBpbnB1dFBvc2l0aW9uICogc2l6ZW9mKGNo
YXIpKSwgSW1tMzIoY2gpKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDE2KE5vdEVxdWFsLCBCYXNl
SW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgaW5wdXRQb3NpdGlvbiAqIHNpemVvZihVQ2hh
cikpLCBJbW0zMihjaCkpOwogICAgIH0KIAogICAgIHZvaWQgcmVhZENoYXJhY3RlcihpbnQgaW5w
dXRQb3NpdGlvbiwgUmVnaXN0ZXJJRCByZWcpCiAgICAgewotICAgICAgICBsb2FkMTYoQmFzZUlu
ZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28sIGlucHV0UG9zaXRpb24gKiBzaXplb2YoVUNoYXIp
KSwgcmVnKTsKKyAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAgICAgICBs
b2FkOChCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwgaW5wdXRQb3NpdGlvbiAqIHNp
emVvZihjaGFyKSksIHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQxNihCYXNl
SW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgaW5wdXRQb3NpdGlvbiAqIHNpemVvZihVQ2hh
cikpLCByZWcpOwogICAgIH0KIAogICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFJlZ2lzdGVySUQgcmVn
LCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQpAQCAtNjU4LDYgKzY1OCwxMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJt
ID0gb3AubV90ZXJtOwogICAgICAgICBVQ2hhciBjaCA9IHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7
CiAKKyAgICAgICAgaWYgKChjaCA+IDB4ZmYpICYmIChtX2NoYXJTaXplID09IENoYXI4KSkgewor
ICAgICAgICAgICAgLy8gSGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBi
aXQgc3RyaW5nIC0gc2hvcnQgY2lyY3VpdAorICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CiAKICAgICAgICAgaWYgKG5leHRPcC5tX29w
ID09IE9wVGVybSkgewpAQCAtNjY5LDI0ICs2NzUsMzQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAgICAgICAgICAgVUNoYXIgY2gyID0gbmV4dFRl
cm0tPnBhdHRlcm5DaGFyYWN0ZXI7CiAKKyAgICAgICAgICAgICAgICBpbnQgc2hpZnRBbW91bnQg
PSBtX2NoYXJTaXplID09IENoYXI4ID8gOCA6IDE2OwogICAgICAgICAgICAgICAgIGludCBtYXNr
ID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgY2hQYWlyID0gY2ggfCAoY2gyIDw8IDE2KTsKKyAg
ICAgICAgICAgICAgICBpbnQgY2hQYWlyID0gY2ggfCAoY2gyIDw8IHNoaWZ0QW1vdW50KTsKIAog
ICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2gpKQogICAgICAgICAgICAgICAgICAgICAgICAg
bWFzayB8PSAzMjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaDIpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAzMiA8PCAxNjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hc2sgfD0gMzIgPDwgc2hpZnRBbW91bnQ7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1lc1R3
bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6ZW9mKFVDaGFyKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZDMyV2l0
aFVuYWxpZ25lZEhhbGZXb3JkcyhhZGRyZXNzLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAg
ICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBh
aXIgfCBtYXNrKSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1
YWwsIGFkZHJlc3MsIEltbTMyKGNoUGFpcikpKTsKLQorICAgICAgICAgICAgICAgIGlmIChtX2No
YXJTaXplID09IENoYXI4KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2VJbmRleCBhZGRyZXNz
KGlucHV0LCBpbmRleCwgVGltZXNPbmUsICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2Vk
KSAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihOb3RFcXVhbCwgY2hhcmFj
dGVyLCBJbW0zMihjaFBhaXIgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDE2KE5vdEVx
dWFsLCBhZGRyZXNzLCBJbW0zMihjaFBhaXIpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1l
c1R3bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGFkZHJlc3MsIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNo
YXJhY3RlciwgSW1tMzIoY2hQYWlyIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMldp
dGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIGFkZHJlc3MsIEltbTMyKGNoUGFpcikpKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV4dE9wLm1faXNEZWFkQ29kZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNzE5LDE1
ICs3MzUsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAg
ICAgICBzdWIzMihJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LnVuc2FmZUdldCgpKSwgY291bnRS
ZWdpc3Rlcik7CiAKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKLSAgICAgICAgQmFzZUluZGV4
IGFkZHJlc3MoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoQ2hlY2tlZDxpbnQ+KHRl
cm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQgKyBDaGVja2VkPGludDY0X3Q+KHRlcm0tPnF1
YW50aXR5Q291bnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFVDaGFyKSkpLnVuc2FmZUdl
dCgpKTsKKyAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIG1f
Y2hhclNjYWxlLCAoQ2hlY2tlZDxpbnQ+KHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQg
KyBDaGVja2VkPGludDY0X3Q+KHRlcm0tPnF1YW50aXR5Q291bnQpKSAqIHN0YXRpY19jYXN0PGlu
dD4obV9jaGFyU2l6ZSA9PSBDaGFyOCA/IHNpemVvZihjaGFyKSA6IHNpemVvZihVQ2hhcikpKS51
bnNhZmVHZXQoKSk7CiAKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNB
U0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3MsIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgICAgICBs
b2FkOChhZGRyZXNzLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGxvYWQxNihhZGRyZXNzLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3IzMihUcnVzdGVk
SW1tMzIoMzIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9y
ZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7
Ci0gICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihOb3RFcXVhbCwgYWRkcmVz
cywgSW1tMzIoY2gpKSk7CisgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2g4KE5vdEVxdWFsLCBhZGRyZXNz
LCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChicmFuY2gxNihOb3RFcXVhbCwgYWRkcmVzcywgSW1tMzIoY2gpKSk7CiAgICAg
ICAgIH0KICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAg
ICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIGluZGV4KS5saW5rVG8obG9v
cCwgdGhpcyk7CkBAIC03NDgsMjYgKzc3MCwzMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVn
aXN0ZXIpOwogCi0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBMYWJlbCBsb29w
KHRoaXMpOwotICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAgICAg
ICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAg
ICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNo
YXJhY3Rlcik7Ci0gICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7
Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3Rl
ciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAgICAgIGlmICgoY2ggPiAweGZm
KSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkpIHsKKyAgICAgICAgICAgIC8vIEhhdmUgYSAxNiBi
aXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQK
KyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6
OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAt
IG1fY2hlY2tlZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7
Ci0gICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ID09IHF1YW50aWZ5SW5maW5pdGUpCi0g
ICAgICAgICAgICBqdW1wKGxvb3ApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmFuY2gz
MihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC51bnNh
ZmVHZXQoKSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1
cmVzOworICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CisgICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdu
b3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7CisgICAgICAgICAgICAgICAgcmVhZENoYXJh
Y3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIo
VW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dl
cihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkpKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1f
Y2hlY2tlZCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCk7CisgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCA9PSBxdWFudGlm
eUluZmluaXRlKQorICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMy
KHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZlR2V0KCkpKS5saW5rVG8obG9vcCwgdGhpcyk7CiAK
LSAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmxpbmso
dGhpcyk7CisgICAgICAgIH0KICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKIAogICAg
ICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbik7CkBA
IC04MTUsMjQgKzg0MiwyOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtCiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uLCBjb3VudFJl
Z2lzdGVyKTsKIAotICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0
KCkpOwotICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBj
b3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LnVuc2FmZUdldCgpKSkpOwot
ICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7
Ci0gICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNr
ZWQsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJh
Y3Rlcik7Ci0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90
RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAgICAg
IGlmICgoY2ggPiAweGZmKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkpIHsKKyAgICAgICAgICAg
IC8vIEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAt
IHNob3J0IGNpcmN1aXQKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9p
Z25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1VwcGVyKGNo
KSkpOwotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNoYXJOb3RF
cXVhbHMoY2gsIHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgbm9uR3JlZWR5RmFp
bHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKKyAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFu
dGl0eUNvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCisgICAgICAgICAgICAgICAgbm9uR3JlZWR5
RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJt
LT5xdWFudGl0eUNvdW50LnVuc2FmZUdldCgpKSkpOworICAgICAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgeworICAgICAgICAgICAgICAgIHJl
YWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsK
KyAgICAgICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwg
KFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7CisgICAgICAg
ICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gs
IHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpKTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBp
bmRleCk7CiAKKyAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgfQogICAg
ICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKHRoaXMpOworCiAgICAgICAgIHN1YjMyKGNvdW50
UmVnaXN0ZXIsIGluZGV4KTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3Vn
aCgpOwogICAgIH0KQEAgLTg3Myw3ICs5MDUsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CiAgICAgICAgIEp1
bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRS
ZWdpc3RlciwgVGltZXNUd28sIChDaGVja2VkPGludD4odGVybS0+aW5wdXRQb3NpdGlvbiAtIG1f
Y2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVybS0+cXVhbnRpdHlDb3VudCkpICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoVUNoYXIpKSkudW5zYWZlR2V0KCkpLCBjaGFyYWN0ZXIpOworICAg
ICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRl
eChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNPbmUsIChDaGVja2VkPGludD4odGVybS0+aW5w
dXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVybS0+cXVhbnRpdHlD
b3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoY2hhcikpKS51bnNhZmVHZXQoKSksIGNo
YXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5w
dXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoQ2hlY2tlZDxpbnQ+KHRlcm0tPmlucHV0UG9z
aXRpb24gLSBtX2NoZWNrZWQgKyBDaGVja2VkPGludDY0X3Q+KHRlcm0tPnF1YW50aXR5Q291bnQp
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFVDaGFyKSkpLnVuc2FmZUdldCgpKSwgY2hhcmFj
dGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwg
dGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKQEAg
LTEwMTYsNyArMTA1MSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtCiAgICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgbWF0
Y2hQb3MpKTsKICAgICAgICAgTGFiZWwgZmluZEJPTExvb3AodGhpcyk7CiAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwotICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlu
cHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAgICAgICBpZiAobV9j
aGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgbWF0
Y2hQb3MsIFRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzVHdvLCAwKSwgY2hhcmFj
dGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5kQmVnaW5u
aW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKICAgICAgICAg
YnJhbmNoVGVzdDMyKE5vblplcm8sIG1hdGNoUG9zKS5saW5rVG8oZmluZEJPTExvb3AsIHRoaXMp
OwogICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQoanVtcCgpKTsKQEAgLTEwMzQsNyArMTA3
MiwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAg
ICAgTGFiZWwgZmluZEVPTExvb3AodGhpcyk7ICAgICAgICAKICAgICAgICAgZm91bmRFbmRpbmdO
ZXdMaW5lLmFwcGVuZChicmFuY2gzMihFcXVhbCwgbWF0Y2hQb3MsIGxlbmd0aCkpOwotICAgICAg
ICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0
ZXIpOworICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGxvYWQ4
KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3Ms
IFRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhj
aGFyYWN0ZXIsIGZvdW5kRW5kaW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJD
bGFzcygpKTsKICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7CiAgICAg
ICAgIGp1bXAoZmluZEVPTExvb3ApOwpAQCAtMjM5OCw4ICsyNDM5LDEwIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICB9CiAKIHB1YmxpYzoKLSAgICBZYXJy
R2VuZXJhdG9yKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuKQorICAgIFlhcnJHZW5lcmF0b3IoWWFyclBh
dHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKICAgICAgICAgOiBtX3BhdHRl
cm4ocGF0dGVybikKKyAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQorICAgICAgICAsIG1f
Y2hhclNjYWxlKG1fY2hhclNpemUgPT0gQ2hhcjggPyBUaW1lc09uZTogVGltZXNUd28pCiAgICAg
ICAgICwgbV9zaG91bGRGYWxsQmFjayhmYWxzZSkKICAgICAgICAgLCBtX2NoZWNrZWQoMCkKICAg
ICB7CkBAIC0yNDMxLDEzICsyNDc0LDIwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gTGluayAmIGZp
bmFsaXplIHRoZSBjb2RlLgogICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERh
dGEsIHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKLSAgICAgICAgaml0T2JqZWN0
LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKKyAgICAgICAgaWYgKG1fY2hhclNpemUg
PT0gQ2hhcjgpCisgICAgICAgICAgICBqaXRPYmplY3Quc2V0OEJpdENvZGUobGlua0J1ZmZlci5m
aW5hbGl6ZUNvZGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGppdE9iamVjdC5zZXQx
NkJpdENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiAgICAgICAgIGppdE9iamVjdC5z
ZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgWWFy
clBhdHRlcm4mIG1fcGF0dGVybjsKIAorICAgIFlhcnJDaGFyU2l6ZSBtX2NoYXJTaXplOworCisg
ICAgU2NhbGUgbV9jaGFyU2NhbGU7CisKICAgICAvLyBVc2VkIHRvIGRldGVjdCByZWd1bGFyIGV4
cHJlc3Npb24gY29uc3RydWN0cyB0aGF0IGFyZSBub3QgY3VycmVudGx5CiAgICAgLy8gc3VwcG9y
dGVkIGluIHRoZSBKSVQ7IGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgd2hlbiB0aGlzIGlz
IGRldGVjdGVkLgogICAgIGJvb2wgbV9zaG91bGRGYWxsQmFjazsKQEAgLTI0NjEsOSArMjUxMSwx
NCBAQCBwcml2YXRlOgogICAgIEJhY2t0cmFja2luZ1N0YXRlIG1fYmFja3RyYWNraW5nU3RhdGU7
CiB9OwogCi12b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQordm9pZCBqaXRDb21waWxl
KFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQogewotICAgIFlhcnJHZW5l
cmF0b3IocGF0dGVybikuY29tcGlsZShnbG9iYWxEYXRhLCBqaXRPYmplY3QpOworICAgIFlhcnJH
ZW5lcmF0b3IocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoZ2xvYmFsRGF0YSwgaml0T2JqZWN0
KTsKK30KKworaW50IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBjaGFy
KiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCit7
CisgICAgcmV0dXJuIGppdE9iamVjdC5leGVjdXRlKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRw
dXQpOwogfQogCiBpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFVD
aGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lvbiA5NDU3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgIllhcnIuaCIK
ICNpbmNsdWRlICJZYXJyUGF0dGVybi5oIgogCiAjaWYgQ1BVKFg4NikgJiYgIUNPTVBJTEVSKE1T
VkMpCkBAIC00Nyw3ICs0OCw4IEBAIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogbmFtZXNwYWNlIFlh
cnIgewogCiBjbGFzcyBZYXJyQ29kZUJsb2NrIHsKLSAgICB0eXBlZGVmIGludCAoKllhcnJKSVRD
b2RlKShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGludCogb3V0cHV0KSBZQVJSX0NBTEw7CisgICAgdHlwZWRlZiBpbnQgKCpZYXJySklUQ29kZTgp
KGNvbnN0IGNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQq
IG91dHB1dCkgWUFSUl9DQUxMOworICAgIHR5cGVkZWYgaW50ICgqWWFyckpJVENvZGUxNikoY29u
c3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91
dHB1dCkgWUFSUl9DQUxMOwogCiBwdWJsaWM6CiAgICAgWWFyckNvZGVCbG9jaygpCkBAIC02MSwy
NCArNjMsMzUgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGYWxsQmFjayhib29sIGZhbGxiYWNr
KSB7IG1fbmVlZEZhbGxCYWNrID0gZmFsbGJhY2s7IH0KICAgICBib29sIGlzRmFsbEJhY2soKSB7
IHJldHVybiBtX25lZWRGYWxsQmFjazsgfQotICAgIHZvaWQgc2V0KE1hY3JvQXNzZW1ibGVyOjpD
b2RlUmVmIHJlZikgeyBtX3JlZiA9IHJlZjsgfQorICAgIGJvb2wgaGFzOEJpdENvZGUoKSB7IHJl
dHVybiBtX3JlZjgubV9zaXplOyB9CisgICAgYm9vbCBoYXMxNkJpdENvZGUoKSB7IHJldHVybiBt
X3JlZjE2Lm1fc2l6ZTsgfQorICAgIHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXI6OkNv
ZGVSZWYgcmVmKSB7IG1fcmVmOCA9IHJlZjsgfQorICAgIHZvaWQgc2V0MTZCaXRDb2RlKE1hY3Jv
QXNzZW1ibGVyOjpDb2RlUmVmIHJlZikgeyBtX3JlZjE2ID0gcmVmOyB9CiAKLSAgICBpbnQgZXhl
Y3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGludCogb3V0cHV0KQorICAgIGludCBleGVjdXRlKGNvbnN0IGNoYXIqIGlucHV0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5tX2NvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CisgICAgICAgIEFTU0VS
VChoYXM4Qml0Q29kZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJ
VENvZGU4PihtX3JlZjgubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwg
bGVuZ3RoLCBvdXRwdXQpOwogICAgIH0KIAorICAgIGludCBleGVjdXRlKGNvbnN0IFVDaGFyKiBp
bnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCisgICAg
eworICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlKCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxZYXJySklUQ29kZTE2PihtX3JlZjE2Lm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAgICB9CiAjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQogICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVybiBtX3JlZi5tX2NvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkNvZGVSZWYgbV9yZWY7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNvZGVSZWYgbV9yZWY4
OworICAgIE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIG1fcmVmMTY7CiAgICAgYm9vbCBtX25lZWRG
YWxsQmFjazsKIH07CiAKLXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYsIEpTR2xvYmFsRGF0
YSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCk7Cit2b2lkIGppdENvbXBpbGUoWWFyclBhdHRl
cm4mLCBZYXJyQ2hhclNpemUsIEpTR2xvYmFsRGF0YSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVj
dCk7CiBpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFVDaGFyKiBp
bnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOworaW50
IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBjaGFyKiBpbnB1dCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6WWFycgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBh
cnNlci5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAgICAgLCBtX2JhY2tSZWZlcmVuY2VM
aW1pdChiYWNrUmVmZXJlbmNlTGltaXQpCiAgICAgICAgICwgbV9lcnIoTm9FcnJvcikKLSAgICAg
ICAgLCBtX2RhdGEocGF0dGVybi5jaGFyYWN0ZXJzKCkpCisgICAgICAgICwgbV9kYXRhKHBhdHRl
cm4pCiAgICAgICAgICwgbV9zaXplKHBhdHRlcm4ubGVuZ3RoKCkpCiAgICAgICAgICwgbV9pbmRl
eCgwKQogICAgICAgICAsIG1fcGFyZW50aGVzZXNOZXN0aW5nRGVwdGgoMCkKQEAgLTc5Myw3ICs3
OTMsNyBAQCBwcml2YXRlOgogICAgIERlbGVnYXRlJiBtX2RlbGVnYXRlOwogICAgIHVuc2lnbmVk
IG1fYmFja1JlZmVyZW5jZUxpbWl0OwogICAgIEVycm9yQ29kZSBtX2VycjsKLSAgICBjb25zdCBV
Q2hhciogbV9kYXRhOworICAgIGNvbnN0IFVTdHJpbmcmIG1fZGF0YTsKICAgICB1bnNpZ25lZCBt
X3NpemU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICB1bnNpZ25lZCBtX3BhcmVudGhlc2Vz
TmVzdGluZ0RlcHRoOwo=
</data>
<flag name="commit-queue"
          id="103357"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106923</attachid>
            <date>2011-09-09 14:27:53 -0700</date>
            <delta_ts>2012-01-04 16:35:04 -0800</delta_ts>
            <desc>Updated patch to fix build failures</desc>
            <filename>67337-8.patch</filename>
            <type>text/plain</type>
            <size>52603</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTIgQEAK
KzIwMTEtMDktMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXBkYXRlIFJlZ0V4cCBhbmQgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZSA4IGJpdCBzdHJpbmdz
IHdoZW4gYXZhaWxhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NzMzNworCisgICAgICAgIE1vZGlmaWVkIGJvdGggdGhlIFlhcnIgaW50ZXJwcmV0
ZXIgYW5kIEpJVCB0byBoYW5kbGUgOCBiaXQgc3ViamVjdCBzdHJpbmdzLgorICAgICAgICBUaGUg
Y29kZSBwYXRocyBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBVU3RyaW5nOjppczhiaXQoKSBtZXRob2Qg
d2hpY2ggY3VycmVudGx5CisgICAgICAgIHJldHVybnMgZmFsc2UuICBJbXBsZW1lbnRlZCBKSVQg
Y2hhbmdlcyBmb3IgYWxsIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgVGVzdGVkIFg4
Nl82NCBhbmQgQVJNIHY3LgorCisgICAgICAgIFRoaXMgaW5jbHVkZXMgc29tZSBjb2RlIHRoYXQg
d2lsbCBsaWtlbHkgY2hhbmdlIGFzIHdlIGNvbXBsZXRlIHRoZQorICAgICAgICA4IGJpdCBzdHJp
bmcgY2hhbmdlcy4gIFRoaXMgaW5jbHVkZXMgdGhlIHdheSB0aGUgcmF3IGJ1ZmZlciBwb2ludGVy
cworICAgICAgICBhcmUgYWNjZXNzZWQgYXMgd2VsbCBhcyByZXBsYWNpbmcgdGhlIENoYXJBY2Nl
c3MgY2xhc3Mgd2l0aCBhCisgICAgICAgIHN0cmluZyBpbnRlcmF0b3IgcmV0dXJuZWQgZnJvbSBV
U3RyaW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogYXNzZW1ibGVyL0FS
TUFzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJh
bnNmZXIzMik6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oOgorICAgICAgICAq
IGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6dWJmeCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpBUk1JbnN0cnVjdGlvbkZv
cm1hdHRlcjo6dHdvV29yZE9wMTJSZWc0MEltbTNSZWc0SW1tMjBJbW01KToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaDgp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoMTYpOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNdjc6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6
YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpicmFuY2g4KToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyTUlQUzo6bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ck1JUFM6OmJyYW5jaDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5j
aDE2KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaDoKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmJyYW5jaDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJh
bmNoMTYpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDgpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoOCk6CisgICAgICAgICogYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmV4dHViKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwcmludEluc3RyKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y21wd19pcik6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bW92emJsX21yKToKKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAgICAgIChK
U0M6OlJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpt
YXRjaCk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVy
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmlu
Zy5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjppczhCaXQpOgorICAgICAgICAqIHlhcnIvWWFy
ci5oOgorICAgICAgICAqIHlhcnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
WWFycjo6SW50ZXJwcmV0ZXI6OkNoYXJBY2Nlc3M6OkNoYXJBY2Nlc3MpOgorICAgICAgICAoSlND
OjpZYXJyOjpJbnRlcnByZXRlcjo6Q2hhckFjY2Vzczo6fkNoYXJBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6Q2hhckFjY2Vzczo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OllhcnI6OkludGVycHJldGVyOjpJbnB1dFN0cmVhbTo6SW5wdXRTdHJlYW0pOgorICAg
ICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlND
OjpZYXJyOjppbnRlcnByZXQpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omp1bXBJZkNoYXJOb3RFcXVhbHMpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpyZWFkQ2hhcmFjdGVyKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3Rl
ckZpeGVkKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0
ZXJuQ2hhcmFjdGVyR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
YmFja3RyYWNrUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NGaXhlZCk6CisgICAgICAgIChK
U0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlRG90U3RhckVuY2xvc3VyZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OllhcnJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
aml0Q29tcGlsZSk6CisgICAgICAgIChKU0M6OllhcnI6OmV4ZWN1dGUpOgorICAgICAgICAqIHlh
cnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpoYXM4Qml0
Q29kZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmhhczE2Qml0Q29kZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2RlKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGFy
c2VyLmg6CisgICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0wOS0w
OCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBidW1wIGFs
bG9jYXRvciBmb3IgaW5pdGlhbCBwcm9wZXJ0eSBzdG9yYWdlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDkg
KzI0Myw5IEBAIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzRIZWFwN3Byb3RlY3RF
TlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRIZWFwOGNhcGFjaXR5RXYKIF9fWk4zSlNDNEhlYXA5dW5w
cm90ZWN0RU5TXzdKU1ZhbHVlRQorX19aTjNKU0M0WWFycjlpbnRlcnByZXRFUE5TMF8xNUJ5dGVj
b2RlUGF0dGVybkVSS05TXzdVU3RyaW5nRWpqUGkKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJu
QzFFUktOU183VVN0cmluZ0ViYlBQS2MKIF9fWk4zSlNDNFlhcnIxMWJ5dGVDb21waWxlRVJOUzBf
MTFZYXJyUGF0dGVybkVQTjNXVEYyMEJ1bXBQb2ludGVyQWxsb2NhdG9yRQotX19aTjNKU0M0WWFy
cjlpbnRlcnByZXRFUE5TMF8xNUJ5dGVjb2RlUGF0dGVybkVQS3RqalBpCiBfX1pOM0pTQzRjYWxs
RVBOU185RXhlY1N0YXRlRU5TXzdKU1ZhbHVlRU5TXzhDYWxsVHlwZUVSS05TXzhDYWxsRGF0YUVT
Ml9SS05TXzdBcmdMaXN0RQogX19aTjNKU0M2SlNDZWxsMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxE
YXRhRQogX19aTjNKU0M2SlNDZWxsMTFnZXRKU051bWJlckV2CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTQ1
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQs
NyBAQCBFWFBPUlRTCiAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAgICAgPz8w
VVN0cmluZ0BKU0NAQFFBRUBQQkRAWgogICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJESUBaCisg
ICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQl9XQFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBC
X1dJQFoKICAgICA/PzBXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8wWWFyclBhdHRl
cm5AWWFyckBKU0NAQFFBRUBBQlZVU3RyaW5nQDJAX04xUEFQQkRAWgpAQCAtMjMyLDcgKzIzMyw3
IEBAIEVYUE9SVFMKICAgICA/aW5pdGlhbGl6ZU1haW5UaHJlYWRAV1RGQEBZQVhYWgogICAgID9p
bml0aWFsaXplVGhyZWFkaW5nQEpTQ0BAWUFYWFoKICAgICA/aW5pdGlhbGl6ZVRocmVhZGluZ0BX
VEZAQFlBWFhaCi0gICAgP2ludGVycHJldEBZYXJyQEpTQ0BAWUFIUEFVQnl0ZWNvZGVQYXR0ZXJu
QDEyQFBCX1dJSVBBSEBaCisgICAgP2ludGVycHJldEBZYXJyQEpTQ0BAWUFIUEFVQnl0ZWNvZGVQ
YXR0ZXJuQDEyQEFCVlVTdHJpbmdAMkBJSVBBSEBaCiAgICAgP2lzQWNjZXNzb3JEZXNjcmlwdG9y
QFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFCRV9OWFoKICAgICA/aXNCdXN5QEhlYXBASlNDQEBR
QUVfTlhaCiAgICAgP2lzRGF0YURlc2NyaXB0b3JAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJF
X05YWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNz
ZW1ibGVyLmNwcAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwyNyArMjg4LDI4
IEBAIHZvaWQgQVJNQXNzZW1ibGVyOjpkYXRhVHJhbnNmZXIzMihib29sIGkKICAgICB9CiB9CiAK
LXZvaWQgQVJNQXNzZW1ibGVyOjpiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdp
c3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIGludDMyX3Qgb2Zmc2V0KQordm9pZCBBUk1Bc3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVy
MzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgaW5kZXgsIGludCBzY2FsZSwgaW50MzJfdCBvZmZzZXQsIGJvb2wgYnl0ZXMpCiB7CiAg
ICAgQVJNV29yZCBvcDI7CisgICAgQVJNV29yZCB0cmFuc2ZlckZsYWcgPSBieXRlcyA/IERUX0JZ
VEUgOiAwOwogCiAgICAgQVNTRVJUKHNjYWxlID49IDAgJiYgc2NhbGUgPD0gMyk7CiAgICAgb3Ay
ID0gbHNsKGluZGV4LCBzY2FsZSk7CiAKICAgICBpZiAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDw9
IDB4ZmZmKSB7CiAgICAgICAgIGFkZF9yKEFSTVJlZ2lzdGVyczo6UzAsIGJhc2UsIG9wMik7Ci0g
ICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk1SZWdpc3RlcnM6OlMwLCBvZmZzZXQpOwor
ICAgICAgICBkdHJfdShpc0xvYWQsIHNyY0RzdCwgQVJNUmVnaXN0ZXJzOjpTMCwgb2Zmc2V0IHwg
dHJhbnNmZXJGbGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAob2Zmc2V0IDw9
IDAgJiYgb2Zmc2V0ID49IC0weGZmZikgewogICAgICAgICBhZGRfcihBUk1SZWdpc3RlcnM6OlMw
LCBiYXNlLCBvcDIpOwotICAgICAgICBkdHJfZChpc0xvYWQsIHNyY0RzdCwgQVJNUmVnaXN0ZXJz
OjpTMCwgLW9mZnNldCk7CisgICAgICAgIGR0cl9kKGlzTG9hZCwgc3JjRHN0LCBBUk1SZWdpc3Rl
cnM6OlMwLCAoLW9mZnNldCAmIDB4ZmZmKSB8IHRyYW5zZmVyRmxhZyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBsZHJfdW5faW1tKEFSTVJlZ2lzdGVyczo6UzAsIG9mZnNldCk7CiAg
ICAgYWRkX3IoQVJNUmVnaXN0ZXJzOjpTMCwgQVJNUmVnaXN0ZXJzOjpTMCwgb3AyKTsKLSAgICBk
dHJfdXIoaXNMb2FkLCBzcmNEc3QsIGJhc2UsIEFSTVJlZ2lzdGVyczo6UzApOworICAgIGR0cl91
cihpc0xvYWQsIHNyY0RzdCwgYmFzZSwgQVJNUmVnaXN0ZXJzOjpTMCB8IHRyYW5zZmVyRmxhZyk7
CiB9CiAKIHZvaWQgQVJNQXNzZW1ibGVyOjpkb3VibGVUcmFuc2Zlcihib29sIGlzTG9hZCwgRlBS
ZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9mZnNldCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAkocmV2
aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NTUsNyArODU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIE1lbW9yeSBsb2FkL3N0b3JlIGhlbHBlcnMKIAogICAgICAgICB2b2lkIGRh
dGFUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBi
YXNlLCBpbnQzMl90IG9mZnNldCwgYm9vbCBieXRlcyA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBi
YXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qgb2Zmc2V0KTsK
KyAgICAgICAgdm9pZCBiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklE
IHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGlu
dDMyX3Qgb2Zmc2V0LCBib29sIGJ5dGVzID0gZmFsc2UpOwogICAgICAgICB2b2lkIGRvdWJsZVRy
YW5zZmVyKGJvb2wgaXNMb2FkLCBGUFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2Us
IGludDMyX3Qgb2Zmc2V0KTsKIAogICAgICAgICAvLyBDb25zdGFudCBwb29sIGhuYWRsZXJzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QVJNdjdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDYgKzYwMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIE9QX01PVl9pbW1fVDMgICA9IDB4RjI0MCwKICAgICAgICAgT1BfU1VCX2lt
bV9UNCAgID0gMHhGMkEwLAogICAgICAgICBPUF9NT1ZUICAgICAgICAgPSAweEYyQzAsCisgICAg
ICAgIE9QX1VCRlhfVDEgICAgICA9IDB4RjNDMCwKICAgICAgICAgT1BfTk9QX1QyYSAgICAgID0g
MHhGM0FGLAogICAgICAgICBPUF9MRFJCX2ltbV9UMyAgPSAweEY4MTAsCiAgICAgICAgIE9QX0xE
UkJfcmVnX1QyICA9IDB4RjgxMCwKQEAgLTE0ODAsNiArMTQ4MSwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3AxMFJlZzNSZWczKE9QX1RTVF9yZWdfVDEsIHJt
LCBybik7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHViZngoUmVnaXN0ZXJJRCBy
ZCwgUmVnaXN0ZXJJRCBybiwgdW5zaWduZWQgbHNiLCB1bnNpZ25lZCB3aWR0aCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChsc2IgPCAzMik7CisgICAgICAgIEFTU0VSVCgod2lkdGggPj0gMSkgJiYg
KHdpZHRoIDw9IDMyKSk7CisgICAgICAgIEFTU0VSVCgobHNiICsgd2lkdGgpIDw9IDMyKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTJSZWc0MEltbTNSZWc0SW1tMjBJbW01KE9QX1VC
RlhfVDEsIHJkLCBybiwgKGxzYiAmIDB4MWMpIDw8IDEwLCAobHNiICYgMHgzKSA8PCA2LCAod2lk
dGggLSAxKSAmIDB4MWYpOworICAgIH0KKwogICAgIHZvaWQgdmFkZF9GNjQoRlBEb3VibGVSZWdp
c3RlcklEIHJkLCBGUERvdWJsZVJlZ2lzdGVySUQgcm4sIEZQRG91YmxlUmVnaXN0ZXJJRCBybSkK
ICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLnZmcE9wKE9QX1ZBRERfVDIsIE9QX1ZBRERfVDJi
LCB0cnVlLCBybiwgcmQsIHJtKTsKQEAgLTIyNDcsNiArMjI1NiwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9idWZmZXIucHV0U2hvcnQoKHJlZzIgPDwgMTIpIHwgaW1tKTsKICAgICAgICAg
fQogCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0d29Xb3JkT3AxMlJlZzQwSW1tM1JlZzRJ
bW0yMEltbTUoT3Bjb2RlSUQxIG9wLCBSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwg
dWludDE2X3QgaW1tMSwgdWludDE2X3QgaW1tMiwgdWludDE2X3QgaW1tMykKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9idWZmZXIucHV0U2hvcnQob3AgfCByZWcxKTsKKyAgICAgICAgICAgIG1f
YnVmZmVyLnB1dFNob3J0KChpbW0xIDw8IDEyKSB8IChyZWcyIDw8IDgpIHwgKGltbTIgPDwgNikg
fCBpbW0zKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEZvcm1hdHMgdXAgaW5zdHJ1Y3Rpb25z
IG9mIHRoZSBwYXR0ZXJuOgogICAgICAgICAvLyAgICAxMTExMTExMTFCMTFhYWFhOmJiYmIyMjJT
QTJDMmNjY2MKICAgICAgICAgLy8gV2hlcmUgMXMgaW4gdGhlIHBhdHRlcm4gY29tZSBmcm9tIG9w
MSwgMnMgaW4gdGhlIHBhdHRlcm4gY29tZSBmcm9tIG9wMiwgUyBpcyB0aGUgcHJvdmlkZWQgc2l6
ZSBiaXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTS5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUz
LDYgKzI1MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmRhdGFUcmFuc2ZlcjMy
KHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIHRydWUpOwogICAgIH0K
IAorICAgIHZvaWQgbG9hZDgoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJhc2VJbmRleFRyYW5zZmVyMzIodHJ1ZSwgZGVzdCwg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KGFkZHJlc3Muc2Nh
bGUpLCBhZGRyZXNzLm9mZnNldCwgdHJ1ZSk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkMzIoSW1w
bGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmRhdGFUcmFuc2ZlcjMyKHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVz
cy5vZmZzZXQpOwpAQCAtNDA5LDYgKzQxNCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBBUk1SZWdpc3RlcnM6OlMxLCByaWdodCk7CiAgICAgfQogCisgICAgSnVt
cCBicmFuY2g4KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFRydXN0
ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJpZ2h0Lm1fdmFsdWUgJiAw
eEZGRkZGRjAwKSk7CisgICAgICAgIGxvYWQ4KGxlZnQsIEFSTVJlZ2lzdGVyczo6UzEpOworICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNUmVnaXN0ZXJzOjpTMSwgcmlnaHQpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJp
Z2h0Lm1fdmFsdWUgJiAweEZGRkYwMDAwKSk7CisgICAgICAgIHJpZ2h0Lm1fdmFsdWUgPDw9IDE2
OworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihBUk1SZWdpc3RlcnM6OlMxLCBsZWZ0KTsKKyAg
ICAgICAgbHNoaWZ0MzIoMTYsIEFSTVJlZ2lzdGVyczo6UzEpCisgICAgICAgIHJldHVybiBicmFu
Y2gzMihjb25kLCBBUk1SZWdpc3RlcnM6OlMxLCByaWdodCk7CisgICAgfQorCiAgICAgSnVtcCBi
cmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgaW50IHVzZUNvbnN0YW50UG9vbCA9IDApCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5jbXBfcihsZWZ0LCByaWdodCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gOTQ1
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
djcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDYgKzQ4MywxMSBAQCBwdWJsaWM6CiAgICAgICAg
IGxvYWQ4KHNldHVwQXJtQWRkcmVzcyhhZGRyZXNzKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9p
ZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbG9hZDgoc2V0dXBBcm1BZGRyZXNzKGFkZHJlc3MpLCBkZXN0KTsKKyAgICB9CisgICAgCiAg
ICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsID0g
bW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKQEAgLTk2Myw2ICs5NjgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNo
MzIoY29uZCwgZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CiAgICAgfQog
CisgICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoMHhmZmZm
MDAwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKKyAgICAgICAgLy8gRXh0cmFjdCB0aGUgbG93ZXIgMTYg
Yml0cyBpbnRvIGEgdGVtcCBmb3IgY29tcGFyaXNvbgorICAgICAgICBtX2Fzc2VtYmxlci51YmZ4
KGRhdGFUZW1wUmVnaXN0ZXIsIGxlZnQsIDAsIDE2KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICB9CisgICAgCiAgICAgSnVtcCBi
cmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBUcnVzdGVk
SW1tMzIgcmlnaHQpCiAgICAgewogICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBp
bmNhc2UgdGhlIGJyYW5jaDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KQEAg
LTk3OSwxMSArOTkyLDIwIEBAIHB1YmxpYzoKIAogICAgIEp1bXAgYnJhbmNoOChSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQogICAgIHsK
KyAgICAgICAgQVNTRVJUKCEoMHhmZmZmZmYwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKICAgICAgICAg
Ly8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2g4IHdlIGNhbGwgdXNl
cyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KICAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVzc1RlbXBS
ZWdpc3Rlcik7CiAgICAgICAgIHJldHVybiBicmFuY2g4KGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0
ZXIsIHJpZ2h0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEoMHhmZmZmZmYwMCAmIHJpZ2h0Lm1fdmFsdWUpKTsKKyAgICAgICAgLy8gdXNl
IGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0
YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3Rlciwg
cmlnaHQpOworICAgIH0KKyAgICAKICAgICBKdW1wIGJyYW5jaFRlc3QzMihSZXN1bHRDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnRzdChyZWcsIG1hc2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiA5NDU3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBT
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw2ICs0OTYsMzUgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogCisgICAgdm9pZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBhZGRy
ZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCkgeworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICBzbGwgICAgIGFkZHJUZW1wLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlCisgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAs
IGFkZHJlc3MuYmFzZQorICAgICAgICAgICAgIGxidSAgICAgZGVzdCwgYWRkcmVzcy5vZmZzZXQo
YWRkclRlbXApCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChh
ZGRyVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3Rlciwg
YWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxidShkZXN0LCBhZGRyVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgIHNsbCAgICAgYWRkclRlbXAsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUKKyAgICAgICAgICAgICBhZGR1ICAgIGFkZHJUZW1wLCBhZGRyVGVtcCwgYWRkcmVz
cy5iYXNlCisgICAgICAgICAgICAgbHVpICAgICBpbW1UZW1wLCAoYWRkcmVzcy5vZmZzZXQgKyAw
eDgwMDApID4+IDE2CisgICAgICAgICAgICAgYWRkdSAgICBhZGRyVGVtcCwgYWRkclRlbXAsIGlt
bVRlbXAKKyAgICAgICAgICAgICBsYnUgICAgIGRlc3QsIChhZGRyZXNzLm9mZnNldCAmIDB4ZmZm
ZikoYXQpCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsbChhZGRy
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHUoYWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgYWRk
cmVzcy5iYXNlKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx1aShpbW1UZW1wUmVnaXN0ZXIs
IChhZGRyZXNzLm9mZnNldCArIDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubGJ1KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4
ICYmIGFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CkBAIC05MzIsNiArOTYxLDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBS
ZWdpc3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgQmFzZUluZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghKHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkZGRjAwKSk7CisgICAgICAgIGxvYWQ4KGxl
ZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgdGhlIHBy
ZXZpb3VzIGxvYWQ4KCkgdXNlcyBpbW1UZW1wUmVnaXN0ZXIuCisgICAgICAgIC8vIFNvLCB3ZSBu
ZWVkIHRvIHB1dCBtb3ZlKCkgYWZ0ZXIgbG9hZDgoKS4KKyAgICAgICAgbW92ZShyaWdodCwgaW1t
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkK
ICAgICB7CiAgICAgICAgIGlmIChjb25kID09IEVxdWFsKQpAQCAtMTAzMiw2ICsxMDcxLDE0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGRhdGFUZW1wUmVnaXN0ZXIs
IGltbVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2gxNihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbW1lZGlhdGUgdmFsdWUgaXMgdW5zaWduZWQg
MTYgYml0cy4KKyAgICAgICAgQVNTRVJUKCEocmlnaHQubV92YWx1ZSAmIDB4RkZGRjAwMDApKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYW5kaShpbW1UZW1wUmVnaXN0ZXIsIGxlZnQsIDB4ZmZmZik7
CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBpbW1UZW1wUmVnaXN0ZXIsIHJpZ2h0KTsK
KyAgICB9CisKICAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQmFz
ZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBsb2FkMTYobGVm
dCwgZGF0YVRlbXBSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTA5LDYgKzUwOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWQ4KGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbG9hZDgo
QmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwg
c2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3Ip
OworICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQ4KHNjciwg
YWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKwogICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwpAQCAtMTM1
Miw2ICsxMzYyLDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKICAg
ICB9CiAKKyAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5k
ZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmln
aHQubV92YWx1ZSAmIDB4RkZGRkZGMDApKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxz
aGlmdDMyKFRydXN0ZWRJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAobGVm
dC5vZmZzZXQpCisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobGVmdC5vZmZzZXQpLCBz
Y3IpOworICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQ4KHNjciwg
c2NyKTsKKyAgICAgICAgZXh0dWIoc2NyLCBzY3IpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEg
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJpZ2h0
Lm1fdmFsdWUsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IxKTsKKworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2Ny
LCBzY3IxKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAg
ICBBU1NFUlQoIShyaWdodC5tX3ZhbHVlICYgMHhGRkZGMDAwMCkpOworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGV4dHV3KGxlZnQsIHNjcik7Cisg
ICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJp
Z2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3IsIHNj
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBz
Y3IsIGNvbmQpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgaWYg
KGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaDE2KFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQogICAgIHsKICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NzUsNiArNDc1LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbENvbXBh
Y3QodGhpcyk7CiAgICAgfQogCisgICAgdm9pZCBsb2FkOChCYXNlSW5kZXggYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX21yKGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUsIGRl
c3QpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6d2xfbXIoYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSwgZGVzdCk7
CkBAIC04NzMsNiArODc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIGxlZnQsIHJpZ2h0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAg
eworICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYm
ICFyaWdodC5tX3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHdfcnIobGVmdCwg
bGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHdfaXIocmln
aHQubV92YWx1ZSwgbGVmdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4
ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaDE2KFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAg
ewogICAgICAgICBtX2Fzc2VtYmxlci5jbXB3X3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5i
YXNlLCBsZWZ0LmluZGV4LCBsZWZ0LnNjYWxlKTsKQEAgLTk1Niw2ICs5NzAsMTQgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQp
KSk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
QmFzZUluZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghKHJpZ2h0Lm1fdmFsdWUgJiAweEZGRkZGRjAwKSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIu
Y21wYl9pbShyaWdodC5tX3ZhbHVlLCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBsZWZ0LmluZGV4
LCBsZWZ0LnNjYWxlKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNv
bmRpdGlvbihjb25kKSkpOworICAgIH0KKwogICAgIEp1bXAganVtcCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDk0NTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDYgKzE1Miw3IEBAIGVudW0gewogICAgIFRTVF9PUENPREUgPSAweDIwMDgs
CiAgICAgVFNUSU1NX09QQ09ERSA9IDB4YzgwMCwKICAgICBUU1RCX09QQ09ERSA9IDB4Y2MwMCwK
KyAgICBFWFRVQl9PUENPREUgPSAweDYwMGMsCiAgICAgRVhUVVdfT1BDT0RFID0gMHg2MDBkLAog
ICAgIFhPUl9PUENPREUgPSAweDIwMGEsCiAgICAgWE9SSU1NX09QQ09ERSA9IDB4Y2EwMCwKQEAg
LTc1OCw2ICs3NTksMTIgQEAgcHVibGljOgogICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CiAgICAg
fQogCisgICAgdm9pZCBleHR1YihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhUVUJfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhUVVdfT1BDT0RFLCBkc3QsIHNyYyk7CkBA
IC0xODEwLDYgKzE4MTcsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTU9WV19SRUFEX1IwUk1f
T1BDT0RFOgogICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBAKFIwLCBSJWQpLCBSJWRc
biI7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFWFRVQl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIEVYVFUuQiBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEVYVFVXX09QQ09ERToKICAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgRVhUVS5XIFIlZCwgUiVkXG4iOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDk0
NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtODQyLDYgKzg0MiwxOSBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlm
CiAKKyAgICB2b2lkIGNtcHdfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIoaW1tKSkgeworICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0dST1VQMV9FdkliLCBHUk9VUDFfT1BfQ01QLCBkc3QpOworICAgICAgICAg
ICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9PUEVSQU5EX1NJWkUpOworICAgICAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMV9Fdkl6LCBHUk9VUDFfT1BfQ01QLCBkc3Qp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlMTYoaW1tKTsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIHZvaWQgY21wd19ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUpCiAgICAgewogICAgICAg
ICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX09QRVJBTkRfU0laRSk7CkBAIC0xMTU5LDYgKzExNzIs
MTEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX01PVlpYX0d2
RXcsIGRzdCwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwogICAgIH0KIAorICAgIHZvaWQg
bW92emJsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwg
aW50IHNjYWxlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3
b0J5dGVPcChPUDJfTU9WWlhfR3ZFYiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7
CisgICAgfQorCiAgICAgdm9pZCBtb3Z6YmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKICAgICAgICAgLy8gSW4gNjQtYml0LCB0aGlzIG1heSBjYXVzZSBhbiB1bm5l
Y2Vzc2FyeSBSRVggdG8gYmUgcGxhbnRlZCAoaWYgdGhlIGRzdCByZWdpc3RlcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiA5NDU3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NywyNiArMjY3LDI2IEBAIFJlZ0V4cCogUmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG8KICAgICByZXR1cm4gZ2xvYmFsRGF0YS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0
ZShwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CiB9CiAKLXZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK3ZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewotICAgIEFTU0VSVCht
X3N0YXRlID09IE5vdENvbXBpbGVkKTsKLSAgICBtX3JlcHJlc2VudGF0aW9uID0gYWRvcHRQdHIo
bmV3IFJlZ0V4cFJlcHJlc2VudGF0aW9uKTsKICAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJu
KG1fcGF0dGVyblN0cmluZywgaWdub3JlQ2FzZSgpLCBtdWx0aWxpbmUoKSwgJm1fY29uc3RydWN0
aW9uRXJyb3IpOwogICAgIGlmIChtX2NvbnN0cnVjdGlvbkVycm9yKSB7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotICAgIGdsb2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ry
b25nQ2FjaGUodGhpcyk7Ci0KICAgICBBU1NFUlQobV9udW1TdWJwYXR0ZXJucyA9PSBwYXR0ZXJu
Lm1fbnVtU3VicGF0dGVybnMpOwogCi0gICAgbV9zdGF0ZSA9IEJ5dGVDb2RlOworICAgIGlmICgh
bV9yZXByZXNlbnRhdGlvbikgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb3RDb21waWxl
ZCk7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24gPSBhZG9wdFB0cihuZXcgUmVnRXhwUmVwcmVz
ZW50YXRpb24pOworICAgICAgICBnbG9iYWxEYXRhLT5yZWdFeHBDYWNoZSgpLT5hZGRUb1N0cm9u
Z0NhY2hlKHRoaXMpOworICAgICAgICBtX3N0YXRlID0gQnl0ZUNvZGU7CisgICAgfQogCiAjaWYg
RU5BQkxFKFlBUlJfSklUKQogICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5j
ZXMgJiYgZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgWWFycjo6aml0Q29tcGls
ZShwYXR0ZXJuLCBnbG9iYWxEYXRhLCBtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUp
OworICAgICAgICBZYXJyOjpqaXRDb21waWxlKHBhdHRlcm4sIGNoYXJTaXplLCBnbG9iYWxEYXRh
LCBtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUpOwogI2lmIEVOQUJMRShZQVJSX0pJ
VF9ERUJVRykKICAgICAgICAgaWYgKCFtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUu
aXNGYWxsQmFjaygpKQogICAgICAgICAgICAgbV9zdGF0ZSA9IEpJVENvZGU7CkBAIC0yOTksMTEg
KzI5OSwzNiBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNoYXJTaXplKTsK
ICNlbmRpZgogCiAgICAgbV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6
OmJ5dGVDb21waWxlKHBhdHRlcm4sICZnbG9iYWxEYXRhLT5tX3JlZ0V4cEFsbG9jYXRvcik7CiB9
CiAKK3ZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBZYXJyOjpZYXJyQ2hhclNpemUgY2hhclNpemUpCit7CisgICAgLy8gSWYgdGhlIHN0YXRl
IGlzIE5vdENvbXBpbGVkIG9yIFBhcnNlRXJyb3IsIHRoZW4gdGhlcmUgaXMgbm8gcmVwcmVzZW50
YXRpb24uCisgICAgLy8gSWYgdGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiwgYW5kIHRoZSBzdGF0
ZSBtdXN0IGJlIGVpdGhlciBKSVRDb2RlIG9yIEJ5dGVDb2RlLgorICAgIEFTU0VSVCghIW1fcmVw
cmVzZW50YXRpb24gPT0gKG1fc3RhdGUgPT0gSklUQ29kZSB8fCBtX3N0YXRlID09IEJ5dGVDb2Rl
KSk7CisgICAgCisgICAgaWYgKG1fcmVwcmVzZW50YXRpb24pIHsKKyNpZiBFTkFCTEUoWUFSUl9K
SVQpCisgICAgICAgIGlmIChtX3N0YXRlICE9IEpJVENvZGUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjgpICYmIChtX3JlcHJlc2VudGF0
aW9uLT5tX3JlZ0V4cEpJVENvZGUuaGFzOEJpdENvZGUoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjE2KSAmJiAobV9yZXByZXNlbnRh
dGlvbi0+bV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZSgpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyNlbHNlCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIH0KKworICAgIGNvbXBpbGUo
Jmdsb2JhbERhdGEsIGNoYXJTaXplKTsKK30KKworCiBpbnQgUmVnRXhwOjptYXRjaChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMsIGludCBzdGFydE9mZnNldCwgVmVj
dG9yPGludCwgMzI+KiBvdmVjdG9yKQogewogICAgIGlmIChzdGFydE9mZnNldCA8IDApCkBAIC0z
MTcsNyArMzQyLDcgQEAgaW50IFJlZ0V4cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYQog
ICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAobV9zdGF0ZSAhPSBQYXJzZUVycm9yKSB7Ci0g
ICAgICAgIGNvbXBpbGVJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKKyAgICAgICAgY29tcGlsZUlm
TmVjZXNzYXJ5KGdsb2JhbERhdGEsIHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNo
YXIxNik7CiAKICAgICAgICAgaW50IG9mZnNldFZlY3RvclNpemUgPSAobV9udW1TdWJwYXR0ZXJu
cyArIDEpICogMjsKICAgICAgICAgaW50KiBvZmZzZXRWZWN0b3I7CkBAIC0zNDAsMTMgKzM2NSwx
NiBAQCBpbnQgUmVnRXhwOjptYXRjaChKU0dsb2JhbERhdGEmIGdsb2JhbERhCiAgICAgICAgIGlu
dCByZXN1bHQ7CiAjaWYgRU5BQkxFKFlBUlJfSklUKQogICAgICAgICBpZiAobV9zdGF0ZSA9PSBK
SVRDb2RlKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50
YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxl
bmd0aCgpLCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9uLT5tX3Jl
Z0V4cEpJVENvZGUsIHMubGF0aW4xKCkuZGF0YSgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwg
b2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFy
YWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOwogI2lmIEVO
QUJMRShZQVJSX0pJVF9ERUJVRykKICAgICAgICAgICAgIG1hdGNoQ29tcGFyZVdpdGhJbnRlcnBy
ZXRlcihzLCBzdGFydE9mZnNldCwgb2Zmc2V0VmVjdG9yLCByZXN1bHQpOwogI2VuZGlmCiAgICAg
ICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAgICAgICByZXN1bHQgPSBZYXJyOjppbnRlcnByZXQo
bV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBCeXRlY29kZS5nZXQoKSwgcy5jaGFyYWN0ZXJzKCks
IHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgcmVz
dWx0ID0gWWFycjo6aW50ZXJwcmV0KG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwQnl0ZWNvZGUu
Z2V0KCksIHMsIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOwogICAgICAg
ICBBU1NFUlQocmVzdWx0ID49IC0xKTsKIAogI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4K
QEAgLTM4OCw3ICs0MTYsNyBAQCB2b2lkIFJlZ0V4cDo6bWF0Y2hDb21wYXJlV2l0aEludGVycHJl
dGVyCiAgICAgZm9yICh1bnNpZ25lZCBqID0gMCwgaSA9IDA7IGkgPCBtX251bVN1YnBhdHRlcm5z
ICsgMTsgaiArPSAyLCBpKyspCiAgICAgICAgIGludGVycHJldGVyT2Zmc2V0VmVjdG9yW2pdID0g
LTE7CiAKLSAgICBpbnRlcnByZXRlclJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlcHJlc2Vu
dGF0aW9uLT5tX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBzLmNoYXJhY3RlcnMoKSwgc3RhcnRPZmZz
ZXQsIHMubGVuZ3RoKCksIGludGVycHJldGVyT2Zmc2V0VmVjdG9yKTsKKyAgICBpbnRlcnByZXRl
clJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEJ5dGVj
b2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgaW50ZXJwcmV0ZXJPZmZzZXRW
ZWN0b3IpOwogCiAgICAgaWYgKGppdFJlc3VsdCAhPSBpbnRlcnByZXRlclJlc3VsdCkKICAgICAg
ICAgZGlmZmVyZW5jZXMrKzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRXhlY3V0
YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlJlZ0V4
cEtleS5oIgorI2luY2x1ZGUgInlhcnIvWWFyci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtOTEsMTMgKzkyLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBOb3RDb21waWxlZAogICAgICAgICB9IG1fc3RhdGU7CiAK
LSAgICAgICAgdm9pZCBjb21waWxlKEpTR2xvYmFsRGF0YSopOwotICAgICAgICB2b2lkIGNvbXBp
bGVJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtX3JlcHJlc2VudGF0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNvbXBpbGUoJmdsb2JhbERhdGEpOwotICAgICAgICB9CisgICAgICAgIHZvaWQg
Y29tcGlsZShKU0dsb2JhbERhdGEqLCBZYXJyOjpZYXJyQ2hhclNpemUpOworICAgICAgICB2b2lk
IGNvbXBpbGVJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBZYXJyOjpZYXJyQ2hhclNpemUpOwog
CiAjaWYgRU5BQkxFKFlBUlJfSklUX0RFQlVHKQogICAgICAgICB2b2lkIG1hdGNoQ29tcGFyZVdp
dGhJbnRlcnByZXRlcihjb25zdCBVU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQqIG9mZnNl
dFZlY3RvciwgaW50IGppdFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVVN0cmluZy5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKICAgICB9CiAKKyAgICBib29s
IGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBDU3RyaW5nIGFzY2lpKCkg
Y29uc3Q7CiAgICAgQ1N0cmluZyBsYXRpbjEoKSBjb25zdDsKICAgICBDU3RyaW5nIHV0ZjgoYm9v
bCBzdHJpY3QgPSBmYWxzZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5o
CShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsMTMgQEAgZW51bSBKU1JlZ0V4cFJlc3VsdCB7CiAg
ICAgSlNSZWdFeHBFcnJvckludGVybmFsID0gLTQKIH07CiAKK2VudW0gWWFyckNoYXJTaXplIHsK
KyAgICBDaGFyOCwKKyAgICBDaGFyMTYKK307CisKIFBhc3NPd25QdHI8Qnl0ZWNvZGVQYXR0ZXJu
PiBieXRlQ29tcGlsZShZYXJyUGF0dGVybiYsIEJ1bXBQb2ludGVyQWxsb2NhdG9yKik7Ci1pbnQg
aW50ZXJwcmV0KEJ5dGVjb2RlUGF0dGVybiosIGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOworaW50IGludGVycHJldChCeXRl
Y29kZVBhdHRlcm4qLCBjb25zdCBVU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDk0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFycklu
dGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJZYXJySW50ZXJwcmV0ZXIuaCIKIAorI2luY2x1ZGUgIlVT
dHJpbmcuaCIKICNpbmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxs
b2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWZuZGVmIE5ERUJV
RwogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xNjYsOSArMTY4LDYzIEBAIHB1YmxpYzoKICAgICAg
ICAgYWxsb2NhdG9yUG9vbCA9IGFsbG9jYXRvclBvb2wtPmRlYWxsb2MoY29udGV4dCk7CiAgICAg
fQogCisgICAgLy8gVGhpcyBjbGFzcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgY2hhcmFj
dGVyIGl0ZXJhdG9yLCBjdXJyZW50IAorICAgIC8vIHByb3Bvc2VkIG5hbWUgU3RyaW5nQ29uc3RD
aGFyYWN0ZXJJdGVyYXRvci4KKyAgICBjbGFzcyBDaGFyQWNjZXNzIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENoYXJBY2Nlc3MoY29uc3QgVVN0cmluZyYgcykKKyAgICAgICAgICAgIDogbV9idWZm
ZXIoMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpIHsKKyAgICAgICAg
ICAgICAgICBtX2NoYXJTaXplID0gQ2hhcjg7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gcy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3B0ci5wdHI4ID0gbV9idWZmZXIg
PSBzdGF0aWNfY2FzdDxjaGFyICo+KGZhc3RNYWxsb2MobGVuZ3RoKSk7CisgICAgICAgICAgICAg
ICAgbWVtY3B5KG1fYnVmZmVyLCBzLmxhdGluMSgpLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9jaGFyU2l6ZSA9IENoYXIxNjsKKyAgICAg
ICAgICAgICAgICBtX3B0ci5wdHIxNiA9IHMuY2hhcmFjdGVycygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgQ2hhckFjY2Vzcyhjb25zdCBjaGFyKiBwdHIpCisgICAgICAg
ICAgICA6IG1fY2hhclNpemUoQ2hhcjgpCisgICAgICAgICAgICAsIG1fYnVmZmVyKDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fcHRyLnB0cjggPSBwdHI7CisgICAgICAgIH0KKworICAgICAg
ICBDaGFyQWNjZXNzKGNvbnN0IFVDaGFyKiBwdHIpCisgICAgICAgICAgICA6IG1fY2hhclNpemUo
Q2hhcjE2KQorICAgICAgICAgICAgLCBtX2J1ZmZlcigwKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3B0ci5wdHIxNiA9IHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIH5DaGFyQWNjZXNzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAg
ICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5l
IFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3B0ci5w
dHI4W2luZGV4XTsKKyAgICAgICAgICAgIHJldHVybiBtX3B0ci5wdHIxNltpbmRleF07CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHB0cjg7CisgICAgICAgICAgICBjb25zdCBVQ2hhciogcHRyMTY7CisgICAgICAgIH0g
bV9wdHI7CisgICAgICAgIFlhcnJDaGFyU2l6ZSBtX2NoYXJTaXplOworICAgICAgICBjaGFyKiBt
X2J1ZmZlcjsKKyAgICB9OworCiAgICAgY2xhc3MgSW5wdXRTdHJlYW0gewogICAgIHB1YmxpYzoK
LSAgICAgICAgSW5wdXRTdHJlYW0oY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoKQorICAgICAgICBJbnB1dFN0cmVhbShjb25zdCBVU3RyaW5nJiBpbnB1
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgICAgIDogaW5wdXQo
aW5wdXQpCiAgICAgICAgICAgICAsIHBvcyhzdGFydCkKICAgICAgICAgICAgICwgbGVuZ3RoKGxl
bmd0aCkKQEAgLTI3OCw3ICszMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dDsKKyAgICAgICAgQ2hhckFjY2VzcyBpbnB1
dDsKICAgICAgICAgdW5zaWduZWQgcG9zOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAg
fTsKQEAgLTE0MjAsMTAgKzE0NzYsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb3V0cHV0
WzBdOwogICAgIH0KIAotICAgIEludGVycHJldGVyKEJ5dGVjb2RlUGF0dGVybiogcGF0dGVybiwg
aW50KiBvdXRwdXQsIGNvbnN0IFVDaGFyKiBpbnB1dENoYXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgSW50ZXJwcmV0ZXIoQnl0ZWNvZGVQYXR0ZXJuKiBwYXR0ZXJuLCBp
bnQqIG91dHB1dCwgY29uc3QgVVN0cmluZyBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGxlbmd0aCkKICAgICAgICAgOiBwYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwgb3V0cHV0KG91
dHB1dCkKLSAgICAgICAgLCBpbnB1dChpbnB1dENoYXIsIHN0YXJ0LCBsZW5ndGgpCisgICAgICAg
ICwgaW5wdXQoaW5wdXQsIHN0YXJ0LCBsZW5ndGgpCiAgICAgICAgICwgYWxsb2NhdG9yUG9vbCgw
KQogICAgICAgICAsIHJlbWFpbmluZ01hdGNoQ291bnQobWF0Y2hMaW1pdCkKICAgICB7CkBAIC0x
OTEwLDcgKzE5NjYsNyBAQCBQYXNzT3duUHRyPEJ5dGVjb2RlUGF0dGVybj4gYnl0ZUNvbXBpbGUo
CiAgICAgcmV0dXJuIEJ5dGVDb21waWxlcihwYXR0ZXJuKS5jb21waWxlKGFsbG9jYXRvcik7CiB9
CiAKLWludCBpbnRlcnByZXQoQnl0ZWNvZGVQYXR0ZXJuKiBieXRlY29kZSwgY29uc3QgVUNoYXIq
IGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKK2lu
dCBpbnRlcnByZXQoQnl0ZWNvZGVQYXR0ZXJuKiBieXRlY29kZSwgY29uc3QgVVN0cmluZyYgaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogewogICAg
IHJldHVybiBJbnRlcnByZXRlcihieXRlY29kZSwgb3V0cHV0LCBpbnB1dCwgc3RhcnQsIGxlbmd0
aCkuaW50ZXJwcmV0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklU
LmNwcAkocmV2aXNpb24gOTQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDE5ICsyNTYsMTkgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90
RXF1YWwsIGluZGV4LCBsZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmQ2hhckVxdWFs
cyhVQ2hhciBjaCwgaW50IGlucHV0UG9zaXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYnJh
bmNoMTYoRXF1YWwsIEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBpbnB1dFBvc2l0
aW9uICogc2l6ZW9mKFVDaGFyKSksIEltbTMyKGNoKSk7Ci0gICAgfQotCiAgICAgSnVtcCBqdW1w
SWZDaGFyTm90RXF1YWxzKFVDaGFyIGNoLCBpbnQgaW5wdXRQb3NpdGlvbikKICAgICB7CisgICAg
ICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDgo
Tm90RXF1YWwsIEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzT25lLCBpbnB1dFBvc2l0aW9u
ICogc2l6ZW9mKGNoYXIpKSwgSW1tMzIoY2gpKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDE2KE5v
dEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgaW5wdXRQb3NpdGlvbiAq
IHNpemVvZihVQ2hhcikpLCBJbW0zMihjaCkpOwogICAgIH0KIAogICAgIHZvaWQgcmVhZENoYXJh
Y3RlcihpbnQgaW5wdXRQb3NpdGlvbiwgUmVnaXN0ZXJJRCByZWcpCiAgICAgewotICAgICAgICBs
b2FkMTYoQmFzZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28sIGlucHV0UG9zaXRpb24gKiBz
aXplb2YoVUNoYXIpKSwgcmVnKTsKKyAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhcjgpCisg
ICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc09uZSwgaW5wdXRQ
b3NpdGlvbiAqIHNpemVvZihjaGFyKSksIHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgaW5wdXRQb3NpdGlvbiAq
IHNpemVvZihVQ2hhcikpLCByZWcpOwogICAgIH0KIAogICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFJl
Z2lzdGVySUQgcmVnLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQpAQCAtNjU4LDYgKzY1OCwxMiBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAgICBVQ2hhciBjaCA9IHRlcm0tPnBhdHRl
cm5DaGFyYWN0ZXI7CiAKKyAgICAgICAgaWYgKChjaCA+IDB4ZmYpICYmIChtX2NoYXJTaXplID09
IENoYXI4KSkgeworICAgICAgICAgICAgLy8gSGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3Rl
ciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQgY2lyY3VpdAorICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CiAKICAgICAgICAgaWYg
KG5leHRPcC5tX29wID09IE9wVGVybSkgewpAQCAtNjY5LDI0ICs2NzUsMzQgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAgICAgICAgICAgVUNoYXIg
Y2gyID0gbmV4dFRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7CiAKKyAgICAgICAgICAgICAgICBpbnQg
c2hpZnRBbW91bnQgPSBtX2NoYXJTaXplID09IENoYXI4ID8gOCA6IDE2OwogICAgICAgICAgICAg
ICAgIGludCBtYXNrID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgY2hQYWlyID0gY2ggfCAoY2gy
IDw8IDE2KTsKKyAgICAgICAgICAgICAgICBpbnQgY2hQYWlyID0gY2ggfCAoY2gyIDw8IHNoaWZ0
QW1vdW50KTsKIAogICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2gpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbWFzayB8PSAzMjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlB
bHBoYShjaDIpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAzMiA8PCAxNjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0gMzIgPDwgc2hpZnRBbW91bnQ7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGlu
ZGV4LCBUaW1lc1R3bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6ZW9m
KFVDaGFyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhhZGRyZXNzLCBjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVy
LCBJbW0zMihjaFBhaXIgfCBtYXNrKSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxm
V29yZHMoTm90RXF1YWwsIGFkZHJlc3MsIEltbTMyKGNoUGFpcikpKTsKLQorICAgICAgICAgICAg
ICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2VJ
bmRleCBhZGRyZXNzKGlucHV0LCBpbmRleCwgVGltZXNPbmUsICh0ZXJtLT5pbnB1dFBvc2l0aW9u
IC0gbV9jaGVja2VkKSAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICht
YXNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihOb3RF
cXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBhaXIgfCBtYXNrKSkpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJy
YW5jaDE2KE5vdEVxdWFsLCBhZGRyZXNzLCBJbW0zMihjaFBhaXIpKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQs
IGluZGV4LCBUaW1lc1R3bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGFkZHJlc3MsIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0
ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2hQYWlyIHwgbWFzaykpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIGFkZHJlc3MsIEltbTMy
KGNoUGFpcikpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV4dE9wLm1f
aXNEZWFkQ29kZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQpAQCAtNzE5LDE1ICs3MzUsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbQogICAgICAgICBzdWIzMihJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LnVuc2FmZUdl
dCgpKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKLSAgICAg
ICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoQ2hl
Y2tlZDxpbnQ+KHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQgKyBDaGVja2VkPGludDY0
X3Q+KHRlcm0tPnF1YW50aXR5Q291bnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFVDaGFy
KSkpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGNvdW50
UmVnaXN0ZXIsIG1fY2hhclNjYWxlLCAoQ2hlY2tlZDxpbnQ+KHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQgKyBDaGVja2VkPGludDY0X3Q+KHRlcm0tPnF1YW50aXR5Q291bnQpKSAqIHN0
YXRpY19jYXN0PGludD4obV9jaGFyU2l6ZSA9PSBDaGFyOCA/IHNpemVvZihjaGFyKSA6IHNpemVv
ZihVQ2hhcikpKS51bnNhZmVHZXQoKSk7CiAKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9y
ZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3Ms
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAg
ICAgICAgICAgICBsb2FkOChhZGRyZXNzLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAg
b3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9M
b3dlcihjaCkpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0
dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRv
VXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihOb3RF
cXVhbCwgYWRkcmVzcywgSW1tMzIoY2gpKSk7CisgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9
PSBDaGFyOCkKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2g4KE5vdEVx
dWFsLCBhZGRyZXNzLCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihOb3RFcXVhbCwgYWRkcmVzcywgSW1tMzIo
Y2gpKSk7CiAgICAgICAgIH0KICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJl
Z2lzdGVyKTsKICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIGluZGV4
KS5saW5rVG8obG9vcCwgdGhpcyk7CkBAIC03NDgsMjYgKzc3MCwzMSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIGNvdW50UmVnaXN0ZXIpOwogCi0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAg
ICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0
KCkpOwotICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEo
Y2gpKSB7Ci0gICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBt
X2NoZWNrZWQsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiks
IGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAgICAgIGlm
ICgoY2ggPiAweGZmKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkpIHsKKyAgICAgICAgICAgIC8v
IEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNo
b3J0IGNpcmN1aXQKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2Ug
fHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5w
dXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBpbmRleCk7Ci0gICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ID09IHF1YW50aWZ5
SW5maW5pdGUpCi0gICAgICAgICAgICBqdW1wKGxvb3ApOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRp
dHlDb3VudC51bnNhZmVHZXQoKSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIEp1
bXBMaXN0IGZhaWx1cmVzOworICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CisgICAgICAgICAgICBpZiAobV9w
YXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7CisgICAgICAgICAgICAg
ICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0
ZXIpOworICAgICAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsK
KyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJh
Y3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5p
Y29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkpKTsKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQ
b3NpdGlvbiAtIG1fY2hlY2tlZCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3Vu
dCA9PSBxdWFudGlmeUluZmluaXRlKQorICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVn
aXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQudW5zYWZlR2V0KCkpKS5saW5rVG8obG9v
cCwgdGhpcyk7CiAKLSAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZh
aWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgIH0KICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFi
ZWwoKTsKIAogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVM
b2NhdGlvbik7CkBAIC04MTUsMjQgKzg0MiwyOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0
aW9uLCBjb3VudFJlZ2lzdGVyKTsKIAotICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQo
YXRFbmRPZklucHV0KCkpOwotICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFu
dGlmeUluZmluaXRlKQotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5j
aDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LnVuc2Fm
ZUdldCgpKSkpOwotICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJ
QWxwaGEoY2gpKSB7Ci0gICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRp
b24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0z
MigzMiksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkp
KSk7CisgICAgICAgIGlmICgoY2ggPiAweGZmKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkpIHsK
KyAgICAgICAgICAgIC8vIEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDgg
Yml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVz
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKCFt
X3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2Rl
Ojp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1
bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAg
bm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKKyAgICAgICAgICAgIGlm
ICh0ZXJtLT5xdWFudGl0eUNvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCisgICAgICAgICAgICAg
ICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVy
LCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LnVuc2FmZUdldCgpKSkpOworICAgICAgICAgICAg
aWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgeworICAgICAg
ICAgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwg
Y2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2ln
bm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gp
KSk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNoYXJO
b3RFcXVhbHMoY2gsIHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpKTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBpbmRleCk7CiAKKyAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAg
ICAgICAgfQogICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKHRoaXMpOworCiAgICAgICAg
IHN1YjMyKGNvdW50UmVnaXN0ZXIsIGluZGV4KTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5mYWxsdGhyb3VnaCgpOwogICAgIH0KQEAgLTg3Myw3ICs5MDUsMTAgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7
CiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgbG9hZDE2KEJhc2VJbmRleChp
bnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChDaGVja2VkPGludD4odGVybS0+aW5wdXRQ
b3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVybS0+cXVhbnRpdHlDb3Vu
dCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoVUNoYXIpKSkudW5zYWZlR2V0KCkpLCBjaGFy
YWN0ZXIpOworICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGxv
YWQ4KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNPbmUsIChDaGVja2VkPGlu
dD4odGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50NjRfdD4odGVy
bS0+cXVhbnRpdHlDb3VudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoY2hhcikpKS51bnNh
ZmVHZXQoKSksIGNoYXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQxNihC
YXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoQ2hlY2tlZDxpbnQ+KHRl
cm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQgKyBDaGVja2VkPGludDY0X3Q+KHRlcm0tPnF1
YW50aXR5Q291bnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFVDaGFyKSkpLnVuc2FmZUdl
dCgpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIs
IG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0ZXJtLT5p
bnZlcnQoKSkKQEAgLTEwMTYsNyArMTA1MSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChicmFuY2hUZXN0
MzIoWmVybywgbWF0Y2hQb3MpKTsKICAgICAgICAgTGFiZWwgZmluZEJPTExvb3AodGhpcyk7CiAg
ICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwotICAgICAgICBsb2FkMTYo
QmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAg
ICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRl
eChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzVHdv
LCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIs
IGZvdW5kQmVnaW5uaW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygp
KTsKICAgICAgICAgYnJhbmNoVGVzdDMyKE5vblplcm8sIG1hdGNoUG9zKS5saW5rVG8oZmluZEJP
TExvb3AsIHRoaXMpOwogICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQoanVtcCgpKTsKQEAg
LTEwMzQsNyArMTA3MiwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtCiAKICAgICAgICAgTGFiZWwgZmluZEVPTExvb3AodGhpcyk7ICAgICAgICAKICAgICAgICAg
Zm91bmRFbmRpbmdOZXdMaW5lLmFwcGVuZChicmFuY2gzMihFcXVhbCwgbWF0Y2hQb3MsIGxlbmd0
aCkpOwotICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28s
IDApLCBjaGFyYWN0ZXIpOworICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKKyAgICAg
ICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzT25lLCAwKSwgY2hh
cmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1
dCwgbWF0Y2hQb3MsIFRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFy
YWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5kRW5kaW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xp
bmVDaGFyYWN0ZXJDbGFzcygpKTsKICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRj
aFBvcyk7CiAgICAgICAgIGp1bXAoZmluZEVPTExvb3ApOwpAQCAtMjM5OCw4ICsyNDM5LDEwIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICB9CiAKIHB1Ymxp
YzoKLSAgICBZYXJyR2VuZXJhdG9yKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuKQorICAgIFlhcnJHZW5l
cmF0b3IoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKICAgICAg
ICAgOiBtX3BhdHRlcm4ocGF0dGVybikKKyAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQor
ICAgICAgICAsIG1fY2hhclNjYWxlKG1fY2hhclNpemUgPT0gQ2hhcjggPyBUaW1lc09uZTogVGlt
ZXNUd28pCiAgICAgICAgICwgbV9zaG91bGRGYWxsQmFjayhmYWxzZSkKICAgICAgICAgLCBtX2No
ZWNrZWQoMCkKICAgICB7CkBAIC0yNDMxLDEzICsyNDc0LDIwIEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gTGluayAmIGZpbmFsaXplIHRoZSBjb2RlLgogICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKmdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKICAgICAg
ICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKLSAgICAg
ICAgaml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKKyAgICAgICAgaWYg
KG1fY2hhclNpemUgPT0gQ2hhcjgpCisgICAgICAgICAgICBqaXRPYmplY3Quc2V0OEJpdENvZGUo
bGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGpp
dE9iamVjdC5zZXQxNkJpdENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiAgICAgICAg
IGppdE9iamVjdC5zZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgWWFyclBhdHRlcm4mIG1fcGF0dGVybjsKIAorICAgIFlhcnJDaGFyU2l6ZSBtX2No
YXJTaXplOworCisgICAgU2NhbGUgbV9jaGFyU2NhbGU7CisKICAgICAvLyBVc2VkIHRvIGRldGVj
dCByZWd1bGFyIGV4cHJlc3Npb24gY29uc3RydWN0cyB0aGF0IGFyZSBub3QgY3VycmVudGx5CiAg
ICAgLy8gc3VwcG9ydGVkIGluIHRoZSBKSVQ7IGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIg
d2hlbiB0aGlzIGlzIGRldGVjdGVkLgogICAgIGJvb2wgbV9zaG91bGRGYWxsQmFjazsKQEAgLTI0
NjEsOSArMjUxMSwxNCBAQCBwcml2YXRlOgogICAgIEJhY2t0cmFja2luZ1N0YXRlIG1fYmFja3Ry
YWNraW5nU3RhdGU7CiB9OwogCi12b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4s
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQordm9p
ZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUs
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQogewot
ICAgIFlhcnJHZW5lcmF0b3IocGF0dGVybikuY29tcGlsZShnbG9iYWxEYXRhLCBqaXRPYmplY3Qp
OworICAgIFlhcnJHZW5lcmF0b3IocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoZ2xvYmFsRGF0
YSwgaml0T2JqZWN0KTsKK30KKworaW50IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0
LCBjb25zdCBjaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50
KiBvdXRwdXQpCit7CisgICAgcmV0dXJuIGppdE9iamVjdC5leGVjdXRlKGlucHV0LCBzdGFydCwg
bGVuZ3RoLCBvdXRwdXQpOwogfQogCiBpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmpl
Y3QsIGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwg
aW50KiBvdXRwdXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZp
c2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1
ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyUGF0dGVybi5oIgogCiAjaWYgQ1BVKFg4NikgJiYg
IUNPTVBJTEVSKE1TVkMpCkBAIC00Nyw3ICs0OCw4IEBAIGNsYXNzIEV4ZWN1dGFibGVQb29sOwog
bmFtZXNwYWNlIFlhcnIgewogCiBjbGFzcyBZYXJyQ29kZUJsb2NrIHsKLSAgICB0eXBlZGVmIGlu
dCAoKllhcnJKSVRDb2RlKShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgsIGludCogb3V0cHV0KSBZQVJSX0NBTEw7CisgICAgdHlwZWRlZiBpbnQgKCpZ
YXJySklUQ29kZTgpKGNvbnN0IGNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
bGVuZ3RoLCBpbnQqIG91dHB1dCkgWUFSUl9DQUxMOworICAgIHR5cGVkZWYgaW50ICgqWWFyckpJ
VENvZGUxNikoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBpbnQqIG91dHB1dCkgWUFSUl9DQUxMOwogCiBwdWJsaWM6CiAgICAgWWFyckNvZGVCbG9j
aygpCkBAIC02MSwyNCArNjMsMzUgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGYWxsQmFjayhi
b29sIGZhbGxiYWNrKSB7IG1fbmVlZEZhbGxCYWNrID0gZmFsbGJhY2s7IH0KICAgICBib29sIGlz
RmFsbEJhY2soKSB7IHJldHVybiBtX25lZWRGYWxsQmFjazsgfQotICAgIHZvaWQgc2V0KE1hY3Jv
QXNzZW1ibGVyOjpDb2RlUmVmIHJlZikgeyBtX3JlZiA9IHJlZjsgfQorICAgIGJvb2wgaGFzOEJp
dENvZGUoKSB7IHJldHVybiBtX3JlZjgubV9zaXplOyB9CisgICAgYm9vbCBoYXMxNkJpdENvZGUo
KSB7IHJldHVybiBtX3JlZjE2Lm1fc2l6ZTsgfQorICAgIHZvaWQgc2V0OEJpdENvZGUoTWFjcm9B
c3NlbWJsZXI6OkNvZGVSZWYgcmVmKSB7IG1fcmVmOCA9IHJlZjsgfQorICAgIHZvaWQgc2V0MTZC
aXRDb2RlKE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIHJlZikgeyBtX3JlZjE2ID0gcmVmOyB9CiAK
LSAgICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgsIGludCogb3V0cHV0KQorICAgIGludCBleGVjdXRlKGNvbnN0IGNoYXIqIGlu
cHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5tX2Nv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7Cisg
ICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8WWFyckpJVENvZGU4PihtX3JlZjgubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlu
cHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQpOwogICAgIH0KIAorICAgIGludCBleGVjdXRlKGNv
bnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBv
dXRwdXQpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlKCkpOworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxZYXJySklUQ29kZTE2PihtX3JlZjE2Lm1fY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAgICB9CiAj
aWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVybiBt
X3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkNvZGVSZWYgbV9yZWY7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNv
ZGVSZWYgbV9yZWY4OworICAgIE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIG1fcmVmMTY7CiAgICAg
Ym9vbCBtX25lZWRGYWxsQmFjazsKIH07CiAKLXZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYs
IEpTR2xvYmFsRGF0YSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCk7Cit2b2lkIGppdENvbXBp
bGUoWWFyclBhdHRlcm4mLCBZYXJyQ2hhclNpemUsIEpTR2xvYmFsRGF0YSosIFlhcnJDb2RlQmxv
Y2smIGppdE9iamVjdCk7CiBpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNv
bnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBv
dXRwdXQpOworaW50IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBjaGFy
KiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyclBhcnNlci5oCShyZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAgICAgLCBtX2Jh
Y2tSZWZlcmVuY2VMaW1pdChiYWNrUmVmZXJlbmNlTGltaXQpCiAgICAgICAgICwgbV9lcnIoTm9F
cnJvcikKLSAgICAgICAgLCBtX2RhdGEocGF0dGVybi5jaGFyYWN0ZXJzKCkpCisgICAgICAgICwg
bV9kYXRhKHBhdHRlcm4pCiAgICAgICAgICwgbV9zaXplKHBhdHRlcm4ubGVuZ3RoKCkpCiAgICAg
ICAgICwgbV9pbmRleCgwKQogICAgICAgICAsIG1fcGFyZW50aGVzZXNOZXN0aW5nRGVwdGgoMCkK
QEAgLTc5Myw3ICs3OTMsNyBAQCBwcml2YXRlOgogICAgIERlbGVnYXRlJiBtX2RlbGVnYXRlOwog
ICAgIHVuc2lnbmVkIG1fYmFja1JlZmVyZW5jZUxpbWl0OwogICAgIEVycm9yQ29kZSBtX2VycjsK
LSAgICBjb25zdCBVQ2hhciogbV9kYXRhOworICAgIGNvbnN0IFVTdHJpbmcmIG1fZGF0YTsKICAg
ICB1bnNpZ25lZCBtX3NpemU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICB1bnNpZ25lZCBt
X3BhcmVudGhlc2VzTmVzdGluZ0RlcHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4NzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxMS0wOS0wOSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVcGRhdGUgUmVnRXhwIGFuZCByZWxhdGVkIGNsYXNzZXMgdG8gdXNlIDggYml0IHN0
cmluZ3Mgd2hlbiBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY3MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ3VsYXJFeHBy
ZXNzaW9uOjptYXRjaCk6IENoYW5nZWQgY2FsbCB0byBtYXRjaAorICAgICAgICB1cGRhdGVkIEpT
Qzo6WWFycjppbnRlcnByZXQoKSB0aGF0IG5vdyB0YWtlcyBhIFVTdHJpbmcmLgorCiAyMDExLTA5
LTA5ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluaXRpYWxp
emUgRXhjZXB0aW9uQ29kZSBpbiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4cHJlc3Npb24uY3BwCShy
ZXZpc2lvbiA5NDU3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUmVndWxhckV4
cHJlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgaW50IFJlZ3Vs
YXJFeHByZXNzaW9uOjptYXRjaChjb25zdCBTdHJpbgogICAgIGZvciAodW5zaWduZWQgaiA9IDAs
IGkgPSAwOyBpIDwgZC0+bV9udW1TdWJwYXR0ZXJucyArIDE7IGogKz0gMiwgaSsrKQogICAgICAg
ICBvZmZzZXRWZWN0b3Jbal0gPSAtMTsKIAotICAgIGludCByZXN1bHQgPSBKU0M6OllhcnI6Omlu
dGVycHJldChkLT5tX3JlZ0V4cEJ5dGVDb2RlLmdldCgpLCBzdHIuY2hhcmFjdGVycygpLCBzdGFy
dEZyb20sIHN0ci5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICBpbnQgcmVzdWx0ID0gSlND
OjpZYXJyOjppbnRlcnByZXQoZC0+bV9yZWdFeHBCeXRlQ29kZS5nZXQoKSwgSlNDOjpVU3RyaW5n
KHN0ci5pbXBsKCkpLCBzdGFydEZyb20sIHN0ci5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICAg
ICBBU1NFUlQocmVzdWx0ID49IC0xKTsKIAogICAgIGlmIChyZXN1bHQgPCAwKSB7Cg==
</data>
<flag name="review"
          id="103480"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>