<?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>151114</bug_id>
          
          <creation_ts>2015-11-10 11:19:57 -0800</creation_ts>
          <short_desc>B3 should be able to compile a program with ChillDiv</short_desc>
          <delta_ts>2015-11-10 23:21:28 -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>WebKit 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>
          
          <blocked>150279</blocked>
    
    <blocked>151115</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140858</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 11:19:57 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140890</commentid>
    <comment_count>1</comment_count>
      <attachid>265215</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 12:12:30 -0800</bug_when>
    <thetext>Created attachment 265215
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140918</commentid>
    <comment_count>2</comment_count>
      <attachid>265223</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 13:26:03 -0800</bug_when>
    <thetext>Created attachment 265223
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140993</commentid>
    <comment_count>3</comment_count>
      <attachid>265247</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 16:54:05 -0800</bug_when>
    <thetext>Created attachment 265247
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140995</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 16:56:32 -0800</bug_when>
    <thetext>Attachment 265247 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3BlockInsertionSet.h:78:  The parameter name &quot;block&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:45:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:46:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:47:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 47 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>1141002</commentid>
    <comment_count>5</comment_count>
      <attachid>265251</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 17:09:19 -0800</bug_when>
    <thetext>Created attachment 265251
the patch

With some fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141016</commentid>
    <comment_count>6</comment_count>
      <attachid>265255</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 17:42:20 -0800</bug_when>
    <thetext>Created attachment 265255
the patch

Fix 32-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141056</commentid>
    <comment_count>7</comment_count>
      <attachid>265255</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-10 21:06:06 -0800</bug_when>
    <thetext>Comment on attachment 265255
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:22
&gt; +        This introduces an idiom that handles this. It&apos;s BlockInsertionSet::splitBefore(). The
&gt; +        idea is that it uses the current block before the split as the continuation after the
&gt; +        split. When you call splitBefore(), you pass it your loop index and your InsertionSet
&gt; +        (if applicable). It makes sure that it changes those auxiliary things in such a way that
&gt; +        you can keep looping.
&gt; +

splitBefore() -&gt; splitForward()

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:394
&gt; +    void x86ConvertToDoubleWord64(RegisterID rax, RegisterID rdx)

ConvertToQuadword?

&gt; Source/JavaScriptCore/assembler/X86Assembler.h:1295
&gt; +    void cdqq()

Looks like the official name for this is &quot;cqo&quot;

&gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:75
&gt; +void updatePredecessors(BasicBlock* root)

updatePredecessors -&gt; updatePredecessorsAfter(block)?
The name is a bit weird.

&gt; Source/JavaScriptCore/b3/B3Common.h:101
&gt; +    if (den == -1 &amp;&amp; num == -2147483647 - 1)

Why not use numeric_limits?

&gt; Source/JavaScriptCore/b3/B3Common.h:110
&gt; +    if (den == -1 &amp;&amp; num == -9223372036854775807ll - 1)

ditto, and some later.

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:59
&gt; +        m_changed |= m_blockInsertionSet.execute();

Having this at the end means no Macro can use a Macro in its expansion.

I guess you could assert that by running the algorithm again in Debug and checking that m_blockInsertionSet.execute() returns false.

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:90
&gt; +                //     res = num / dev;

dev -&gt; den

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:97
&gt; +                Value* one =
&gt; +                    m_insertionSet.insertIntConstant(m_index, m_value, 1);

Could be on a single line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141061</commentid>
    <comment_count>8</comment_count>
      <attachid>265255</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-10 21:26:11 -0800</bug_when>
    <thetext>Comment on attachment 265255
the patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:22
&gt;&gt; +
&gt; 
&gt; splitBefore() -&gt; splitForward()

Or maybe just split()? (The split is forward and backward, and it breaks what comes before from what comes after.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141062</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 21:26:51 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 265255 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265255&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt; +        This introduces an idiom that handles this. It&apos;s BlockInsertionSet::splitBefore(). The
&gt; &gt; +        idea is that it uses the current block before the split as the continuation after the
&gt; &gt; +        split. When you call splitBefore(), you pass it your loop index and your InsertionSet
&gt; &gt; +        (if applicable). It makes sure that it changes those auxiliary things in such a way that
&gt; &gt; +        you can keep looping.
&gt; &gt; +
&gt; 
&gt; splitBefore() -&gt; splitForward()
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:394
&gt; &gt; +    void x86ConvertToDoubleWord64(RegisterID rax, RegisterID rdx)
&gt; 
&gt; ConvertToQuadword?

Good point.

&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/X86Assembler.h:1295
&gt; &gt; +    void cdqq()
&gt; 
&gt; Looks like the official name for this is &quot;cqo&quot;
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:75
&gt; &gt; +void updatePredecessors(BasicBlock* root)
&gt; 
&gt; updatePredecessors -&gt; updatePredecessorsAfter(block)?
&gt; The name is a bit weird.

Sure.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Common.h:101
&gt; &gt; +    if (den == -1 &amp;&amp; num == -2147483647 - 1)
&gt; 
&gt; Why not use numeric_limits?

I guess I should!  This was old school paranoia about -2147483648 not being a valid constant.  Seems that numeric_limits does the right thing though.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Common.h:110
&gt; &gt; +    if (den == -1 &amp;&amp; num == -9223372036854775807ll - 1)
&gt; 
&gt; ditto, and some later.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:59
&gt; &gt; +        m_changed |= m_blockInsertionSet.execute();
&gt; 
&gt; Having this at the end means no Macro can use a Macro in its expansion.

That&apos;s true!  I think it would be bad form to have an expansion that requires more expansions.  Good discipline about this prevents us from having to worry about fixpointing this phase, or having the phase never converge.

&gt; 
&gt; I guess you could assert that by running the algorithm again in Debug and
&gt; checking that m_blockInsertionSet.execute() returns false.

We could.  The phase also returns a bool saying if it changed anything.  We could internally have the phase run itself twice.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:90
&gt; &gt; +                //     res = num / dev;
&gt; 
&gt; dev -&gt; den
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:97
&gt; &gt; +                Value* one =
&gt; &gt; +                    m_insertionSet.insertIntConstant(m_index, m_value, 1);
&gt; 
&gt; Could be on a single line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141063</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 21:27:58 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 265255 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265255&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; splitBefore() -&gt; splitForward()
&gt; 
&gt; Or maybe just split()? (The split is forward and backward, and it breaks
&gt; what comes before from what comes after.)

Well, if we wanted to split blocks when transforming in a backward algorithm, then we&apos;d want the newly created block to hold things *above* the valueIndex.

Hence why I call it &quot;splitForward()&quot;.  The &quot;Forward&quot; tells you that it&apos;s meant to be used in a transformation that walks forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141066</commentid>
    <comment_count>11</comment_count>
      <attachid>265269</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 21:53:02 -0800</bug_when>
    <thetext>Created attachment 265269
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141068</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 21:56:10 -0800</bug_when>
    <thetext>Attachment 265269 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:47:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:209:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:302:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2855:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141069</commentid>
    <comment_count>13</comment_count>
      <attachid>265270</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 22:06:44 -0800</bug_when>
    <thetext>Created attachment 265270
patch for landing

The right patch this time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141071</commentid>
    <comment_count>14</comment_count>
      <attachid>265271</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 22:33:02 -0800</bug_when>
    <thetext>Created attachment 265271
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141075</commentid>
    <comment_count>15</comment_count>
      <attachid>265271</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 23:21:23 -0800</bug_when>
    <thetext>Comment on attachment 265271
patch for landing

Clearing flags on attachment: 265271

Committed r192295: &lt;http://trac.webkit.org/changeset/192295&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141076</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 23:21:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265215</attachid>
            <date>2015-11-10 12:12:30 -0800</date>
            <delta_ts>2015-11-10 13:26:03 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37505</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTIyNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCwxMCBAQAogCQkwRjMzOEUxNDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtl
eS5jcHAgKi87IH07CiAJCTBGMzM4RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwOTFC
RjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5oICovOyB9OwogCQkwRjMzOEUxNjFCRjAyNzZD
MDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTBBMUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5SW5saW5lcy5oICovOyB9OworCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9j
a0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5j
cHAgKi87IH07CisJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9u
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMz
OEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkw
RjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4
OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87IH07CisJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICov
OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyB9
OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBGMTdDRjA3
N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwpAQCAtMjMzOSw2ICsyMzQz
LDEwIEBACiAJCTBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVLZXkuY3BwOyBwYXRoID0g
YjMvQjNWYWx1ZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4RTA5
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzVmFsdWVLZXkuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVLZXlJ
bmxpbmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlv
blNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9j
a0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2Vy
TWFjcm9zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJN
YWNyb3MuY3BwOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJNYWNyb3MuaDsgcGF0aCA9
IGIzL0IzTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIx
NDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1
QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Vz
ZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50
RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDMyLDYgKzQ0
NDAsOCBAQAogCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAq
LywKIAkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5o
ICovLAogCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5o
ICovLAorCQkJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcCAqLywKKwkJCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlv
blNldC5oICovLAogCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCAqLywKIAkJCQkwRjMzOERGNzFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmNw
cCAqLywKIAkJCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi8s
CkBAIC00NDczLDYgKzQ0ODMsOCBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M0luc2VydGlvblNldC5jcHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAwODBGRjc0IC8qIEIz
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5z
ZXJ0aW9uU2V0SW5saW5lcy5oICovLAorCQkJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4RiAvKiBC
M0xvd2VyTWFjcm9zLmNwcCAqLywKKwkJCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNM
b3dlck1hY3Jvcy5oICovLAogCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuY3BwICovLAogCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuaCAqLywKIAkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5j
cHAgKi8sCkBAIC02NjY2LDYgKzY2NzgsNyBAQAogCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTNBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzA0MTFC
RTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
MzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4g
SGVhZGVycyAqLywKQEAgLTY3NjUsNiArNjc3OCw3IEBACiAJCQkJQzIyMzlEMTkxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxOEQx
NDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAq
LywKKwkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3MjhFQzAw
MTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkIx
QkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApAQCAtODMxMCw2ICs4
MzI0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERl
YnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4RTFEMUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkQ0RERE
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04NDgyLDYgKzg0OTcsNyBAQAogCQkJCTBGRUEwQTFF
MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNDg1MzI3MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNv
dmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwOTE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4RTFCMUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwyNCBAQCB2b2lk
IEJhc2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCiAgICAgbV92YWx1ZXMuYXBwZW5kKHZh
bHVlKTsKIH0KIAordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdChQcm9jZWR1cmUmIHByb2Ms
IFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBwcm9jLmRlbGV0ZVZhbHVlKGxhc3QoKSk7CisgICAgbGFz
dCgpID0gdmFsdWU7Cit9CisKK1ZhbHVlKiBCYXNpY0Jsb2NrOjphcHBlbmRJbnRDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkK
K3sKKyAgICBWYWx1ZSogcmVzdWx0ID0gcHJvYy5hZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUs
IHZhbHVlKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitW
YWx1ZSogQmFzaWNCbG9jazo6YXBwZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogbGlrZVZhbHVlLCBpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBhcHBlbmRJbnRDb25z
dGFudChwcm9jLCBsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5cGUoKSwgdmFsdWUp
OworfQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
KQogewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTkyMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitj
bGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNsYXNzIFByb2Nl
ZHVyZTsKIGNsYXNzIFZhbHVlOwpAQCAtNjgsMTAgKzY5LDE3IEBAIHB1YmxpYzoKICAgICBWYWx1
ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVw
bGFjZUxhc3QoUHJvY2VkdXJlJiwgVmFsdWUqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3
KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CiAKKyAgICBWYWx1ZSogYXBwZW5kSW50Q29uc3Rh
bnQoUHJvY2VkdXJlJiwgT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSog
YXBwZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2
YWx1ZSk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiByZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJl
JiwgQXJndW1lbnRzLi4uKTsKKwogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsK
ICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CiAgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwpAQCAt
MTAwLDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0Owog
ICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTQgQEAg
VmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiBy
ZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICByZXBs
YWNlTGFzdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGlubGluZSB1bnNpZ25l
ZCBCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbGFzdCgp
LT5hczxDb250cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmxv
Y2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2Nr
SW5zZXJ0aW9uU2V0KFByb2NlZHVyZSAmcHJvYykKKyAgICA6IG1fcHJvYyhwcm9jKQoreworfQor
CitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKK3sKKyAg
ICBtX2luc2VydGlvbnMuYXBwZW5kKFdURjo6bW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNC
bG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZy
ZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJh
c2ljQmxvY2soVUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9
IGJsb2NrLmdldCgpOworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGOjptb3Zl
KGJsb2NrKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVl
bmN5KQoreworICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0g
ZnJlcXVlbmN5ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Cit9CisKK0Jhc2lj
QmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCisgICAgQmFzaWNCbG9jayog
YmxvY2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2VydGlvblNldCwg
ZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJ
bmRleCk7CisgICAgCisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gaW5zZXJ0QmVmb3JlKGJsb2Nr
LCBmcmVxdWVuY3kpOworICAgIHJlc3VsdC0+cmVzaXplKHZhbHVlSW5kZXggKyAxKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSB2YWx1ZUluZGV4OyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmFs
dWVzW2ldID0gYmxvY2stPm1fdmFsdWVzW2ldOworICAgIHJlc3VsdC0+bV92YWx1ZXNbdmFsdWVJ
bmRleF0gPQorICAgICAgICBtX3Byb2MuYWRkPENvbnRyb2xWYWx1ZT4oSnVtcCwgdmFsdWUtPm9y
aWdpbigpLCBGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKKworICAgIGlmIChpbnNlcnRpb25TZXQp
CisgICAgICAgIGluc2VydGlvblNldC0+ZXhlY3V0ZShyZXN1bHQpOworCisgICAgYmxvY2stPnJl
bW92ZSgwLCB2YWx1ZUluZGV4KTsKKworICAgIHZhbHVlSW5kZXggPSAwOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCit7CisgICAg
aWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRl
ci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgIC8vIHJ1bm5pbmcgV1RGOjpl
eGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdl
IHdhbnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisgICAg
YnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKKwor
ICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAg
ICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBu
ZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3Qg
ZnJvbSBncm93aW5nLgorICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKKyAg
ICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgIH0pOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQor
ICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
bG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQjNCbG9ja0luc2VydGlvblNldF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlIDx3dGYvSW5z
ZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgSW5zZXJ0aW5TZXQ7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRp
b248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKworY2xhc3Mg
QmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2Nl
ZHVyZSYpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIHZvaWQgaW5zZXJ0
KEJsb2NrSW5zZXJ0aW9uJiYpOworCisgICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2
ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
ZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0
aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQor
ICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBm
cmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKKyAgICAvLyB1c3VhbGx5IHdo
YXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJl
Zm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gQSBoZWxwZXIgdG8gc3Bs
aXQgYSBibG9jayB3aGVuIGZvcndhcmQgaXRlcmF0aW5nIG92ZXIgaXQuIEl0IGNyZWF0ZXMgYSBu
ZXcgYmxvY2sgdG8gaG9sZAorICAgIC8vIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBpbnN0cnVjdGlv
biBhdCB2YWx1ZUluZGV4LiBUaGUgY3VycmVudCBibG9jayBpcyBsZWZ0IHdpdGgKKyAgICAvLyBl
dmVyeXRoaW5nIGF0IGFuZCBhZnRlciB2YWx1ZUluZGV4LiBJZiB0aGUgb3B0aW9uYWwgSW5zZXJ0
aW9uU2V0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGdldAorICAgIC8vIGV4ZWN1dGVkIG9uIHRoZSBu
ZXdseSBjcmVhdGVkIGJsb2NrIC0gdGhpcyBtYWtlcyBzZW5zZSBpZiB5b3UgaGFkIHByZXZpb3Vz
bHkgaW5zZXJ0ZWQKKyAgICAvLyB0aGluZ3MgaW50byB0aGUgb3JpZ2luYWwgYmxvY2ssIHNpbmNl
IHRoZSBuZXdseSBjcmVhdGVkIGJsb2NrIHdpbGwgYmUgaW5kZXhlZCBpZGVudGljYWxseQorICAg
IC8vIHRvIGhvbGQgdGhpcyBibG9jayB3YXMgaW5kZXhlZCBmb3IgYWxsIHZhbHVlcyBwcmlvciB0
byB2YWx1ZUluZGV4LiBBZnRlciB0aGlzIHJ1bnMsIGl0CisgICAgLy8gc2V0cyB2YWx1ZUluZGV4
IHRvIHplcm8uIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBtZXRob2QgZm9yIHRoaW5ncyBs
aWtlOgorICAgIC8vCisgICAgLy8gZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgIC8vICAgICBWYWx1ZSog
dmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisgICAgLy8gICAgIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgPT0gRm9vKSB7CisgICAgLy8gICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9
CisgICAgLy8gICAgICAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5zcGxpdEZvcndhcmQoYmxv
Y2ssIHZhbHVlSW5kZXgsICZtX2luc2VydGlvblNldCk7CisgICAgLy8gICAgICAgICAuLi4gLy8g
Tm93IHlvdSBjYW4gYXBwZW5kIHRvIHByZWRlY2Vzc29yLCBpbnNlcnQgbmV3IGJsb2NrcyBiZWZv
cmUgJ2Jsb2NrJywgYW5kCisgICAgLy8gICAgICAgICAuLi4gLy8geW91IGNhbiB1c2UgbV9pbnNl
cnRpb25TZXQgdG8gaW5zZXJ0IG1vcmUgdGhpbmcgYmVmb3JlICd2YWx1ZScuCisgICAgLy8gICAg
IH0KKyAgICAvLyB9CisgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAorICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jaywgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxs
cHRyLAorICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgYm9vbCBl
eGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgVmVjdG9y
PEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2Vu
ZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQWly
R2VuZXJhdGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkIzTG93ZXJUb0Fp
ci5oIgogI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwKICAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOwogICAgIH0KIAorICAgIGxvd2VyTWFj
cm9zKHByb2NlZHVyZSk7CisKICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgIAog
ICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDE5MjI1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
ewogCitWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnRDb25zdGFudChzaXplX3QgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
aW5zZXJ0VmFsdWUoaW5kZXgsIG1fcHJvY2VkdXJlLmFkZEludENvbnN0YW50KG9yaWdpbiwgdHlw
ZSwgdmFsdWUpKTsKK30KKworVmFsdWUqIEluc2VydGlvblNldDo6aW5zZXJ0SW50Q29uc3RhbnQo
c2l6ZV90IGluZGV4LCBWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90IHZhbHVlKQoreworICAgIHJl
dHVybiBpbnNlcnRJbnRDb25zdGFudChpbmRleCwgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZh
bHVlLT50eXBlKCksIHZhbHVlKTsKK30KKwogdm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFz
aWNCbG9jayogYmxvY2spCiB7CiAgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwg
bV9pbnNlcnRpb25zLmVuZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
c2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
c2VydGlvblNldC5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CiAgICAgVmFsdWUqIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpOwogCisgICAgVmFsdWUqIGluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgT3JpZ2lu
LCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogaW5zZXJ0SW50Q29uc3RhbnQoc2l6
ZV90IGluZGV4LCBWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90IHZhbHVlKTsKKwogICAgIHZvaWQg
ZXhlY3V0ZShCYXNpY0Jsb2NrKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyTWFjcm9zLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZh
bHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExvd2VyTWFjcm9zIHsKK3B1Ymxp
YzoKKyAgICBMb3dlck1hY3JvcyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHBy
b2MpCisgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9jKQorICAgICAgICAsIG1faW5z
ZXJ0aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIG1f
YmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIHByb2Nlc3NDdXJyZW50QmxvY2soKTsKKyAgICAg
ICAgfQorICAgICAgICBtX2NoYW5nZWQgfD0gbV9ibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7
CisgICAgICAgIGlmIChtX2NoYW5nZWQpCisgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFi
aWxpdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHZvaWQgcHJvY2Vzc0N1cnJlbnRCbG9jaygpCisgICAgeworICAgICAgICBmb3IgKG1f
aW5kZXggPSAwOyBtX2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7CisgICAgICAg
ICAgICBtX3ZhbHVlID0gbV9ibG9jay0+YXQobV9pbmRleCk7CisgICAgICAgICAgICBzd2l0Y2gg
KG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIENoaWxsRGl2OiB7CisgICAg
ICAgICAgICAgICAgLy8gQVJNIHN1cHBvcnRzIHRoaXMgaW5zdHJ1Y3Rpb24gbmF0aXZlbHkuCisg
ICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
Ly8gV2UgaW1wbGVtZW50ICJyZXMgPSBDaGlsbERpdihudW0sIGRlbikiIGFzIGZvbGxvd3M6Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGRlbiArIDEgPD1f
dW5zaWduZWQgMSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgaWYgKCFkZW4pIHsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSAwOworICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIGlmIChudW0gPT0gLTIxNDc0ODM2NDgpIHsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSBudW07CisgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgIHJlcyA9IG51bSAv
IGRldjsKKyAgICAgICAgICAgICAgICAvLyBkb25lOgorCisgICAgICAgICAgICAgICAgVmFsdWUq
IG51bSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBkZW4gPSBt
X3ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIFZhbHVlKiBvbmUgPQorICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCB2
YWx1ZSwgMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGlzRGVuT0sgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBYm92ZSwgbV92
YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4obV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgZGVuLCBvbmUpLAorICAg
ICAgICAgICAgICAgICAgICBvbmUpOworCisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmVm
b3JlID0KKyAgICAgICAgICAgICAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5zcGxpdEZvcndh
cmQobV9ibG9jaywgbV9pbmRleCwgJm1faW5zZXJ0aW9uU2V0KTsKKworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIG5vcm1hbERpdkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJl
Zm9yZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzaGFkeURlbkNhc2Ug
PSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiB6ZXJvRGVuQ2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0
QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5lZzFEZW5DYXNl
ID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogaW50TWluQ2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0
QmVmb3JlKG1fYmxvY2spOworCisgICAgICAgICAgICAgICAgYmxvY2stPnJlcGxhY2VMYXN0V2l0
aE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEJyYW5jaCwg
bV92YWx1ZS0+b3JpZ2luKCksIGlzRGVuT0ssCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50
ZWRCbG9jayhub3JtYWxEaXZDYXNlLCBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKSwKKyAgICAgICAg
ICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHNoYWR5RGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6
OlJhcmUpKTsKKworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogbm9ybWFsUmVzdWx0ID0g
bm9ybWFsRGl2Q2FzZS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG5vcm1h
bERpdkNhc2UtPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBEaXYsIG1fdmFsdWUtPm9yaWdpbigp
LCBudW0sIGRlbikpOworICAgICAgICAgICAgICAgIG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEp1bXAsIG1fdmFsdWUt
Pm9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobV9ibG9jaykpOworCisgICAgICAgICAgICAgICAg
c2hhZHlEZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9yaWdpbigpLCBkZW4sCisgICAgICAgICAgICAg
ICAgICAgIEZyZXF1ZW50ZWRCbG9jayhuZWcxRGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1h
bCksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayh6ZXJvRGVuQ2FzZSwgRnJl
cXVuZWN5Q2xhc3M6OlJhcmUpKTsKKworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogemVy
b1Jlc3VsdCA9IHplcm9EZW5DYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgbV9wcm9jLCBtX3ZhbHVlLT5vcmlnaW4oKSwgemVyb0RlbkNhc2UtPmFwcGVu
ZEludENvbnN0YW50KG1fcHJvYywgdmFsdWUsIDApKTsKKyAgICAgICAgICAgICAgICB6ZXJvRGVu
Q2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJv
YywgSnVtcCwgbV92YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IGJhZE51bWVyYXRvckNvbnN0OworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQz
MjoKKyAgICAgICAgICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSAtMjE0NzQ4MzY0NyAt
IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICAgICAgICAgIGJhZE51bWVyYXRvckNvbnN0ID0gLTkyMjMzNzIwMzY4
NTQ3NzU4MDdsbCAtIDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICBiYWROdW1lcmF0b3JDb25zdCA9IDA7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgVmFsdWUqIGJhZE51bWVyYXRvciA9CisgICAgICAgICAg
ICAgICAgICAgIG5lZzFEZW5DYXNlLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIHZhbHVlLCBi
YWROdW1lcmF0b3JDb25zdCk7CisKKyAgICAgICAgICAgICAgICBuZWcxRGVuQ2FzZS0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgQnJhbmNoLCBt
X3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEVxdWFsLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbnVtLCBiYWROdW1lcmF0b3IpLAorICAgICAgICAgICAgICAgICAgICBG
cmVxdWVudGVkQmxvY2soaW50TWluQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpLAorICAgICAg
ICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobm9ybWFsRGl2Q2FzZSwgRnJlcXVlbmN5Q2xh
c3M6Ok5vcm1hbCkpOworCisgICAgICAgICAgICAgICAgVXBzaWxvblZhbHVlKiBpbnRNaW5SZXN1
bHQgPSBpbnRNaW5DYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgbV9wcm9jLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYmFkTnVtZXJhdG9yKTsKKyAgICAgICAg
ICAgICAgICBpbnRNaW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLCBKdW1wLCBtX3ZhbHVlLT5vcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2Nr
KG1fYmxvY2spKTsKKworICAgICAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBQaGksIG1fdmFs
dWUtPnR5cGUoKSwgbV92YWx1ZS0+b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIG5vcm1hbFJl
c3VsdC0+c2V0UGhpKHBoaSk7CisgICAgICAgICAgICAgICAgemVyb1Jlc3VsdC0+c2V0UGhpKHBo
aSk7CisgICAgICAgICAgICAgICAgaW50TWluUmVzdWx0LT5zZXRQaGkocGhpKTsKKworICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocGhpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBTd2l0Y2guCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUxMTE1CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9pbnNlcnRpb25T
ZXQuZXhlY3V0ZShtX2Jsb2NrKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7
CisgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKyAgICBJbnNlcnRp
b25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB1bnNp
Z25lZCBtX2luZGV4OworICAgIFZhbHVlKiBtX3ZhbHVlOworICAgIGJvb2wgbV9jaGFuZ2VkIHsg
ZmFsc2UgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIGxvd2VyTWFj
cm9zKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywg
Imxvd2VyTWFjcm9zIik7CisgICAgTG93ZXJNYWNyb3MgbG93ZXJNYWNyb3MocHJvYyk7CisgICAg
cmV0dXJuIGxvd2VyTWFjcm9zLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyTWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyTWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93
ZXJNYWNyb3NfaAorI2RlZmluZSBCM0xvd2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisK
Ky8vIExvd2VycyBoaWdoLWxldmVsIG9wZXJhdGlvbnMgdGhhdCBpdCdzIGVhc2llciB0byBkZWFs
IHdpdGggb25jZSB0aGV5IGFyZSBicm9rZW4gdXAuIEN1cnJlbnRseQorLy8gdGhpcyBpbmNsdWRl
cyBTd2l0Y2ggYW5kIENoaWxsRGl2LgorCitib29sIGxvd2VyTWFjcm9zKFByb2NlZHVyZSYpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM0xvd2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCwxMiBA
QCBWYWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChUeXBlIHR5CiAgICAgfQogfQogCi1W
YWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUpCitWYWx1
ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90IHZh
bHVlKQoreworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChsaWtlVmFsdWUtPm9yaWdpbigpLCBs
aWtlVmFsdWUtPnR5cGUoKSwgdmFsdWUpOworfQorCitWYWx1ZSogUHJvY2VkdXJlOjphZGRCb29s
Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHJpU3RhdGUgdHJpU3RhdGUpCiB7CiAgICAgaW50MzJf
dCB2YWx1ZSA9IDA7CiAgICAgc3dpdGNoICh0cmlTdGF0ZSkgewpAQCAtODQsNyArODksNyBAQCBW
YWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBhZGRJbnRDb25zdGFudChJbnQzMiwgdmFsdWUp
OworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChvcmlnaW4sIEludDMyLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7Citj
bGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIE9wYXF1ZUJ5cHJvZHVjdHM7CiBjbGFzcyBW
YWx1ZTsKIApAQCAtNTYsMTAgKzU3LDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChB
cmd1bWVudHMuLi4pOwogCi0gICAgVmFsdWUqIGFkZEludENvbnN0YW50KFR5cGUsIGludDY0X3Qg
dmFsdWUpOworICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0X3Qg
dmFsdWUpOworICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUp
OwogCiAgICAgLy8gUmV0dXJucyBudWxsIGZvciBNaXhlZFRyaVN0YXRlLgotICAgIFZhbHVlKiBh
ZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUpOworICAgIFZhbHVlKiBhZGRCb29sQ29uc3RhbnQoT3Jp
Z2luLCBUcmlTdGF0ZSk7CiAKICAgICB2b2lkIHJlc2V0VmFsdWVPd25lcnMoKTsKICAgICB2b2lk
IHJlc2V0UmVhY2hhYmlsaXR5KCk7CkBAIC0yMTYsNiArMjE4LDggQEAgcHVibGljOgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiB0YWtlQnlwcm9kdWN0cygpIHsgcmV0dXJu
IFdURjo6bW92ZShtX2J5cHJvZHVjdHMpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IEJsb2NrSW5zZXJ0aW9uU2V0OworICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBh
ZGRWYWx1ZUluZGV4KCk7CiAgICAgCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Js
b2NrPj4gbV9ibG9ja3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2
YWx1ZVgpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQuCiAgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3Zh
bHVlLT50eXBlKCksIDApKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1f
cHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKQEAgLTQ0Niw3ICs0NDYsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogY29uc3QxID09IGNvbnN0MgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAg
IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9y
aWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+ZXF1YWxDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgTm90RXF1YWw6CkBAIC00NzMsNyArNDc1LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoY29uc3QxLCBjb25zdDIpCiAgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSAhPSBjb25zdDIKICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCht
X3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsK
KyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCktPm5vdEVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIExlc3NUaGFuOgpAQCAtNDgxLDQyICs0ODUsNTggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTA5NTgKIAogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAg
ICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5sZXNz
VGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJv
Yy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigp
LAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc1RoYW5Db25zdGFu
dChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgR3JlYXRlclRoYW46CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0
ZXJUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9w
cm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyVGhhbkNv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBMZXNzRXF1YWw6CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmxl
c3NFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1f
cHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdp
bigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc0VxdWFsQ29u
c3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIEdyZWF0ZXJFcXVhbDoKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0g
ICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+
Z3JlYXRlckVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVy
RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQWJvdmU6CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAot
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCkt
PmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9w
cm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5hYm92ZUNvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBCZWxvdzoKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YmVsb3dDb25zdGFu
dChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENv
bnN0YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93Q29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFib3ZlRXF1YWw6
CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJv
Yy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmFib3ZlRXF1YWxDb25zdGFudCht
X3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmFib3ZlRXF1YWxDb25zdGFudChtX3ZhbHVlLT5j
aGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQmVsb3dFcXVh
bDoKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9w
cm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YmVsb3dFcXVhbENvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+YmVsb3dFcXVhbENvbnN0YW50KG1fdmFsdWUt
PmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCcmFuY2g6
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsOCArODAsMTAgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAg
ICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgewotICAgICAgICAgICAgZm9yIChW
YWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIGZvciAoVmFsdWUq
IGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICBWQUxJREFURShj
aGlsZCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUlu
UHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChj
aGlsZCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEhhc2hNYXA8QmFz
aWNCbG9jayosIEhhc2hTZXQ8QmFzaWNCbG9jayo+PiBhbGxQcmVkZWNlc3NvcnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCShy
ZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAg
IHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPik7CiAgICAg
QmFzaWNCbG9jayogaW5zZXJ0KHNpemVfdCBpbmRleCwgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwog
ICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUsIGZsb2F0IGV4
ZWN1dGlvbkNvdW50KTsKLSAgICAKKwogICAgIGJvb2wgZXhlY3V0ZSgpOwogCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265223</attachid>
            <date>2015-11-10 13:26:03 -0800</date>
            <delta_ts>2015-11-10 16:54:05 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86335</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTIyNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCwxMCBAQAogCQkwRjMzOEUxNDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtl
eS5jcHAgKi87IH07CiAJCTBGMzM4RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwOTFC
RjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5oICovOyB9OwogCQkwRjMzOEUxNjFCRjAyNzZD
MDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTBBMUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5SW5saW5lcy5oICovOyB9OworCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9j
a0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5j
cHAgKi87IH07CisJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9u
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMz
OEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oICovOyB9OworCQkw
RjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4
OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87IH07CisJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICov
OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyB9
OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBGMTdDRjA3
N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwpAQCAtMjMzOSw2ICsyMzQz
LDEwIEBACiAJCTBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVLZXkuY3BwOyBwYXRoID0g
YjMvQjNWYWx1ZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4RTA5
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzVmFsdWVLZXkuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVLZXlJ
bmxpbmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlv
blNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9j
a0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2Vy
TWFjcm9zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJN
YWNyb3MuY3BwOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJNYWNyb3MuaDsgcGF0aCA9
IGIzL0IzTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIx
NDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1
QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Vz
ZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50
RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDMyLDYgKzQ0
NDAsOCBAQAogCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAq
LywKIAkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5o
ICovLAogCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5o
ICovLAorCQkJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcCAqLywKKwkJCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlv
blNldC5oICovLAogCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCAqLywKIAkJCQkwRjMzOERGNzFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmNw
cCAqLywKIAkJCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi8s
CkBAIC00NDczLDYgKzQ0ODMsOCBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M0luc2VydGlvblNldC5jcHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAwODBGRjc0IC8qIEIz
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5z
ZXJ0aW9uU2V0SW5saW5lcy5oICovLAorCQkJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4RiAvKiBC
M0xvd2VyTWFjcm9zLmNwcCAqLywKKwkJCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNM
b3dlck1hY3Jvcy5oICovLAogCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuY3BwICovLAogCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuaCAqLywKIAkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5j
cHAgKi8sCkBAIC02NjY2LDYgKzY2NzgsNyBAQAogCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTNBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzA0MTFC
RTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
MzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4g
SGVhZGVycyAqLywKQEAgLTY3NjUsNiArNjc3OCw3IEBACiAJCQkJQzIyMzlEMTkxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxOEQx
NDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAq
LywKKwkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3MjhFQzAw
MTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkIx
QkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApAQCAtODMxMCw2ICs4
MzI0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERl
YnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4RTFEMUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkQ0RERE
MTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04NDgyLDYgKzg0OTcsNyBAQAogCQkJCTBGRUEwQTFF
MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNDg1MzI3MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNv
dmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwOTE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4RTFCMUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTky
MjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDMwIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hc3NlbWJsZXIuaW11bGxfaTMycihzcmMsIGltbS5tX3ZhbHVlLCBkZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJs
ZVdvcmQzMihSZWdpc3RlcklEIGVheCwgUmVnaXN0ZXJJRCBlZHgpCisgICAgeworICAgICAgICBB
U1NFUlRfVU5VU0VEKGVheCwgZWF4ID09IFg4NlJlZ2lzdGVyOjplYXgpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGVkeCwgZWR4ID09IFg4NlJlZ2lzdGVyOjplYXgpOworICAgICAgICB4ODZDb252
ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkRpdjMyKFJlZ2lzdGVy
SUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pZGl2bF9yKGRlbm9t
aW5hdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkRpdjMyKFJlZ2lzdGVySUQgZWF4LCBSZWdp
c3RlcklEIGVkeCwgUmVnaXN0ZXJJRCBkZW5vbWluYXRvcikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoZWF4LCBlYXggPT0gWDg2UmVnaXN0ZXI6OmVheCk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQoZWR4LCBlZHggPT0gWDg2UmVnaXN0ZXI6OmVheCk7CisgICAgICAgIHg4NkRpMzIoZGVu
b21pbmF0b3IpOworICAgIH0KKwogICAgIHZvaWQgbmVnMzIoUmVnaXN0ZXJJRCBzcmNEZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubmVnbF9yKHNyY0Rlc3QpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNiArMzg2LDMw
IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuaW11bHFfcnIoc3JjLCBkZXN0KTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuY2RxcSgpOworICAgIH0KKworICAgIHZvaWQgeDg2Q29udmVydFRv
RG91YmxlV29yZDY0KFJlZ2lzdGVySUQgcmF4LCBSZWdpc3RlcklEIHJkeCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQocmF4LCByYXggPT0gWDg2UmVnaXN0ZXI6OmVheCk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXI6OmVheCk7CisgICAgICAgIHg4
NkNvbnZlcnRUb0RvdWJsZVdvcmQ2NCgpOworICAgIH0KKworICAgIHZvaWQgeDg2RGl2NjQoUmVn
aXN0ZXJJRCBkZW5vbWluYXRvcikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZxX3Io
ZGVub21pbmF0b3IpOworICAgIH0KKworICAgIHZvaWQgeDg2RGl2NjQoUmVnaXN0ZXJJRCByYXgs
IFJlZ2lzdGVySUQgcmR4LCBSZWdpc3RlcklEIGRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyYXgsIHJheCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXJzOjplZHgpOworICAgICAgICB4ODZE
aXY2NChkZW5vbWluYXRvcik7CisgICAgfQorCiAgICAgdm9pZCBuZWc2NChSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5uZWdxX3IoZGVzdCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2Miw2ICs5NjIsMTEgQEAgcHVibGljOgogICAgICAgICBt
X2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfR1JPVVAzX0V2LCBHUk9VUDNfT1BfSURJViwgZHN0KTsK
ICAgICB9CiAKKyAgICB2b2lkIGlkaXZxX3IoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9JRElWLCBk
c3QpOworICAgIH0KKwogICAgIC8vIENvbXBhcmlzb25zOgogCiAgICAgdm9pZCBjbXBsX3JyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKQEAgLTEyODQsNiArMTI4OSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9DRFEpOwogICAgIH0KIAorICAg
IHZvaWQgY2RxcSgpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9D
RFEpOworICAgIH0KKwogICAgIHZvaWQgZnN0cHMoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0VTQ0FQRV9EOSwgRVND
QVBFX0Q5X0ZTVFBfc2luZ2xlUmVhbCwgYmFzZSwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNiArNTIsMjQgQEAgdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQogICAg
IG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZUxh
c3QoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogdmFsdWUpCit7CisgICAgcHJvYy5kZWxldGVWYWx1
ZShsYXN0KCkpOworICAgIGxhc3QoKSA9IHZhbHVlOworfQorCitWYWx1ZSogQmFzaWNCbG9jazo6
YXBwZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBUeXBlIHR5
cGUsIGludDY0X3QgdmFsdWUpCit7CisgICAgVmFsdWUqIHJlc3VsdCA9IHByb2MuYWRkSW50Q29u
c3RhbnQob3JpZ2luLCB0eXBlLCB2YWx1ZSk7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworVmFsdWUqIEJhc2ljQmxvY2s6OmFwcGVuZEludENvbnN0YW50KFBy
b2NlZHVyZSYgcHJvYywgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gYXBwZW5kSW50Q29uc3RhbnQocHJvYywgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZh
bHVlLT50eXBlKCksIHZhbHVlKTsKK30KKwogYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRo
aXMsIGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDE0IEBACiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAogI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4u
aCIKICNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJCM1R5cGUu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgewogCitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNs
YXNzIFByb2NlZHVyZTsKIGNsYXNzIFZhbHVlOwpAQCAtNjgsMTAgKzcxLDE3IEBAIHB1YmxpYzoK
ICAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVwbGFjZUxhc3QoUHJvY2VkdXJlJiwgVmFsdWUqKTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CiAKKyAgICBWYWx1ZSogYXBwZW5k
SW50Q29uc3RhbnQoUHJvY2VkdXJlJiwgT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAg
ICBWYWx1ZSogYXBwZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIGxpa2VWYWx1ZSwg
aW50NjRfdCB2YWx1ZSk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiByZXBsYWNlTGFzdFdpdGhOZXco
UHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKwogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
KSBjb25zdDsKICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CiAgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5k
ZXgpOwpAQCAtMTAwLDYgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZXBEdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0
aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsMTQgQEAgVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdFdpdGhOZXco
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFs
dWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsK
KyAgICByZXBsYWNlTGFzdChwcm9jZWR1cmUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAog
ewogICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0
Zi9CdWJibGVTb3J0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitCbG9j
a0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoUHJvY2VkdXJlICZwcm9jKQorICAgIDog
bV9wcm9jKHByb2MpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25T
ZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KEJsb2NrSW5zZXJ0aW9u
JiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoV1RGOjptb3ZlKGluc2Vy
dGlvbikpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNp
Y0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgZnJlcXVlbmN5KSk7CisgICAg
QmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0
aW9uKGluZGV4LCBXVEY6Om1vdmUoYmxvY2spKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
QmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBi
ZWZvcmUsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgcmV0dXJuIGluc2VydChiZWZvcmUtPmlu
ZGV4KCksIGZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kgPyBmcmVxdWVuY3kgOiBiZWZvcmUtPmZyZXF1
ZW5jeSgpKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0Rm9yd2Fy
ZCgKKyAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlv
blNldCogaW5zZXJ0aW9uU2V0LCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIFZhbHVlKiB2YWx1
ZSA9IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQg
PSBpbnNlcnRCZWZvcmUoYmxvY2ssIGZyZXF1ZW5jeSk7CisgICAgcmVzdWx0LT5tX3ZhbHVlcy5y
ZXNpemUodmFsdWVJbmRleCArIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlSW5kZXg7
IGktLTspCisgICAgICAgIHJlc3VsdC0+bV92YWx1ZXNbaV0gPSBibG9jay0+bV92YWx1ZXNbaV07
CisgICAgcmVzdWx0LT5tX3ZhbHVlc1t2YWx1ZUluZGV4XSA9CisgICAgICAgIG1fcHJvYy5hZGQ8
Q29udHJvbFZhbHVlPihKdW1wLCB2YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhibG9j
aykpOworCisgICAgaWYgKGluc2VydGlvblNldCkKKyAgICAgICAgaW5zZXJ0aW9uU2V0LT5leGVj
dXRlKHJlc3VsdCk7CisKKyAgICBibG9jay0+bV92YWx1ZXMucmVtb3ZlKDAsIHZhbHVlSW5kZXgp
OworCisgICAgdmFsdWVJbmRleCA9IDA7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGlu
c2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBz
b3J0IHRoZW0gYmVmb3JlCisgICAgLy8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBX
ZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQorICAg
IC8vIGZhc3QsIHNvIHdlIHVzZSBidWJibGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1faW5zZXJ0
aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlv
bnMobV9wcm9jLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91
dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncwor
ICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAg
bV9wcm9jLm1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuICFibG9ja1B0cjsKKyAgICAgICAgfSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3Byb2MubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5tX2Js
b2Nrc1tpXS0+bV9pbmRleCA9IGk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCbG9ja0luc2VydGlvblNldF9oCisj
ZGVmaW5lIEIzQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9w
dHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNl
dCB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoUHJvY2VkdXJlJik7CisgICAgfkJs
b2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24m
Jik7CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBC
YXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFO
KTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4g
VXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQu
IFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUg
J2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJl
cXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBBIGhlbHBlciB0byBzcGxpdCBhIGJsb2NrIHdoZW4g
Zm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBpdC4gSXQgY3JlYXRlcyBhIG5ldyBibG9jayB0byBob2xk
CisgICAgLy8gZXZlcnl0aGluZyBiZWZvcmUgdGhlIGluc3RydWN0aW9uIGF0IHZhbHVlSW5kZXgu
IFRoZSBjdXJyZW50IGJsb2NrIGlzIGxlZnQgd2l0aAorICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5k
IGFmdGVyIHZhbHVlSW5kZXguIElmIHRoZSBvcHRpb25hbCBJbnNlcnRpb25TZXQgaXMgcHJvdmlk
ZWQsIGl0IHdpbGwgZ2V0CisgICAgLy8gZXhlY3V0ZWQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYmxv
Y2sgLSB0aGlzIG1ha2VzIHNlbnNlIGlmIHlvdSBoYWQgcHJldmlvdXNseSBpbnNlcnRlZAorICAg
IC8vIHRoaW5ncyBpbnRvIHRoZSBvcmlnaW5hbCBibG9jaywgc2luY2UgdGhlIG5ld2x5IGNyZWF0
ZWQgYmxvY2sgd2lsbCBiZSBpbmRleGVkIGlkZW50aWNhbGx5CisgICAgLy8gdG8gaG9sZCB0aGlz
IGJsb2NrIHdhcyBpbmRleGVkIGZvciBhbGwgdmFsdWVzIHByaW9yIHRvIHZhbHVlSW5kZXguIEFm
dGVyIHRoaXMgcnVucywgaXQKKyAgICAvLyBzZXRzIHZhbHVlSW5kZXggdG8gemVyby4gVGhpcyBh
bGxvd3MgeW91IHRvIHVzZSB0aGlzIG1ldGhvZCBmb3IgdGhpbmdzIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKyt2YWx1ZUluZGV4KSB7CisgICAgLy8gICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5h
dCh2YWx1ZUluZGV4KTsKKyAgICAvLyAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBGb28pIHsK
KyAgICAvLyAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0KKyAgICAvLyAgICAgICAg
ICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9yd2FyZChibG9jaywgdmFsdWVJbmRleCwg
Jm1faW5zZXJ0aW9uU2V0KTsKKyAgICAvLyAgICAgICAgIC4uLiAvLyBOb3cgeW91IGNhbiBhcHBl
bmQgdG8gcHJlZGVjZXNzb3IsIGluc2VydCBuZXcgYmxvY2tzIGJlZm9yZSAnYmxvY2snLCBhbmQK
KyAgICAvLyAgICAgICAgIC4uLiAvLyB5b3UgY2FuIHVzZSBtX2luc2VydGlvblNldCB0byBpbnNl
cnQgbW9yZSB0aGluZyBiZWZvcmUgJ3ZhbHVlJy4KKyAgICAvLyAgICAgfQorICAgIC8vIH0KKyAg
ICBCYXNpY0Jsb2NrKiBzcGxpdEZvcndhcmQoCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1
bnNpZ25lZCYgdmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCisgICAgICAgIGRv
dWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJp
dmF0ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24s
IDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmxvY2tJbnNlcnRpb25TZXRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMTkyMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDYgKzk0LDI0IEBAIGlubGluZSBib29sIGlzUmVwcmVzZW50YWJsZUFzKGRvdWJsZSB2YWwK
ICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXNJbXBsPFJlc3VsdFR5cGUsIGRvdWJsZSwgaW50
NjRfdD4odmFsdWUpOwogfQogCitpbmxpbmUgaW50MzJfdCBjaGlsbERpdihpbnQzMl90IG51bSwg
aW50MzJfdCBkZW4pCit7CisgICAgaWYgKCFkZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChkZW4gPT0gLTEgJiYgbnVtID09IC0yMTQ3NDgzNjQ3IC0gMSkKKyAgICAgICAgcmV0dXJuIG51
bTsKKyAgICByZXR1cm4gbnVtIC8gZGVuOworfQorCitpbmxpbmUgaW50NjRfdCBjaGlsbERpdihp
bnQ2NF90IG51bSwgaW50NjRfdCBkZW4pCit7CisgICAgaWYgKCFkZW4pCisgICAgICAgIHJldHVy
biAwOworICAgIGlmIChkZW4gPT0gLTEgJiYgbnVtID09IC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwg
LSAxKQorICAgICAgICByZXR1cm4gbnVtOworICAgIHJldHVybiBudW0gLyBkZW47Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24g
MTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsMTI2ICs0NywxMzMgQEAgVmFsdWUqIENvbnN0MzJWYWx1ZTo6
YWRkQ29uc3RhbnQoUHJvY2VkdQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9y
aWdpbigpLCBtX3ZhbHVlICsgb3RoZXIpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3Zh
bHVlICsgb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnN1YkNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0
MzJWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFs
dWUgLSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0QW5k
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29u
c3QzMlZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgY2hp
bGxEaXYobV92YWx1ZSwgb3RoZXItPmFzSW50MzIoKSkpOworfQorCitWYWx1ZSogQ29uc3QzMlZh
bHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSAmIG90aGVyLT5hc0ludDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRPckNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0
MzJWYWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSB8IG90aGVyLT5hc0ludDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRY
b3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBD
b25zdDMyVmFsdWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigp
LCBtX3ZhbHVlIF4gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6
OnNobENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUq
IENvbnN0MzJWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgPDwgKG90aGVyLT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3Qz
MlZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0
CitWYWx1ZSogQ29uc3QzMlZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4o
b3JpZ2luKCksIG1fdmFsdWUgPj4gKG90aGVyLT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1
ZSogQ29uc3QzMlZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDMxKSkpOwogfQogCi1UcmlTdGF0
ZSBDb25zdDMyVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3Rh
dGUgQ29uc3QzMlZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QK
IHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAg
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0g
b3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bGVzc1RoYW5D
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NU
aGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIt
Pmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0
cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0
ZSBDb25zdDMyVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50MzIo
KSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPD0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZh
bHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAK
LVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bV92YWx1ZSkgPiBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQog
Ci1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG1fdmFsdWUpIDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0K
IAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obV92YWx1ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0lu
dDMyKCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwyNSArNDIsMjYgQEAgcHVibGljOgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVy
ZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBp
bnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1
ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1
cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSog
elNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dF
cXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50
KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1No
ckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQo
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhh
bkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFi
b3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAg
IFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0
YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywxMjYgKzQ3LDEzMyBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2lu
KCksIG1fdmFsdWUgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihvdGhlcikpOwogfQogCi1WYWx1ZSog
Q29uc3Q2NFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikg
Y29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFs
dWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBD
b25zdDY0VmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBj
b25zdAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1
ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENv
bnN0NjRWYWx1ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIp
IGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZh
bHVlPihvcmlnaW4oKSwgY2hpbGxEaXYobV92YWx1ZSwgb3RoZXItPmFzSW50NjQoKSkpOworfQor
CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVl
PihvcmlnaW4oKSwgbV92YWx1ZSAmIG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29u
c3Q2NFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBj
b25zdAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZh
bHVlPihvcmlnaW4oKSwgbV92YWx1ZSB8IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSog
Q29uc3Q2NFZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhl
cikgY29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25z
dDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIF4gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZh
bHVlKiBDb25zdDY0VmFsdWU6OnNobENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90
aGVyKSBjb25zdAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPDwgKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwog
fQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBW
YWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJv
Y2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhl
ci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2Mu
YWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPj4gKG90aGVyLT5hc0ludDMyKCkg
JiA2MykpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29u
c3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAg
aWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0
dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYz
KSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAg
ICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBv
dGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bm90RXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRy
aVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0
NjRWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBD
b25zdDY0VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAog
ewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0
YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzSW50NjQoKSk7CiB9
CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAg
ICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVl
ID4gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc0Vx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjps
ZXNzRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0
dXJuIHRyaVN0YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRl
IENvbnN0NjRWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAor
VHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPj0gb3RoZXIt
PmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJvdmVDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlQ29uc3RhbnQo
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkp
CiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0
aWNfY2FzdDx1aW50NjRfdD4obV92YWx1ZSkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3RoZXIt
PmFzSW50NjQoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93Q29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0YW50
KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgp
KQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpIDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVy
LT5hc0ludDY0KCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVx
dWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIt
Pmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0
cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92YWx1ZSkgPj0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpi
ZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZh
bHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAg
IGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwyNSArNDIsMjYgQEAgcHVibGljOgogCiAgICAgVmFsdWUqIG5l
Z0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25z
dGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1
ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
LSAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRYb3JDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBz
aGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc0VxdWFs
Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVh
dGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0
YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlT
dGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJp
U3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGRpdkNvbnN0YW50
KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSog
c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBWYWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxD
b25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRl
IG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFs
Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0
ZSBhYm92ZUNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgYmVsb3dDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OworICAgIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0
YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlz
aW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw1NiArNDcsNjMgQEAgVmFsdWUqIENvbnN0RG91
YmxlVmFsdWU6OmFkZENvbnN0YW50KFBybwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJs
ZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIHN0YXRpY19jYXN0PGRvdWJsZT4ob3RoZXIpKTsK
IH0KIAotVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+
YXNEb3VibGUoKSk7CiB9CiAKLVZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZh
bHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3Zh
bHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
OjplcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZh
bHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3Zh
bHVlIC8gb3RoZXItPmFzRG91YmxlKCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
OjplcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0
dXJuIHRyaVN0YXRlKG1fdmFsdWUgPT0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0
ZSBDb25zdERvdWJsZVZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QK
K1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhl
ci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Omxlc3NUaGFu
Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6
bGVzc1RoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlci0+aGFzRG91YmxlKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJl
dHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0
ZSBDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3QKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAg
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+
IG90aGVyLT5hc0RvdWJsZSgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVz
c0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVW
YWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAg
IGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsK
ICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAK
LVRyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0
YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3Vi
bGUoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTIyNTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDE1ICs0MiwxNiBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogbmVnQ29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYWRkQ29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jLCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBW
YWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhh
bkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVz
c0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0
ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAg
IFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogZGl2Q29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwg
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNp
bmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93ZXJNYWNyb3MuaCIKICNpbmNsdWRl
ICJCM0xvd2VyVG9BaXIuaCIKICNpbmNsdWRlICJCM01vdmVDb25zdGFudHMuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKICAgICB9CiAK
KyAgICBsb3dlck1hY3Jvcyhwcm9jZWR1cmUpOworCiAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2Vk
dXJlKTsKICAgICAKICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCShyZXZp
c2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMjIgQEAKICNpZiBFTkFCTEUoQjNfSklU
KQogCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQnViYmxl
U29ydC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAorVmFsdWUqIEluc2Vy
dGlvblNldDo6aW5zZXJ0SW50Q29uc3RhbnQoc2l6ZV90IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBU
eXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGluc2VydFZhbHVlKGluZGV4
LCBtX3Byb2NlZHVyZS5hZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUsIHZhbHVlKSk7Cit9CisK
K1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgVmFs
dWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0SW50Q29u
c3RhbnQoaW5kZXgsIGxpa2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlwZSgpLCB2YWx1
ZSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQog
ewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkocmV2
aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShCM19KSVQp
CiAKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUg
PHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTYyLDYgKzY0
LDkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgogICAgIFZhbHVlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKTsKIAorICAgIFZhbHVlKiBpbnNlcnRJbnRDb25zdGFudChzaXplX3QgaW5k
ZXgsIE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CisgICAgVmFsdWUqIGluc2VydEludENv
bnN0YW50KHNpemVfdCBpbmRleCwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSk7CisK
ICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIK
KyNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM1Bo
YXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJC
M1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlck1hY3Jv
cyB7CitwdWJsaWM6CisgICAgTG93ZXJNYWNyb3MoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6
IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJvYykKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAg
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2Nr
KCk7CisgICAgICAgIH0KKyAgICAgICAgbV9jaGFuZ2VkIHw9IG1fYmxvY2tJbnNlcnRpb25TZXQu
ZXhlY3V0ZSgpOworICAgICAgICBpZiAobV9jaGFuZ2VkKQorICAgICAgICAgICAgbV9wcm9jLnJl
c2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3NDdXJyZW50QmxvY2soKQorICAgIHsKKyAgICAg
ICAgZm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4
KSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gbV9ibG9jay0+YXQobV9pbmRleCk7CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIENoaWxs
RGl2OiB7CisgICAgICAgICAgICAgICAgLy8gQVJNIHN1cHBvcnRzIHRoaXMgaW5zdHJ1Y3Rpb24g
bmF0aXZlbHkuCisgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgLy8gV2UgaW1wbGVtZW50ICJyZXMgPSBDaGlsbERpdihudW0sIGRlbikiIGFz
IGZvbGxvd3M6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgaWYg
KGRlbiArIDEgPD1fdW5zaWduZWQgMSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgaWYg
KCFkZW4pIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSAwOworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIGlmIChudW0gPT0gLTIxNDc0ODM2
NDgpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSBudW07CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAg
IHJlcyA9IG51bSAvIGRldjsKKyAgICAgICAgICAgICAgICAvLyBkb25lOgorCisgICAgICAgICAg
ICAgICAgVmFsdWUqIG51bSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZh
bHVlKiBkZW4gPSBtX3ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIFZhbHVlKiBv
bmUgPQorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFu
dChtX2luZGV4LCBtX3ZhbHVlLCAxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogaXNEZW5PSyA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXgsIEFib3ZlLCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBk
ZW4sIG9uZSksCisgICAgICAgICAgICAgICAgICAgIG9uZSk7CisKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBiZWZvcmUgPQorICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9u
U2V0LnNwbGl0Rm9yd2FyZChtX2Jsb2NrLCBtX2luZGV4LCAmbV9pbnNlcnRpb25TZXQpOworCisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbm9ybWFsRGl2Q2FzZSA9IG1fYmxvY2tJbnNlcnRp
b25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHNoYWR5RGVuQ2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2sp
OworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0gbV9ibG9ja0luc2Vy
dGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogbmVnMURlbkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2Nr
KTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBpbnRNaW5DYXNlID0gbV9ibG9ja0luc2Vy
dGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CisKKyAgICAgICAgICAgICAgICBiZWZvcmUt
PnJlcGxhY2VMYXN0V2l0aE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBt
X3Byb2MsIEJyYW5jaCwgbV92YWx1ZS0+b3JpZ2luKCksIGlzRGVuT0ssCisgICAgICAgICAgICAg
ICAgICAgIEZyZXF1ZW50ZWRCbG9jayhub3JtYWxEaXZDYXNlLCBGcmVxdWVuY3lDbGFzczo6Tm9y
bWFsKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHNoYWR5RGVuQ2FzZSwg
RnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSog
bm9ybWFsUmVzdWx0ID0gbm9ybWFsRGl2Q2FzZS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgICAgIG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBEaXYsIG1f
dmFsdWUtPm9yaWdpbigpLCBudW0sIGRlbikpOworICAgICAgICAgICAgICAgIG5vcm1hbERpdkNh
c2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2Ms
IEp1bXAsIG1fdmFsdWUtPm9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobV9ibG9jaykpOworCisg
ICAgICAgICAgICAgICAgc2hhZHlEZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgICAgICAgICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9yaWdpbigpLCBkZW4s
CisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhuZWcxRGVuQ2FzZSwgRnJlcXVl
bmN5Q2xhc3M6Ok5vcm1hbCksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayh6
ZXJvRGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgICAgICAgICAgICAgIFVw
c2lsb25WYWx1ZSogemVyb1Jlc3VsdCA9IHplcm9EZW5DYXNlLT5hcHBlbmROZXc8VXBzaWxvblZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICAgICAgemVyb0RlbkNhc2UtPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywg
bV92YWx1ZSwgMCkpOworICAgICAgICAgICAgICAgIHplcm9EZW5DYXNlLT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBKdW1wLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKG1fYmxvY2spKTsKKworICAgICAgICAgICAgICAgIGlu
dDY0X3QgYmFkTnVtZXJhdG9yQ29uc3Q7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVl
LT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAg
ICAgICBiYWROdW1lcmF0b3JDb25zdCA9IC0yMTQ3NDgzNjQ3IC0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAg
ICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAg
IGJhZE51bWVyYXRvckNvbnN0ID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBWYWx1ZSogYmFkTnVtZXJhdG9yID0KKyAgICAgICAgICAgICAgICAgICAgbmVnMURlbkNh
c2UtPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgbV92YWx1ZSwgYmFkTnVtZXJhdG9yQ29uc3Qp
OworCisgICAgICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEJyYW5jaCwgbV92YWx1ZS0+b3JpZ2luKCks
CisgICAgICAgICAgICAgICAgICAgIG5lZzFEZW5DYXNlLT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBFcXVhbCwgbV92YWx1ZS0+b3JpZ2luKCksIG51
bSwgYmFkTnVtZXJhdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGlu
dE1pbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKKyAgICAgICAgICAgICAgICAgICAgRnJl
cXVlbnRlZEJsb2NrKG5vcm1hbERpdkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpKTsKKwor
ICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogaW50TWluUmVzdWx0ID0gaW50TWluQ2FzZS0+
YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92
YWx1ZS0+b3JpZ2luKCksIGJhZE51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgaW50TWluQ2Fz
ZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywg
SnVtcCwgbV92YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAg
ICAgICAgICAgICAgICBWYWx1ZSogcGhpID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigK
KyAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgUGhpLCBtX3ZhbHVlLT50eXBlKCksIG1fdmFs
dWUtPm9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBub3JtYWxSZXN1bHQtPnNldFBoaShwaGkp
OworICAgICAgICAgICAgICAgIHplcm9SZXN1bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAg
ICAgIGludE1pblJlc3VsdC0+c2V0UGhpKHBoaSk7CisKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KHBoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgU3dpdGNoLgorICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTEx
NQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9j
ayk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIEJsb2NrSW5zZXJ0
aW9uU2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9u
U2V0OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICBWYWx1ZSogbV92YWx1ZTsKKyAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBsb3dlck1hY3JvcyhQcm9jZWR1cmUmIHBy
b2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJsb3dlck1hY3JvcyIpOwor
ICAgIExvd2VyTWFjcm9zIGxvd2VyTWFjcm9zKHByb2MpOworICAgIHJldHVybiBsb3dlck1hY3Jv
cy5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9z
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0xvd2VyTWFjcm9zX2gKKyNkZWZp
bmUgQjNMb3dlck1hY3Jvc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBMb3dlcnMgaGlnaC1s
ZXZlbCBvcGVyYXRpb25zIHRoYXQgaXQncyBlYXNpZXIgdG8gZGVhbCB3aXRoIG9uY2UgdGhleSBh
cmUgYnJva2VuIHVwLiBDdXJyZW50bHkKKy8vIHRoaXMgaW5jbHVkZXMgU3dpdGNoIGFuZCBDaGls
bERpdi4KKworYm9vbCBsb3dlck1hY3JvcyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dl
ck1hY3Jvc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzMyw2ICsxMjMzLDQwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIERpdjogewor
ICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBUbXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgICAgICBUbXAg
ZWR4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKKworICAgICAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgZGl2
OworICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29y
ZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgICAgICAgICAgZGl2ID0g
WDg2RGl2MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZD
b252ZXJ0VG9Eb3VibGVXb3JkNjQ7CisgICAgICAgICAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBl
YXgpOworICAgICAgICAgICAgICAgIGFwcGVuZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVk
eCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5j
aGlsZCgxKSkpOworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBlYXgsIHRtcChtX3ZhbHVl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBkb3VibGVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk5MQorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNhc2UgQml0QW5kOiB7CiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5k
NjQsIEFpcjo6T29wcywgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgZW51bSBPcGNvZGUgOiBp
bnQxNl90IHsKICAgICBBZGQsCiAgICAgU3ViLAogICAgIE11bCwKLSAgICBEaXYsCisgICAgRGl2
LCAvLyBBbGwgYmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhl
Y3V0ZSB0aGlzIGZvciAtMl4zMS8tMSBhbmQgeC8wLgogCiAgICAgLy8gSW50ZWdlciBtYXRoLgog
ICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kp
fDAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlz
aW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDIyICs1NSwyNyBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6
OmFkZEJsb2NrKGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmFsdWUqIFByb2Nl
ZHVyZTo6YWRkSW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorVmFsdWUqIFBy
b2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90
IHZhbHVlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSW50MzI6Ci0gICAgICAg
IHJldHVybiBhZGQ8Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICAgICBjYXNlIEludDY0OgotICAgICAgICByZXR1cm4g
YWRkPENvbnN0NjRWYWx1ZT4oT3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGFkZDxD
b25zdDY0VmFsdWU+KG9yaWdpbiwgdmFsdWUpOwogICAgIGNhc2UgRG91YmxlOgotICAgICAgICBy
ZXR1cm4gYWRkPENvbnN0RG91YmxlVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBhZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
fQogCi1WYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUp
CitWYWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2
NF90IHZhbHVlKQoreworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChsaWtlVmFsdWUtPm9yaWdp
bigpLCBsaWtlVmFsdWUtPnR5cGUoKSwgdmFsdWUpOworfQorCitWYWx1ZSogUHJvY2VkdXJlOjph
ZGRCb29sQ29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHJpU3RhdGUgdHJpU3RhdGUpCiB7CiAgICAg
aW50MzJfdCB2YWx1ZSA9IDA7CiAgICAgc3dpdGNoICh0cmlTdGF0ZSkgewpAQCAtODQsNyArODks
NyBAQCBWYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBhZGRJbnRDb25zdGFudChJbnQzMiwg
dmFsdWUpOworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChvcmlnaW4sIEludDMyLCB2YWx1ZSk7
CiB9CiAKIHZvaWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJzKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAj
aW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KQEAgLTQwLDYgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewog
CiBjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBPcGFx
dWVCeXByb2R1Y3RzOwogY2xhc3MgVmFsdWU7CiAKQEAgLTU2LDEwICs1OCwxMSBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CiAgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKIAotICAgIFZhbHVlKiBhZGRJbnRD
b25zdGFudChUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQo
T3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQo
VmFsdWUqLCBpbnQ2NF90IHZhbHVlKTsKIAogICAgIC8vIFJldHVybnMgbnVsbCBmb3IgTWl4ZWRU
cmlTdGF0ZS4KLSAgICBWYWx1ZSogYWRkQm9vbENvbnN0YW50KFRyaVN0YXRlKTsKKyAgICBWYWx1
ZSogYWRkQm9vbENvbnN0YW50KE9yaWdpbiwgVHJpU3RhdGUpOwogCiAgICAgdm9pZCByZXNldFZh
bHVlT3duZXJzKCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwpAQCAtMjE2LDYgKzIx
OSw4IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gdGFr
ZUJ5cHJvZHVjdHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9ieXByb2R1Y3RzKTsgfQogCiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKKyAgICAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOwogICAgIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODYsNiArMTg2LDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGJyZWFr
OwogCisgICAgICAgIGNhc2UgRGl2OgorICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgdXNlcyBDaGlsbERpdiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRo
ZSBydWxlcyBmb3IgRGl2CisgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBpdCBo
YXMgY29ybmVyIGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAorICAg
ICAgICAgICAgLy8gbGlrZXMuCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFs
dWUtPmNoaWxkKDApLT5kaXZDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEJpdEFuZDoKICAgICAgICAgICAgIGhh
bmRsZUNvbW11dGF0aXZpdHkoKTsKIApAQCAtMzE4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZVgsIHZhbHVlWCkKICAgICAgICAgICAg
IC8vIEludG8gdGhpczogemVyby1jb25zdGFudC4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUtPnR5cGUoKSwgMCkpOwor
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50
KG1fdmFsdWUsIDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApA
QCAtNDQ2LDcgKzQ1Niw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVx
dWFsKGNvbnN0MSwgY29uc3QyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0g
Y29uc3QyCiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAg
IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQo
bV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25z
dGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
b3RFcXVhbDoKQEAgLTQ3Myw3ICs0ODUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBOb3RFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8vIEludG8gdGhp
czogY29uc3QxICE9IGNvbnN0MgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAg
ICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5u
b3RFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1f
cHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdp
bigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgTGVzc1RoYW46CkBAIC00ODEsNDIgKzQ5NSw1OCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk1OAogCiAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1
ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgK
KyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFk
ZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3Zh
bHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIExlc3NFcXVhbDoK
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9j
LmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc0VxdWFsQ29uc3RhbnQobV92
YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFu
dCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR3JlYXRlckVxdWFs
OgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3By
b2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyRXF1YWxDb25zdGFu
dChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENv
bnN0YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENvbnN0YW50KG1fdmFs
dWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBYm92
ZToKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9w
cm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVDb25zdGFudChtX3Zh
bHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkp
KSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJlbG93OgogICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEp
KSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKS0+YmVsb3dDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCht
X3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkp
OworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkp
KSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJyYW5jaDogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw4
ICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1
ZSA6IHZhbHVlSW5Qcm9jKSB7Ci0gICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVl
LT5jaGlsZHJlbigpKQorICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hp
bGRyZW4oKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKGNoaWxkLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGNoaWxk
KSwgKCJBdCAiLCAqdmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKGNoaWxkKSkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFzaFNldDxC
YXNpY0Jsb2NrKj4+IGFsbFByZWRlY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDkyICsxMjQsOTcgQEAgVmFsdWUq
IFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbgogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1WYWx1ZSogVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QK
K1ZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25z
dAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OnN1YkNvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6c3ViQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1WYWx1ZSogVmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QK
K1ZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25z
dAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmJpdE9yQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRBbmRDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBj
b25zdAorVmFsdWUqIFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVl
KikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjpzaGxD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmJpdFhvckNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
KSBjb25zdAorVmFsdWUqIFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6elNo
ckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6c1NockNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAor
VmFsdWUqIFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25z
dAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6ZXF1YWxDb25z
dGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9
CiAKLVRyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0
YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29uc3Rh
bnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoY29uc3Qg
VmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0
ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1
ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJu
IE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChW
YWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBW
YWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6
OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQoVmFsdWUq
KSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBjb25z
dAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6YmVs
b3dDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YmVsb3dDb25zdGFudChj
b25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRy
aVN0YXRlIFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUg
VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpiZWxvd0VxdWFsQ29uc3Rh
bnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwyNSArMTEx
LDI2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIFZhbHVlKiBuZWdDb25zdGFudChQcm9j
ZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUm
LCBpbnQzMl90IG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1
ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
IG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHNTaHJDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHpTaHJD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFs
dWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7Cisg
ICAgdmlydHVhbCBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUmLCBj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OyAvLyBUaGlzIGNob29zZXMgQ2hpbGxEaXYgc2VtYW50
aWNzIGZvciBpbnRlZ2Vycy4KKyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9j
ZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIGJp
dE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHNobENvbnN0YW50KFByb2NlZHVyZSYsIGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc1NockNvbnN0YW50
KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1
ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CiAg
ICAgCi0gICAgdmlydHVhbCBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGFib3ZlQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGJlbG93Q29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGFib3ZlRXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVs
b3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0
ZSBlcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBU
cmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVl
KiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3JlYXRlckVx
dWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0
YXRlIGFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVl
KiBvdGhlcikgY29uc3Q7CiAKICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBjb21wYXJpc29uIHRo
ZW4gdGhpcyByZXR1cm5zIHRoZSBpbnZlcnRlZCBmb3JtIG9mIHRoYXQgY29tcGFyaXNvbiwgaWYK
ICAgICAvLyBwb3NzaWJsZS4gSXQgY2FuIGJlIGltcG9zc2libGUgZm9yIGRvdWJsZSBjb21wYXJp
c29ucywgd2hlcmUgZm9yIGV4YW1wbGUgTGVzc1RoYW4gYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MzYsNiArMjgzNiwxMDggQEAg
dm9pZCB0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndQogICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48ZG91YmxlPihwcm9jKSA9PSBmdW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50
cygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwg
MTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYpKTsKIH0KIAordm9pZCB0ZXN0
Q2hpbGxEaXYoaW50IG51bSwgaW50IGRlbiwgaW50IHJlcykKK3sKKyAgICAvLyBUZXN0IG5vbi1j
b25zdGFudC4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworICAgICAgICAK
KyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIG51bSwgZGVuKSA9PSByZXMp
OworICAgIH0KKworICAgIC8vIFRlc3QgY29uc3RhbnQuCisgICAgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBu
dW0pLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBkZW4pKSk7CisgICAgICAgIAorICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGludD4ocHJvYykgPT0gcmVzKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdENoaWxsRGl2VHdpY2Uo
aW50IG51bTEsIGludCBkZW4xLCBpbnQgbnVtMiwgaW50IGRlbjIsIGludCByZXMpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwK
KyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpKSkpKTsK
KyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbnVtMSwgZGVuMSwgbnVt
MiwgZGVuMikgPT0gcmVzKTsKK30KKwordm9pZCB0ZXN0Q2hpbGxEaXY2NChpbnQ2NF90IG51bSwg
aW50NjRfdCBkZW4sIGludDY0X3QgcmVzKQoreworICAgIGlmICghaXM2NEJpdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBUZXN0IG5vbi1jb25zdGFudC4KKyAgICB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSkpOworICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90
Pihwcm9jLCBudW0sIGRlbikgPT0gcmVzKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGNvbnN0YW50
LgorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICByb290LT5hcHBlbmROZXc8
Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIENo
aWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbnVtKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgZGVuKSkpOworICAgICAgICAKKyAg
ICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKSA9PSByZXMpOworICAgIH0K
K30KKwogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzMxMiw2ICsz
NDE0LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdENhbGxT
aW1wbGVEb3VibGUoMSwgMikpOwogICAgIFJVTih0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhRG91
YmxlQXJndW1lbnRzKCkpOwogCisgICAgUlVOKHRlc3RDaGlsbERpdig0LCAyLCAyKSk7CisgICAg
UlVOKHRlc3RDaGlsbERpdigxLCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigwLCAwLCAw
KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigxLCAtMSwgLTEpKTsKKyAgICBSVU4odGVzdENoaWxs
RGl2KC0yMTQ3NDgzNjQ3IC0gMSwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoLTIxNDc0
ODM2NDcgLSAxLCAxLCAtMjE0NzQ4MzY0NyAtIDEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2KC0y
MTQ3NDgzNjQ3IC0gMSwgLTEsIC0yMTQ3NDgzNjQ3IC0gMSkpOworICAgIFJVTih0ZXN0Q2hpbGxE
aXYoLTIxNDc0ODM2NDcgLSAxLCAyLCAtMTA3Mzc0MTgyNCkpOworICAgIFJVTih0ZXN0Q2hpbGxE
aXY2NCg0LCAyLCAyKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KDEsIDAsIDApKTsKKyAgICBS
VU4odGVzdENoaWxsRGl2NjQoMCwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXY2NCgxLCAt
MSwgLTEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAt
IDEsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4NTQ3NzU4MDds
bCAtIDEsIDEsIC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAxKSk7CisgICAgUlVOKHRlc3RDaGls
bERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAxLCAtMSwgLTkyMjMzNzIwMzY4NTQ3NzU4
MDdsbCAtIDEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4NTQ3NzU4MDds
bCAtIDEsIDIsIC00NjExNjg2MDE4NDI3Mzg3OTA0KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdlR3
aWNlKDQsIDIsIDYsIDIsIDUpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2VHdpY2UoNCwgMCwgNiwg
MiwgMykpOworICAgIFJVTih0ZXN0Q2hpbGxEaXZUd2ljZSg0LCAyLCA2LCAwLCAyKSk7CisKICAg
ICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAxOTIy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsMzYgQEAgaW5saW5lIGJvb2wgaXNVcnNoaWZ0NjRW
YWxpZChjb25zdCBJbnN0JgogICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7CiB9CiAKK2lu
bGluZSBib29sIGlzWDg2RGl2SGVscGVyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBD
UFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4
NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAmJiBpbnN0LmFyZ3NbMV0gPT0gVG1wKFg4NlJlZ2lz
dGVyczo6ZWR4KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGlu
ZSBib29sIGlzWDg2Q29udmVydFRvRG91YmxlV29yZDMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkK
K3sKKyAgICByZXR1cm4gaXNYODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJv
b2wgaXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQorewor
ICAgIHJldHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBp
c1g4NkRpdjMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNYODZEaXZI
ZWxwZXJWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNYODZEaXY2NFZhbGlkKGNvbnN0
IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVyVmFsaWQoaW5zdCk7Cit9
CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDIyIEBAIE5l
ZzMyIFVEOkcKIE5lZzY0IFVEOkcKICAgICBUbXAKIAorTXVsMzIgVTpHLCBVRDpHCisgICAgVG1w
LCBUbXAKKyAgICBBZGRyLCBUbXAKKworWDg2Q29udmVydFRvRG91YmxlV29yZDMyIFU6RywgRDpH
CisgICAgVG1wKiwgVG1wKgorCitYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQgVTpHLCBEOkcKKyAg
ICBUbXAqLCBUbXAqCisKK1g4NkRpdjMyIFVEOkcsIFVEOkcsIFU6RworICAgIFRtcCosIFRtcCos
IFRtcAorCitYODZEaXY2NCBVRDpHLCBVRDpHLCBVOkcKKyAgICBUbXAqLCBUbXAqLCBUbXAKKwog
TGVhIFVBOkcsIEQ6RwogICAgIEFkZHIsIFRtcAogCkBAIC0xNTcsMTAgKzE3Myw2IEBAIFhvcjY0
IFU6RywgVUQ6RwogICAgIFRtcCwgQWRkcgogICAgIEltbSwgVG1wCiAKLU11bDMyIFU6RywgVUQ6
RwotICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wCi0KICMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0
ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9y
IDY0LWJpdCBkZXBlbmRpbmcgb24KICMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1
cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3Qg
aGF2ZSBhCiAjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBh
bHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+KTsKICAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCk7
CiAgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZmxvYXQg
ZXhlY3V0aW9uQ291bnQpOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRlKCk7CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOTksOCArMzM5OSw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3ByKCkpOwotICAgICAgICBt
X2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxf
cihvcDJHUFIpOworICAgICAgICBtX2ppdC54ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAg
ICAgICAgbV9qaXQueDg2RGl2MzIob3AyR1BSKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAo
b3AyVGVtcEdQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgdW5sb2NrKG9wMlRlbXBH
UFIpOwpAQCAtMzU1NSw4ICszNTU1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoTW9kKE5vZAogCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHcHIsIGVheC5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGl2aXNvciksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmNkcSgpOwotICAg
ICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQueDg2RGl2MzIoc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaWYgKHNo
b3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIsIFRydXN0ZWRJ
bW0zMigwKSk7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywg
ZWR4LmdwcigpKSk7CkBAIC0zNjQ2LDggKzM2NDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBtX2pp
dC5tb3ZlKG9wMUdQUiwgZWF4LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2Rx
KCk7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Iob3AyR1BSKTsKKyAgICAgICAg
bV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAgIG1faml0Lng4NkRpdjMy
KG9wMkdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKG9wMlRlbXBHUFIgIT0gSW52YWxp
ZEdQUlJlZykKICAgICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDggKzg1OCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKC0xKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsK
ICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKLSAgICBtX2Fzc2VtYmxlci5jZHEo
KTsKLSAgICBtX2Fzc2VtYmxlci5pZGl2bF9yKHJlZ1QyKTsKKyAgICB4ODZDb252ZXJ0VG9Eb3Vi
bGVXb3JkMzIoKTsKKyAgICB4ODZEaXYzMihyZWdUMik7CiAgICAgSnVtcCBudW1lcmF0b3JQb3Np
dGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMigw
KSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKSk7CiAgICAgbnVt
ZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIzLDgg
KzYyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBK
dW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJ
bW0zMigtMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhp
cyk7Ci0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJsZXIuaWRpdmxfcihlY3gp
OworICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIHg4NkRpdjMyKGVjeCk7CiAg
ICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
cmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgJKHJl
dmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlv
bkNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2Myw4ICs3NjMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwog
ICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgWDg2UmVnaXN0ZXJzOjplY3gpOwogICAg
ICAgICAgICAgaWYgKG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlNEaXYgfHwgb3AgPT0gV0FT
TU9wRXhwcmVzc2lvbkkzMjo6U01vZCkgewotICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNk
cSgpOwotICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3IoWDg2UmVnaXN0ZXJzOjpl
Y3gpOworICAgICAgICAgICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgICAg
ICAgICAgICAgIHg4NkRpdjMyKFg4NlJlZ2lzdGVyczo6ZWN4KTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlVE
aXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1vZCk7CiAgICAgICAgICAgICAgICAg
eG9yMzIoWDg2UmVnaXN0ZXJzOjplZHgsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0J1YmJsZVNvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CdWJi
bGVTb3J0LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9XVEYvd3RmL0J1YmJsZVNvcnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCB2b2lkIGJ1YmJsZVNvcnQoSXRlcmF0
b3JUeXBlIGJlZ2luLCBJdGVyCiB7CiAgICAgYnViYmxlU29ydCgKICAgICAgICAgYmVnaW4sIGVu
ZCwKLSAgICAgICAgW10gKHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlw
ZT46OnZhbHVlX3R5cGUgbGVmdCwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3Jf
dHJhaXRzPEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUgcmlnaHQpIC0+IGJvb2wgeworICAgICAg
ICBbXSAoY29uc3QgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3JUeXBlPjo6
dmFsdWVfdHlwZSYgbGVmdCwKKyAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIHN0ZDo6aXRlcmF0
b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUmIHJpZ2h0KSAtPiBib29sIHsKICAg
ICAgICAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7CiAgICAgICAgIH0pOwogfQpJbmRleDogU291
cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5z
ZXJ0aW9uLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IGNsYXNzIEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0g
ICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBVJiYgZWxlbWVudCkKICAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICAg
ICAsIG1fZWxlbWVudChzdGQ6OmZvcndhcmQ8VT4oZWxlbWVudCkpCiAgICAgewogICAgIH0KICAg
ICAKICAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgVCBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgY29uc3QgVCYgZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIFQmIGVsZW1lbnQoKSB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnNlcnRpb24m
IG90aGVyKSBjb25zdAogICAgIHsKQEAgLTY2LDggKzY4LDggQEAgdm9pZCBleGVjdXRlSW5zZXJ0
aW9ucyhUYXJnZXRWZWN0b3JUeXBlJgogICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2Vy
dGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAg
ICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKLSAgICAgICAg
ICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOwotICAgICAgICB0YXJnZXRb
Zmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7Cisg
ICAgICAgICAgICB0YXJnZXRbaV0gPSBXVEY6Om1vdmUodGFyZ2V0W2kgLSBpbmRleE9mZnNldF0p
OworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBXVEY6Om1vdmUoaW5zZXJ0aW9uc1tpbmRl
eEluSW5zZXJ0aW9uc10uZWxlbWVudCgpKTsKICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRl
eDsKICAgICB9CiAgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265247</attachid>
            <date>2015-11-10 16:54:05 -0800</date>
            <delta_ts>2015-11-10 17:09:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>110662</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNSBA
QAorMjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggQ2hpbGxEaXYKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGlzIGFib3V0IGEgbG90IG1vcmUgdGhhbiBDaGlsbERpdi4gSSBwaWNrZWQgdGhhdCBhcyB0aGUg
bmV4dCB0aGluZyB0byBsb3dlcgorICAgICAgICBiZWNhdXNlIEkga25ldyB0aGF0IGl0IHdvdWxk
IGZvcmNlIG1lIHRvIGNvbWUgdXAgd2l0aCBhIHNlbnNpYmxlIGlkaW9tIGZvciBkb2luZworICAg
ICAgICBzdGVwd2lzZSBsb3dlcmluZ3MgdGhhdCByZXF1aXJlIGJyZWFraW5nIGJhc2ljIGJsb2Nr
cy4gVGhlIGlkZWEgaXMgdGhhdCB5b3Ugd2FudCB0bworICAgICAgICB3cml0ZSBhIGxvb3AgdGhh
dCBpdGVyYXRlcyBmb3J3YXJkIG92ZXIgdGhlIHByb2dyYW0sIHdoaWNoIHR1cm5zIHNvbWUgb3Bl
cmF0aW9ucyB0aGF0CisgICAgICAgIGN1cnJlbnRseSBhcmUganVzdCBzaW5nbGUgVmFsdWVzIGlu
dG8gYW4gZW50aXJlIGxpdHRsZSBzdWItQ0ZHcy4gVGhhdCByZXF1aXJlcyBzcGxpdHRpbmcKKyAg
ICAgICAgdGhlIGJsb2NrIHRoYXQgY29udGFpbmVkIHRoZSBvcmlnaW5hbCBWYWx1ZS4gVGhhdCdz
IHRyaWNreSBpZiB5b3UgdGhlbiB3YW50IHRvIGtlZXAKKyAgICAgICAgaXRlcmF0aW5nOiB0aGUg
aW5kZXggb2YgdGhlIFZhbHVlIHlvdSB3ZXJlIGxhc3QgbG9va2luZyBhdCBoYXMgbm93IGNoYW5n
ZWQgYW5kIHlvdXIKKyAgICAgICAgSW5zZXJ0aW9uU2V0cyBhcmUgbm93IGludmFsaWQuCisKKyAg
ICAgICAgVGhpcyBpbnRyb2R1Y2VzIGFuIGlkaW9tIHRoYXQgaGFuZGxlcyB0aGlzLiBJdCdzIEJs
b2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEJlZm9yZSgpLiBUaGUKKyAgICAgICAgaWRlYSBpcyB0aGF0
IGl0IHVzZXMgdGhlIGN1cnJlbnQgYmxvY2sgYmVmb3JlIHRoZSBzcGxpdCBhcyB0aGUgY29udGlu
dWF0aW9uIGFmdGVyIHRoZQorICAgICAgICBzcGxpdC4gV2hlbiB5b3UgY2FsbCBzcGxpdEJlZm9y
ZSgpLCB5b3UgcGFzcyBpdCB5b3VyIGxvb3AgaW5kZXggYW5kIHlvdXIgSW5zZXJ0aW9uU2V0Cisg
ICAgICAgIChpZiBhcHBsaWNhYmxlKS4gSXQgbWFrZXMgc3VyZSB0aGF0IGl0IGNoYW5nZXMgdGhv
c2UgYXV4aWxpYXJ5IHRoaW5ncyBpbiBzdWNoIGEgd2F5IHRoYXQKKyAgICAgICAgeW91IGNhbiBr
ZWVwIGxvb3BpbmcuCisKKyAgICAgICAgVGhpcyB1bmNvdmVyZWQgc29tZSBidWdzLCBzaW5jZSB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgd2UncmUgY29tcGlsaW5nIGNyb3NzIGVkZ2VzLgor
CisgICAgICAgIEJlY2F1c2UgQ2hpbGxEaXYgaXMgcmVhbGx5IGEgZGl2aXNpb24sIEkgYWxzbyBo
YWQgdG8gd3JpdGUgYSBidW5jaCBvZiBjb2RlIHRvIHN1cHBvcnQKKyAgICAgICAgdGhlIG9yZGlu
YXJ5IEIzIERpdi4gV2hpbGUgZG9pbmcgdGhhdCwgSSByZWFsaXplZCB0aGF0IHRoZXJlIHdhcyBh
c3ltbWV0cnkgdG8gdGhhdAorICAgICAgICBjb25zdG5lc3Mgb2YgdGhlIFZhbHVlIGNvbnN0YW50
IGZvbGRpbmcgbWV0aG9kcywgc28gSSBmaXhlZCB0aGF0IGFzIHdlbGwuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6eDg2Q29udmVydFRvRG91YmxlV29yZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246Ong4NkRpdjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Om5lZzMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om11bDY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Ong4NkNvbnZlcnRUb0RvdWJsZVdvcmQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4ODZEaXY2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgICogYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZsX3IpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZxX3IpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OmNtcGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNkcSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y2RxcSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6ZnN0cHMpOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6cmVwbGFjZUxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6YXBwZW5kSW50
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVwbGFjZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6dXBkYXRlUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
QjM6OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5oOgorICAg
ICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJh
c2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2Nr
OjpwcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpmcmVxdWVuY3kp
OgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZXBsYWNlTGFzdFdpdGhOZXcpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3Vj
Y2Vzc29ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjp1cGRhdGVQcmVk
ZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAg
ICAqIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIz
OjpCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6
QjM6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpCMzo6QmxvY2tJ
bnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChKU0M6OkIzOjpCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkJsb2NrSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkIzOjppc1JlcHJlc2Vu
dGFibGVBcyk6CisgICAgICAgIChKU0M6OkIzOjpjaGlsbERpdik6CisgICAgICAgICogYjMvQjND
b25zdDMyVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdDMyVmFsdWU6OmJpdE9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZh
bHVlOjpiaXRYb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnNo
bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6c1NockNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
Q29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMy
VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1
ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dCk6CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0
NjRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkaXZDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmJpdFhvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c2hsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6
OkNvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDY0VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZh
bHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1
ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpn
cmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFi
b3ZlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50KToK
KyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKiBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjpyZXBsYWNlU3VjY2Vzc29yKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAgICogYjMv
QjNDb250cm9sVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6Ymxv
Y2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6ZnJlcXVlbmN5
KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlv
blNldDo6aW5zZXJ0SW50Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0
OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOgorICAgICAgICAqIGIz
L0IzTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omxvd2VyTWFjcm9z
KToKKyAgICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2Vy
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmFkZEJvb2xDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnJl
c2V0VmFsdWVPd25lcnMpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OnRha2VCeXByb2R1Y3RzKToKKyAgICAgICAgKiBiMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBi
My9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphZGRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiaXRBbmRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Yml0WG9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnNobENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzU2hyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnpTaHJDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bm90
RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc1RoYW5Db25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6CisgICAgICAgICogYjMvQjNW
YWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNVcnNoaWZ0NjRWYWxpZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmlzWDg2RGl2SGVscGVyVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpp
c1g4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMlZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
aXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmlzWDg2RGl2MzJWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzWDg2RGl2NjRWYWxp
ZCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNpbXBsaWZ5Q0ZH
KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2VHdpY2UpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2NjQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhEaXYpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhNb2QpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OmJ1aWxkQmluYXJ5STMyKToKKwogMjAxNS0xMS0xMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBDcmVhdGUgYW4gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIg
YWJzdHJhY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
OTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCwxMCBAQAogCQkw
RjMzOEUxNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYg
LyogQjNWYWx1ZUtleS5jcHAgKi87IH07CiAJCTBGMzM4RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBC
M1ZhbHVlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjMzOEUwOTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5oICovOyB9OwogCQkwRjMz
OEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTBBMUJGMDI3NkMwMDEzQzg4
RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oICovOyB9OworCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4
OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5jcHAgKi87IH07CisJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5o
ICovOyB9OworCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxOTFC
RjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87IH07CisJCTBGMzM4RTFFMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dl
ck1hY3Jvcy5oICovOyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0
QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRB
MTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5oICovOyB9OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwpAQCAt
MjMzOSw2ICsyMzQzLDEwIEBACiAJCTBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVLZXku
Y3BwOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzM4RTA5MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVLZXkuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhG
IC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzVmFsdWVLZXlJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4
OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTG93ZXJNYWNyb3MuY3BwOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xv
d2VyTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJNYWNy
b3MuaDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcv
REZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5
cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9
IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00NDMyLDYgKzQ0NDAsOCBAQAogCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suaCAqLywKIAkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Js
b2NrSW5saW5lcy5oICovLAogCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tVdGlscy5oICovLAorCQkJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjMzOERGNzFCRTk2QUE4MDAxM0M4OEYgLyogQjND
Q2FsbFZhbHVlLmNwcCAqLywKIAkJCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2Fs
bFZhbHVlLmggKi8sCkBAIC00NDczLDYgKzQ0ODMsOCBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYw
MDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAw
ODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBG
Rjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oICovLAorCQkJCTBGMzM4RTE5MUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLywKKwkJCQkwRjMzOEUxQTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovLAogCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAogCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLywKIAkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNN
ZW1vcnlWYWx1ZS5jcHAgKi8sCkBAIC02NjY2LDYgKzY2NzgsNyBAQAogCQkJCTBGRUM4NTM4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ1NzA0MTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjUsNiArNjc3OCw3IEBACiAJCQkJQzIyMzlE
MTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2
IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1
QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApA
QCAtODMxMCw2ICs4MzI0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3
QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAw
NjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4
RTFEMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04NDgyLDYgKzg0OTcsNyBAQAog
CQkJCTBGRUEwQTFFMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzI3MTg3REZERUMwMDgzQjY4NyAvKiBGVExB
dmFpbGFibGVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwOTE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4
RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZU
TERhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAko
cmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDMwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxfaTMycihzcmMsIGltbS5tX3ZhbHVl
LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkNv
bnZlcnRUb0RvdWJsZVdvcmQzMihSZWdpc3RlcklEIGVheCwgUmVnaXN0ZXJJRCBlZHgpCisgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKGVheCwgZWF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChlZHgsIGVkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7Cisg
ICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIH0KKworICAgIHZvaWQgeDg2
RGl2MzIoUmVnaXN0ZXJJRCBkZW5vbWluYXRvcikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmlkaXZsX3IoZGVub21pbmF0b3IpOworICAgIH0KKworICAgIHZvaWQgeDg2RGl2MzIoUmVnaXN0
ZXJJRCBlYXgsIFJlZ2lzdGVySUQgZWR4LCBSZWdpc3RlcklEIGRlbm9taW5hdG9yKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChlYXgsIGVheCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZWR4LCBlZHggPT0gWDg2UmVnaXN0ZXJzOjplZHgpOworICAg
ICAgICB4ODZEaXYzMihkZW5vbWluYXRvcik7CisgICAgfQorCiAgICAgdm9pZCBuZWczMihSZWdp
c3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX3Ioc3JjRGVz
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4Niw2ICszODYsMzAgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5pbXVscV9y
cihzcmMsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQ2NCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jZHFxKCk7CisgICAgfQorCisgICAg
dm9pZCB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoUmVnaXN0ZXJJRCByYXgsIFJlZ2lzdGVySUQg
cmR4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyYXgsIHJheCA9PSBYODZSZWdpc3Rl
cnM6OmVheCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXJz
OjplZHgpOworICAgICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHg4NkRpdjY0KFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5pZGl2cV9yKGRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkRp
djY0KFJlZ2lzdGVySUQgcmF4LCBSZWdpc3RlcklEIHJkeCwgUmVnaXN0ZXJJRCBkZW5vbWluYXRv
cikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmF4LCByYXggPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJkeCwgcmR4ID09IFg4NlJlZ2lzdGVyczo6
ZWR4KTsKKyAgICAgICAgeDg2RGl2NjQoZGVub21pbmF0b3IpOworICAgIH0KKwogICAgIHZvaWQg
bmVnNjQoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubmVncV9y
KGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjIsNiArOTYyLDExIEBA
IHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX0lESVYsIGRzdCk7CiAgICAgfQogCisgICAgdm9pZCBpZGl2cV9yKFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2
LCBHUk9VUDNfT1BfSURJViwgZHN0KTsKKyAgICB9CisKICAgICAvLyBDb21wYXJpc29uczoKIAog
ICAgIHZvaWQgY21wbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xMjg0
LDYgKzEyODksMTEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
Q0RRKTsKICAgICB9CiAKKyAgICB2b2lkIGNkcXEoKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfQ0RRKTsKKyAgICB9CisKICAgICB2b2lkIGZzdHBzKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9FU0NBUEVfRDksIEVTQ0FQRV9EOV9GU1RQX3NpbmdsZVJlYWwsIGJhc2UsIG9mZnNldCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNp
b24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0jaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIsNiArNTMsMjkgQEAgdm9pZCBCYXNpY0Js
b2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiB9
CiAKK3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZUxhc3QoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSog
dmFsdWUpCit7CisgICAgcHJvYy5kZWxldGVWYWx1ZShsYXN0KCkpOworICAgIGxhc3QoKSA9IHZh
bHVlOworfQorCitWYWx1ZSogQmFzaWNCbG9jazo6YXBwZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCit7CisgICAg
VmFsdWUqIHJlc3VsdCA9IHByb2MuYWRkSW50Q29uc3RhbnQob3JpZ2luLCB0eXBlLCB2YWx1ZSk7
CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmFsdWUqIEJh
c2ljQmxvY2s6OmFwcGVuZEludENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIGxpa2VW
YWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYXBwZW5kSW50Q29uc3RhbnQocHJv
YywgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZhbHVlLT50eXBlKCksIHZhbHVlKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2lj
QmxvY2sqIHRvKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+cmVw
bGFjZVN1Y2Nlc3Nvcihmcm9tLCB0byk7Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nv
cih0aGlzLCBibG9jayk7CkBAIC02Nyw2ICs5MSwxMSBAQCBib29sIEJhc2ljQmxvY2s6OnJlcGxh
Y2VQcmVkZWNlc3NvcihCYXNpCiAgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhp
cywgZnJvbSwgdG8pOwogfQogCit2b2lkIEJhc2ljQmxvY2s6OnVwZGF0ZVByZWRlY2Vzc29ycygp
Cit7CisgICAgQjM6OnVwZGF0ZVByZWRlY2Vzc29ycyh0aGlzKTsKK30KKwogdm9pZCBCYXNpY0Js
b2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGR1bXBQ
cmVmaXgsIG1faW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTQgQEAKICNpZiBFTkFCTEUo
QjNfSklUKQogCiAjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM09y
aWdpbi5oIgogI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkIz
VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgSW5zZXJ0aW9uU2V0
OwogY2xhc3MgUHJvY2VkdXJlOwogY2xhc3MgVmFsdWU7CkBAIC02OCwxMCArNzEsMTcgQEAgcHVi
bGljOgogICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCByZXBsYWNlTGFzdChQcm9jZWR1cmUmLCBWYWx1ZSopOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFsdWVU
eXBlKiBhcHBlbmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKIAorICAgIFZhbHVlKiBh
cHBlbmRJbnRDb25zdGFudChQcm9jZWR1cmUmLCBPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUp
OworICAgIFZhbHVlKiBhcHBlbmRJbnRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogbGlrZVZh
bHVlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIHJlcGxhY2VMYXN0V2l0
aE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpIGNvbnN0OwogICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKICAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25l
ZCBpbmRleCk7CkBAIC04Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpOwogICAgIFN1
Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4g
c3VjY2Vzc29yQmxvY2tzKCkgY29uc3Q7CiAKKyAgICBib29sIHJlcGxhY2VTdWNjZXNzb3IoQmFz
aWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCiAgICAgdW5zaWduZWQgbnVtUHJlZGVj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CiAgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzW2luZGV4XTsgfQogICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CkBAIC05NCwxMiArMTA2
LDE2IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsK
ICAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2Nr
KiB0byk7CiAKKyAgICAvLyBVcGRhdGUgcHJlZGVjZXNzb3JzIHN0YXJ0aW5nIHdpdGggdGhlIHN1
Y2Nlc3NvcnMgb2YgdGhpcyBibG9jay4KKyAgICB2b2lkIHVwZGF0ZVByZWRlY2Vzc29ycygpOwor
CiAgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jh
c2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsMTQgQEAgVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdFdpdGhO
ZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAg
VmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4u
KTsKKyAgICByZXBsYWNlTGFzdChwcm9jZWR1cmUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25z
dAogewogICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29y
cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxz
LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwyMCBAQCBib29sIHJlcGxh
Y2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHVwZGF0ZVByZWRlY2Vzc29ycyhC
YXNpY0Jsb2NrKiByb290KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0
OworICAgIHdvcmtsaXN0LmFwcGVuZChyb290KTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1w
dHkoKSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJs
b2NrcygpKSB7CisgICAgICAgICAgICBpZiAoYWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29yLCBibG9j
aykpCisgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3Nvcik7CisgICAgICAg
IH0KKyAgICB9Cit9CisKIC8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92
ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
QmxvY2ssIHR5cGVuYW1lIERlbGV0ZUZ1bmN0b3I+CiB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KApA
QCAtODIsMTQgKzk2LDcgQEAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgKICAgICAgICAgICAgIGJs
b2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CiAgICAgfQogCi0gICAgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKLSAgICB3
b3JrbGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7Ci0gICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKLSAgICAgICAgICAgIGFkZFByZWRlY2Vz
c29yKHN1Y2Nlc3NvciwgYmxvY2spOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChzdWNjZXNz
b3IpOwotICAgICAgICB9Ci0gICAgfQorICAgIHVwZGF0ZVByZWRlY2Vzc29ycyhibG9ja3NbMF0u
Z2V0KCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsr
aSkgewogICAgICAgICBpZiAoIWJsb2Nrc1tpXSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRp
b25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9u
U2V0KFByb2NlZHVyZSAmcHJvYykKKyAgICA6IG1fcHJvYyhwcm9jKQoreworfQorCitCbG9ja0lu
c2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRp
b25TZXQ6Omluc2VydChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKK3sKKyAgICBtX2luc2Vy
dGlvbnMuYXBwZW5kKFdURjo6bW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNCbG9jayogQmxv
Y2tJbnNlcnRpb25TZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2so
VUlOVF9NQVgsIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdl
dCgpOworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGOjptb3ZlKGJsb2NrKSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0
OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQorewor
ICAgIHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5
ID8gZnJlcXVlbmN5IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJs
b2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEZvcndhcmQoCisgICAgQmFzaWNCbG9jayogYmxvY2ssIHVu
c2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2VydGlvblNldCwgZG91YmxlIGZy
ZXF1ZW5jeSkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisK
KyAgICAvLyBDcmVhdGUgYSBuZXcgYmxvY2sgdGhhdCB3aWxsIGdvIGp1c3QgYmVmb3JlICdibG9j
aycsIGFuZCBtYWtlIGl0IGNvbnRhaW4gZXZlcnl0aGluZyBwcmlvcgorICAgIC8vIHRvICd2YWx1
ZUluZGV4Jy4KKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBpbnNlcnRCZWZvcmUoYmxvY2ssIGZy
ZXF1ZW5jeSk7CisgICAgcmVzdWx0LT5tX3ZhbHVlcy5yZXNpemUodmFsdWVJbmRleCArIDEpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlSW5kZXg7IGktLTspCisgICAgICAgIHJlc3VsdC0+
bV92YWx1ZXNbaV0gPSBibG9jay0+bV92YWx1ZXNbaV07CisKKyAgICAvLyBNYWtlIHRoZSBuZXcg
YmxvY2sganVtcCB0byAnYmxvY2snLgorICAgIHJlc3VsdC0+bV92YWx1ZXNbdmFsdWVJbmRleF0g
PQorICAgICAgICBtX3Byb2MuYWRkPENvbnRyb2xWYWx1ZT4oSnVtcCwgdmFsdWUtPm9yaWdpbigp
LCBGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKKworICAgIC8vIElmIHdlIGhhZCBpbnNlcnRlZCB0
aGluZ3MgaW50byAnYmxvY2snIGJlZm9yZSB0aGlzLCBleGVjdXRlIHRob3NlIGluc2VydGlvbnMg
bm93LgorICAgIGlmIChpbnNlcnRpb25TZXQpCisgICAgICAgIGluc2VydGlvblNldC0+ZXhlY3V0
ZShyZXN1bHQpOworCisgICAgLy8gUmVtb3ZlIGV2ZXJ5dGhpbmcgcHJpb3IgdG8gJ3ZhbHVlSW5k
ZXgnIGZyb20gJ2Jsb2NrJywgc2luY2UgdGhvc2UgdGhpbmdzIGFyZSBub3cgaW4gdGhlCisgICAg
Ly8gbmV3IGJsb2NrLgorICAgIGJsb2NrLT5tX3ZhbHVlcy5yZW1vdmUoMCwgdmFsdWVJbmRleCk7
CisKKyAgICAvLyBUaGlzIGlzIGJlaW5nIHVzZWQgaW4gYSBmb3J3YXJkIGxvb3Agb3ZlciAnYmxv
Y2snLiBVcGRhdGUgdGhlIGluZGV4IG9mIHRoZSBsb29wIHNvIHRoYXQKKyAgICAvLyBpdCBjYW4g
Y29udGludWUgdG8gdGhlIG5leHQgYmxvY2suCisgICAgdmFsdWVJbmRleCA9IDA7CisKKyAgICAv
LyBGaXh1cCB0aGUgcHJlZGVjZXNzb3JzIG9mICdibG9jaycuIFRoZXkgbm93IG11c3QganVtcCB0
byB0aGUgbmV3IGJsb2NrLgorICAgIHJlc3VsdC0+cHJlZGVjZXNzb3JzKCkgPSBXVEY6Om1vdmUo
YmxvY2stPnByZWRlY2Vzc29ycygpKTsKKyAgICBibG9jay0+YWRkUHJlZGVjZXNzb3IocmVzdWx0
KTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogcmVzdWx0LT5wcmVkZWNlc3Nv
cnMoKSkKKyAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3IoYmxvY2ssIHJlc3Vs
dCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJsb2NrSW5zZXJ0aW9uU2V0Ojpl
eGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4g
dG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAg
Ly8gcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBz
dGFibGUgc29ydCBhbmQgd2Ugd2FudCBpdCB0byBiZQorICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBi
dWJibGUgc29ydC4KKyAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2Vy
dGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9wcm9jLm1fYmxvY2tzLCBt
X2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlz
IGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0aHkgdG8ga2Vl
cCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgbV9wcm9jLm1fYmxvY2tzLnJlbW92
ZUFsbE1hdGNoaW5nKAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYg
YmxvY2tQdHIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFibG9ja1B0cjsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWly
IG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2MubV9ibG9j
a3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCbG9ja0luc2VydGlvblNldF9oCisjZGVmaW5lIEIzQmxvY2tJbnNlcnRp
b25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgi
CisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwor
dHlwZWRlZiBXVEY6Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2Nr
SW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgQmxv
Y2tJbnNlcnRpb25TZXQoUHJvY2VkdXJlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7Cisg
ICAgCisgICAgdm9pZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQg
YSBuZXcgYmxvY2sgYXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMg
YSBuZXcgYmxvY2sgYmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3Qg
cGFzcyB0aGUgZnJlcXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMg
dXMgdG8ganVzdCB1c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQn
cworICAgIC8vIHVzdWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRC
ZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAg
ICAvLyBBIGhlbHBlciB0byBzcGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3Zl
ciBpdC4gSXQgY3JlYXRlcyBhIG5ldyBibG9jayB0byBob2xkCisgICAgLy8gZXZlcnl0aGluZyBi
ZWZvcmUgdGhlIGluc3RydWN0aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlz
IGxlZnQgd2l0aAorICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElm
IHRoZSBvcHRpb25hbCBJbnNlcnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0CisgICAg
Ly8gZXhlY3V0ZWQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2sgLSB0aGlzIG1ha2VzIHNlbnNl
IGlmIHlvdSBoYWQgcHJldmlvdXNseSBpbnNlcnRlZAorICAgIC8vIHRoaW5ncyBpbnRvIHRoZSBv
cmlnaW5hbCBibG9jaywgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2sgd2lsbCBiZSBpbmRl
eGVkIGlkZW50aWNhbGx5CisgICAgLy8gdG8gaG9sZCB0aGlzIGJsb2NrIHdhcyBpbmRleGVkIGZv
ciBhbGwgdmFsdWVzIHByaW9yIHRvIHZhbHVlSW5kZXguIEFmdGVyIHRoaXMgcnVucywgaXQKKyAg
ICAvLyBzZXRzIHZhbHVlSW5kZXggdG8gemVyby4gVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGlz
IG1ldGhvZCBmb3IgdGhpbmdzIGxpa2U6CisgICAgLy8KKyAgICAvLyBmb3IgKHVuc2lnbmVkIHZh
bHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7
CisgICAgLy8gICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAv
LyAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBGb28pIHsKKyAgICAvLyAgICAgICAgIEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yID0KKyAgICAvLyAgICAgICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9u
U2V0LnNwbGl0Rm9yd2FyZChibG9jaywgdmFsdWVJbmRleCwgJm1faW5zZXJ0aW9uU2V0KTsKKyAg
ICAvLyAgICAgICAgIC4uLiAvLyBOb3cgeW91IGNhbiBhcHBlbmQgdG8gcHJlZGVjZXNzb3IsIGlu
c2VydCBuZXcgYmxvY2tzIGJlZm9yZSAnYmxvY2snLCBhbmQKKyAgICAvLyAgICAgICAgIC4uLiAv
LyB5b3UgY2FuIHVzZSBtX2luc2VydGlvblNldCB0byBpbnNlcnQgbW9yZSB0aGluZyBiZWZvcmUg
J3ZhbHVlJy4KKyAgICAvLyAgICAgICAgIHByZWRlY2Vzc29yLT51cGRhdGVQcmVkZWNlc3NvcnMo
KTsKKyAgICAvLyAgICAgfQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgaG93IHVzdWFs
bHkgdGhpcyBpZGlvbSBlbmRzIGluIGEgYWxsIHRvIHVwZGF0ZVByZWRlY2Vzc29ycygpLCB3aGlj
aCBlbnN1cmVzIHRoYXQgdGhlCisgICAgLy8gcHJlZGVjZXNzb3JzIGludm9sdmVkIGluIGFueSBv
ZiB0aGUgbmV3IGNvbnRyb2wgZmxvdyB0aGF0IHlvdSd2ZSBjcmVhdGVkIGFyZSB1cCB0byBkYXRl
LgorICAgIEJhc2ljQmxvY2sqIHNwbGl0Rm9yd2FyZCgKKyAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2ssIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBJbnNlcnRpb25TZXQqID0gbnVsbHB0ciwKKyAgICAg
ICAgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworICAgIAorICAgIGJvb2wgZXhlY3V0ZSgpOwor
Citwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIFZlY3RvcjxCbG9ja0luc2Vy
dGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja0luc2VydGlvblNl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAxOTIy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtOTQsNiArOTQsMjQgQEAgaW5saW5lIGJvb2wgaXNSZXByZXNlbnRhYmxlQXMoZG91Ymxl
IHZhbAogICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBc0ltcGw8UmVzdWx0VHlwZSwgZG91Ymxl
LCBpbnQ2NF90Pih2YWx1ZSk7CiB9CiAKK2lubGluZSBpbnQzMl90IGNoaWxsRGl2KGludDMyX3Qg
bnVtLCBpbnQzMl90IGRlbikKK3sKKyAgICBpZiAoIWRlbikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGRlbiA9PSAtMSAmJiBudW0gPT0gLTIxNDc0ODM2NDcgLSAxKQorICAgICAgICByZXR1
cm4gbnVtOworICAgIHJldHVybiBudW0gLyBkZW47Cit9CisKK2lubGluZSBpbnQ2NF90IGNoaWxs
RGl2KGludDY0X3QgbnVtLCBpbnQ2NF90IGRlbikKK3sKKyAgICBpZiAoIWRlbikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGRlbiA9PSAtMSAmJiBudW0gPT0gLTkyMjMzNzIwMzY4NTQ3NzU4
MDdsbCAtIDEpCisgICAgICAgIHJldHVybiBudW07CisgICAgcmV0dXJuIG51bSAvIGRlbjsKK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZp
c2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMjYgKzQ3LDEzMyBAQCBWYWx1ZSogQ29uc3QzMlZh
bHVlOjphZGRDb25zdGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1
ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlcik7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6
OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUq
IENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgKyBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6
c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSog
Q29uc3QzMlZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSAtIG90aGVyLT5hc0ludDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpi
aXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVl
KiBDb25zdDMyVmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigp
LCBjaGlsbERpdihtX3ZhbHVlLCBvdGhlci0+YXNJbnQzMigpKSk7Cit9CisKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBt
X3ZhbHVlICYgb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OmJp
dE9yQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSog
Q29uc3QzMlZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigp
LCBtX3ZhbHVlIHwgb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6
OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFs
dWUqIENvbnN0MzJWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3Jp
Z2luKCksIG1fdmFsdWUgXiBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJW
YWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitW
YWx1ZSogQ29uc3QzMlZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmln
aW4oKSwgbV92YWx1ZSA8PCAob3RoZXItPmFzSW50MzIoKSAmIDMxKSk7CiB9CiAKLVZhbHVlKiBD
b25zdDMyVmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikg
Y29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZh
bHVlPihvcmlnaW4oKSwgbV92YWx1ZSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDMxKSk7CiB9CiAK
LVZhbHVlKiBDb25zdDMyVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5o
YXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1fdmFsdWUpID4+IChvdGhlci0+YXNJbnQzMigpICYgMzEpKSk7CiB9CiAKLVRy
aVN0YXRlIENvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitU
cmlTdGF0ZSBDb25zdDMyVmFsdWU6OmVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0ludDMy
KCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQog
ICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1
ZSAhPSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNz
VGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6
bGVzc1RoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0
dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUg
Q29uc3QzMlZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1Ry
aVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJu
IE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPiBvdGhlci0+YXNJ
bnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NFcXVhbENvbnN0
YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQz
MigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUo
bV92YWx1ZSA8PSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVl
OjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25z
dDMyVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QK
IHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNJbnQzMigpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjphYm92ZUNvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YWJvdmVDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJbnQzMigpKSk7
CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6YmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJl
dHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50
MzJfdD4obV92YWx1ZSkgPCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkp
OwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSog
b3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXIt
PmFzSW50MzIoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93RXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTkyMjU5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDI1ICs0MiwyNiBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJv
Y2VkdXJlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBhZGRDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBz
dWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYs
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHNobENvbnN0YW50KFBy
b2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHNTaHJD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZh
bHVlKiB6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLQotICAgIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGJlbG93Q29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBhYm92ZUVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBi
ZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1
ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYml0QW5kQ29u
c3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzaGxDb25zdGFudChQ
cm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVl
KiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1YWxDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBU
cmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlQ29uc3Rh
bnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxv
d0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgYWJvdmVFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyNiArNDcsMTMzIEBAIFZhbHVlKiBDb25zdDY0VmFsdWU6
OmFkZENvbnN0YW50KFByb2NlZHUKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihv
cmlnaW4oKSwgbV92YWx1ZSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG90aGVyKSk7CiB9CiAKLVZh
bHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90
aGVyKSBjb25zdAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
NjQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFs
dWUqIENvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2
NCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2
NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1
ZSogQ29uc3Q2NFZhbHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBv
dGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25z
dDY0VmFsdWU+KG9yaWdpbigpLCBjaGlsbERpdihtX3ZhbHVlLCBvdGhlci0+YXNJbnQ2NCgpKSk7
Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0
VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICYgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVl
KiBDb25zdDY0VmFsdWU6OmJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25z
dDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIHwgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZh
bHVlKiBDb25zdDY0VmFsdWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUq
IG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRk
PENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgXiBvdGhlci0+YXNJbnQ2NCgpKTsKIH0K
IAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5o
YXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSA8PCAob3RoZXItPmFzSW50MzIoKSAmIDYz
KSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OnNTaHJDb25zdGFu
dChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAo
IW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSA+PiAob3RoZXItPmFzSW50
MzIoKSAmIDYzKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OnpTaHJDb25zdGFudChQcm9j
ZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OnpT
aHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsK
ICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmFsdWUpID4+IChvdGhlci0+YXNJbnQzMigp
ICYgNjMpKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAg
ICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVl
ID09IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6Om5vdEVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpu
b3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1
cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUg
Q29uc3Q2NFZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0
YXRlIENvbnN0NjRWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQ2NCgp
KTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFu
dChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQo
KSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1f
dmFsdWUgPiBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjps
ZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFs
dWU6Omxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAg
ICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8PSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJp
U3RhdGUgQ29uc3Q2NFZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAg
ICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+PSBv
dGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUNvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJvdmVDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRl
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihv
dGhlci0+YXNJbnQ2NCgpKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YmVsb3dDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93Q29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0
ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92YWx1ZSkgPCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
b3RoZXItPmFzSW50NjQoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlRXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFi
b3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0
dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+PSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ob3RoZXItPmFzSW50NjQoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFs
dWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25z
dDY0VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7
CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2
aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDI1ICs0MiwyNiBAQCBwdWJsaWM6CiAKICAgICBWYWx1
ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGJpdFhvckNv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFs
dWUqIHNobENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgVmFsdWUqIHNTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFZhbHVlKiB6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc1RoYW5Db25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0ZXJUaGFu
Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBsZXNz
RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRl
IGdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
VHJpU3RhdGUgYWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBUcmlTdGF0ZSBhYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJl
JiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogZGl2Q29u
c3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBiaXRYb3JDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZh
bHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBl
cXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJp
U3RhdGUgbm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OworICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQo
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVy
RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRy
aVN0YXRlIGFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1
bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAko
cmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDU2ICs0Nyw2MyBAQCBWYWx1ZSogQ29u
c3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgc3RhdGljX2Nhc3Q8ZG91YmxlPihvdGhl
cikpOwogfQogCi1WYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRk
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIG90
aGVyLT5hc0RvdWJsZSgpKTsKIH0KIAotVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OnN1YkNvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0RG91
YmxlVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgLSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0RG91
YmxlVmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgLyBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6OmVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAg
ICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRy
aVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBj
b25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCiAgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlICE9
IG90aGVyLT5hc0RvdWJsZSgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVz
c1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdERvdWJsZVZh
bHVlOjpsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAg
ICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRy
aVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkp
CiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3Zh
bHVlID4gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
OjpsZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdERv
dWJsZVZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7
CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0
YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDw9IG90aGVyLT5hc0RvdWJsZSgpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlckVxdWFs
Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhh
c0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDE5MjI1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTUgKzQyLDE2IEBAIHB1YmxpYzoKIAogICAgIFZhbHVlKiBuZWdD
b25zdGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBub3RFcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc1RoYW5D
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0
ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0
ZSBsZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRy
aVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBkaXZD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyVGhh
bkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgbGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50
ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiwyMiBAQCBDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQogewogfQogCi12
b2lkIENvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcChjb25zdCBGcmVxdWVudGVkQmxvY2smIGRl
c3RpbmF0aW9uKQorYm9vbCBDb250cm9sVmFsdWU6OnJlcGxhY2VTdWNjZXNzb3IoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yIDogbV9zdWNjZXNzb3JzKSB7CisgICAg
ICAgIGlmIChzdWNjZXNzb3IuYmxvY2soKSA9PSBmcm9tKSB7CisgICAgICAgICAgICBzdWNjZXNz
b3IuYmxvY2soKSA9IHRvOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKworICAgICAgICAg
ICAgLy8gS2VlcCBsb29waW5nIGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgYSBzdWNjZXNzb3IgdG8g
YmUgbWVudGlvbmVkIG11bHRpcGxlIHRpbWVzLAorICAgICAgICAgICAgLy8gbGlrZSBpZiBtdWx0
aXBsZSBzd2l0Y2ggY2FzZXMgaGF2ZSB0aGUgc2FtZSB0YXJnZXQuCisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb0p1
bXAoQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiB7CiAgICAgdW5zaWduZWQgaW5kZXggPSB0aGlz
LT5pbmRleCgpOwogICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsKQEAgLTQ0LDcg
KzU5LDcgQEAgdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb0p1bXAoY29uc3QgRgogCiAgICAg
dGhpcy0+Q29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCk7CiAKLSAgICBuZXcgKHRoaXMpIENv
bnRyb2xWYWx1ZShpbmRleCwgSnVtcCwgb3JpZ2luLCBkZXN0aW5hdGlvbik7CisgICAgbmV3ICh0
aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgRnJlcXVlbnRlZEJsb2NrKGRl
c3RpbmF0aW9uKSk7CiAKICAgICB0aGlzLT5vd25lciA9IG93bmVyOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAgICAgU3VjY2Vzc29yTGlz
dCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQogCisgICAgYm9vbCByZXBs
YWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKwogICAgIGNv
bnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFrZW4oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZSgpID09IEp1bXAgfHwgb3Bjb2RlKCkgPT0gQnJhbmNoKTsKQEAgLTg1LDcgKzg3LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3VjY2Vzc29yKDEpOwogICAgIH0KIAotICAgIHZv
aWQgY29udmVydFRvSnVtcChjb25zdCBGcmVxdWVudGVkQmxvY2smIGRlc3RpbmF0aW9uKTsKKyAg
ICB2b2lkIGNvbnZlcnRUb0p1bXAoQmFzaWNCbG9jayogZGVzdGluYXRpb24pOwogCiBwcm90ZWN0
ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgogI2luY2x1ZGUg
IkIzTG93ZXJUb0Fpci5oIgogI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgogI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCkBAIC02Niw2ICs2Nyw4IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOwogICAgIH0KIAor
ICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7CisKICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1
cmUpOwogICAgIAogICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcg
QEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
azsgfQogICAgIEJhc2ljQmxvY2sqJiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICBG
cmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQor
ICAgIEZyZXF1ZW5jeUNsYXNzJiBmcmVxdWVuY3koKSB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQog
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAxOTIy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMjIgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAorVmFsdWUqIEluc2VydGlvblNldDo6
aW5zZXJ0SW50Q29uc3RhbnQoc2l6ZV90IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUs
IGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGluc2VydFZhbHVlKGluZGV4LCBtX3Byb2Nl
ZHVyZS5hZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUsIHZhbHVlKSk7Cit9CisKK1ZhbHVlKiBJ
bnNlcnRpb25TZXQ6Omluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgVmFsdWUqIGxpa2VW
YWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0SW50Q29uc3RhbnQoaW5k
ZXgsIGxpa2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlwZSgpLCB2YWx1ZSk7Cit9CisK
IHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIGJ1
YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTky
MjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNs
dWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNl
cnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTYyLDYgKzY0LDkgQEAgcHVi
bGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgogICAgIFZhbHVlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKTsKIAorICAgIFZhbHVlKiBpbnNlcnRJbnRDb25zdGFudChzaXplX3QgaW5kZXgsIE9yaWdp
biwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CisgICAgVmFsdWUqIGluc2VydEludENvbnN0YW50KHNp
emVfdCBpbmRleCwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSk7CisKICAgICB2b2lk
IGV4ZWN1dGUoQmFzaWNCbG9jayopOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNp
bmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUu
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlck1hY3JvcyB7CitwdWJs
aWM6CisgICAgTG93ZXJNYWNyb3MoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhw
cm9jKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX2lu
c2VydGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBt
X2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBwcm9jZXNzQ3VycmVudEJsb2NrKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jaGFuZ2VkIHw9IG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgp
OworICAgICAgICBpZiAobV9jaGFuZ2VkKQorICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hh
YmlsaXR5KCk7CisgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIHByb2Nlc3NDdXJyZW50QmxvY2soKQorICAgIHsKKyAgICAgICAgZm9yICht
X2luZGV4ID0gMDsgbV9pbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7CisgICAg
ICAgICAgICBtX3ZhbHVlID0gbV9ibG9jay0+YXQobV9pbmRleCk7CisgICAgICAgICAgICBzd2l0
Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIENoaWxsRGl2OiB7Cisg
ICAgICAgICAgICAgICAgLy8gQVJNIHN1cHBvcnRzIHRoaXMgaW5zdHJ1Y3Rpb24gbmF0aXZlbHku
CisgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgLy8gV2UgaW1wbGVtZW50ICJyZXMgPSBDaGlsbERpdihudW0sIGRlbikiIGFzIGZvbGxvd3M6
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGRlbiArIDEg
PD1fdW5zaWduZWQgMSkgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgaWYgKCFkZW4pIHsK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSAwOworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgIGlmIChudW0gPT0gLTIxNDc0ODM2NDgpIHsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSBudW07CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgIHJlcyA9IG51
bSAvIGRldjsKKyAgICAgICAgICAgICAgICAvLyBkb25lOgorCisgICAgICAgICAgICAgICAgVmFs
dWUqIG51bSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBkZW4g
PSBtX3ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgICAgIFZhbHVlKiBvbmUgPQorICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4
LCBtX3ZhbHVlLCAxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogaXNEZW5PSyA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFib3Zl
LCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPihtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBkZW4sIG9uZSks
CisgICAgICAgICAgICAgICAgICAgIG9uZSk7CisKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBiZWZvcmUgPQorICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0
Rm9yd2FyZChtX2Jsb2NrLCBtX2luZGV4LCAmbV9pbnNlcnRpb25TZXQpOworCisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogbm9ybWFsRGl2Q2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5z
ZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHNoYWR5RGVu
Q2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5p
bnNlcnRCZWZvcmUobV9ibG9jayk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbmVnMURl
bkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBpbnRNaW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5p
bnNlcnRCZWZvcmUobV9ibG9jayk7CisKKyAgICAgICAgICAgICAgICBiZWZvcmUtPnJlcGxhY2VM
YXN0V2l0aE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEJy
YW5jaCwgbV92YWx1ZS0+b3JpZ2luKCksIGlzRGVuT0ssCisgICAgICAgICAgICAgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayhub3JtYWxEaXZDYXNlLCBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKSwKKyAg
ICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHNoYWR5RGVuQ2FzZSwgRnJlcXVlbmN5
Q2xhc3M6OlJhcmUpKTsKKworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogbm9ybWFsUmVz
dWx0ID0gbm9ybWFsRGl2Q2FzZS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAg
IG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBEaXYsIG1fdmFsdWUtPm9y
aWdpbigpLCBudW0sIGRlbikpOworICAgICAgICAgICAgICAgIG5vcm1hbERpdkNhc2UtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEp1bXAsIG1f
dmFsdWUtPm9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobV9ibG9jaykpOworCisgICAgICAgICAg
ICAgICAgc2hhZHlEZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9yaWdpbigpLCBkZW4sCisgICAgICAg
ICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhuZWcxRGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbCksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayh6ZXJvRGVuQ2Fz
ZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1
ZSogemVyb1Jlc3VsdCA9IHplcm9EZW5DYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAg
ICAgICAgICAgICAgICAgICAgbV9wcm9jLCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgemVyb0RlbkNhc2UtPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgbV92YWx1ZSwg
MCkpOworICAgICAgICAgICAgICAgIHplcm9EZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBKdW1wLCBtX3ZhbHVlLT5vcmlnaW4oKSwg
RnJlcXVlbnRlZEJsb2NrKG1fYmxvY2spKTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgYmFk
TnVtZXJhdG9yQ29uc3Q7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBiYWRO
dW1lcmF0b3JDb25zdCA9IC0yMTQ3NDgzNjQ3IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgYmFk
TnVtZXJhdG9yQ29uc3QgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJhZE51bWVy
YXRvckNvbnN0ID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBWYWx1
ZSogYmFkTnVtZXJhdG9yID0KKyAgICAgICAgICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVu
ZEludENvbnN0YW50KG1fcHJvYywgbV92YWx1ZSwgYmFkTnVtZXJhdG9yQ29uc3QpOworCisgICAg
ICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICAgICAgICAgICAgICBtX3Byb2MsIEJyYW5jaCwgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgICAgIG5lZzFEZW5DYXNlLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wcm9jLCBFcXVhbCwgbV92YWx1ZS0+b3JpZ2luKCksIG51bSwgYmFkTnVt
ZXJhdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGludE1pbkNhc2Us
IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJs
b2NrKG5vcm1hbERpdkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpKTsKKworICAgICAgICAg
ICAgICAgIFVwc2lsb25WYWx1ZSogaW50TWluUmVzdWx0ID0gaW50TWluQ2FzZS0+YXBwZW5kTmV3
PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3Jp
Z2luKCksIGJhZE51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgaW50TWluQ2FzZS0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgSnVtcCwgbV92
YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAgICAgICAgICAg
ICAgICBWYWx1ZSogcGhpID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgUGhpLCBtX3ZhbHVlLT50eXBlKCksIG1fdmFsdWUtPm9yaWdp
bigpKTsKKyAgICAgICAgICAgICAgICBub3JtYWxSZXN1bHQtPnNldFBoaShwaGkpOworICAgICAg
ICAgICAgICAgIHplcm9SZXN1bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAgICAgIGludE1p
blJlc3VsdC0+c2V0UGhpKHBoaSk7CisKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNl
V2l0aElkZW50aXR5KHBoaSk7CisgICAgICAgICAgICAgICAgYmVmb3JlLT51cGRhdGVQcmVkZWNl
c3NvcnMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBTd2l0Y2guCisgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMTE1CisKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2NrKTsKKyAgICB9CisgICAgCisg
ICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2Vy
dGlvblNldDsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgQmFzaWNCbG9j
ayogbV9ibG9jazsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlKiBtX3ZhbHVlOwor
ICAgIGJvb2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCitib29sIGxvd2VyTWFjcm9zKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUocHJvYywgImxvd2VyTWFjcm9zIik7CisgICAgTG93ZXJNYWNyb3MgbG93
ZXJNYWNyb3MocHJvYyk7CisgICAgcmV0dXJuIGxvd2VyTWFjcm9zLnJ1bigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzTG93ZXJNYWNyb3NfaAorI2RlZmluZSBCM0xvd2VyTWFjcm9zX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIExvd2VycyBoaWdoLWxldmVsIG9wZXJhdGlvbnMgdGhh
dCBpdCdzIGVhc2llciB0byBkZWFsIHdpdGggb25jZSB0aGV5IGFyZSBicm9rZW4gdXAuIEN1cnJl
bnRseQorLy8gdGhpcyBpbmNsdWRlcyBTd2l0Y2ggYW5kIENoaWxsRGl2LgorCitib29sIGxvd2Vy
TWFjcm9zKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyTWFjcm9zX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5MjI1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjMzLDYgKzEyMzMsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRGl2OiB7CisgICAgICAgICAgICBpZiAoaXNJ
bnQobV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIFRtcCBlYXggPSBUbXAoWDg2
UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAgICAgICAgIFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0
ZXJzOjplZHgpOworCisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgY29udmVydFRvRG91Ymxl
V29yZDsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBkaXY7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91
YmxlV29yZDMyOworICAgICAgICAgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQ2
NDsKKyAgICAgICAgICAgICAgICAgICAgZGl2ID0gWDg2RGl2NjQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgwKSksIGVheCk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4KTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKE1vdmUsIGVheCwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IGRvdWJsZXMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwOTkxCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBCaXRBbmQ6
IHsKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBBbmQ2NCwgQWlyOjpPb3BzLCBDb21t
dXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNo
aWxkKDEpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAx
OTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIEFkZCwK
ICAgICBTdWIsCiAgICAgTXVsLAotICAgIERpdiwKKyAgICBEaXYsIC8vIEFsbCBiZXRzIGFyZSBv
ZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3aGVuIHlvdSBleGVjdXRlIHRoaXMgZm9yIC0yXjMx
Ly0xIGFuZCB4LzAuCiAKICAgICAvLyBJbnRlZ2VyIG1hdGguCiAgICAgQ2hpbGxEaXYsIC8vIGRv
ZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsMjIgKzU1LDI3IEBAIEJhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGYK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WYWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFu
dChUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCitWYWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25z
dGFudChPcmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCiB7CiAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgcmV0dXJuIGFkZDxDb25zdDMy
VmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1
ZSkpOwogICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgIHJldHVybiBhZGQ8Q29uc3Q2NFZhbHVlPihP
cmlnaW4oKSwgdmFsdWUpOworICAgICAgICByZXR1cm4gYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2lu
LCB2YWx1ZSk7CiAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgIHJldHVybiBhZGQ8Q29uc3REb3Vi
bGVWYWx1ZT4oT3JpZ2luKCksIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIGFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4sIHN0YXRpY19jYXN0PGRvdWJsZT4o
dmFsdWUpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CiAKLVZhbHVlKiBQcm9jZWR1
cmU6OmFkZEJvb2xDb25zdGFudChUcmlTdGF0ZSB0cmlTdGF0ZSkKK1ZhbHVlKiBQcm9jZWR1cmU6
OmFkZEludENvbnN0YW50KFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3QgdmFsdWUpCit7CisgICAg
cmV0dXJuIGFkZEludENvbnN0YW50KGxpa2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlw
ZSgpLCB2YWx1ZSk7Cit9CisKK1ZhbHVlKiBQcm9jZWR1cmU6OmFkZEJvb2xDb25zdGFudChPcmln
aW4gb3JpZ2luLCBUcmlTdGF0ZSB0cmlTdGF0ZSkKIHsKICAgICBpbnQzMl90IHZhbHVlID0gMDsK
ICAgICBzd2l0Y2ggKHRyaVN0YXRlKSB7CkBAIC04NCw3ICs4OSw3IEBAIFZhbHVlKiBQcm9jZWR1
cmU6OmFkZEJvb2xDb25zdGFudChUcmlTdGEKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgcmV0dXJuIGFkZEludENvbnN0YW50KEludDMyLCB2YWx1ZSk7CisgICAgcmV0dXJu
IGFkZEludENvbnN0YW50KG9yaWdpbiwgSW50MzIsIHZhbHVlKTsKIH0KIAogdm9pZCBQcm9jZWR1
cmU6OnJlc2V0VmFsdWVPd25lcnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1R5cGUuaCIK
ICNpbmNsdWRlICJQdXJlTmFOLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtNDAsNiArNDEs
NyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7
CitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIE9wYXF1ZUJ5cHJvZHVjdHM7CiBjbGFz
cyBWYWx1ZTsKIApAQCAtNTYsMTAgKzU4LDExIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFk
ZChBcmd1bWVudHMuLi4pOwogCi0gICAgVmFsdWUqIGFkZEludENvbnN0YW50KFR5cGUsIGludDY0
X3QgdmFsdWUpOworICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChPcmlnaW4sIFR5cGUsIGludDY0
X3QgdmFsdWUpOworICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChWYWx1ZSosIGludDY0X3QgdmFs
dWUpOwogCiAgICAgLy8gUmV0dXJucyBudWxsIGZvciBNaXhlZFRyaVN0YXRlLgotICAgIFZhbHVl
KiBhZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUpOworICAgIFZhbHVlKiBhZGRCb29sQ29uc3RhbnQo
T3JpZ2luLCBUcmlTdGF0ZSk7CiAKICAgICB2b2lkIHJlc2V0VmFsdWVPd25lcnMoKTsKICAgICB2
b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CkBAIC0yMTYsNiArMjE5LDggQEAgcHVibGljOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiB0YWtlQnlwcm9kdWN0cygpIHsgcmV0
dXJuIFdURjo6bW92ZShtX2J5cHJvZHVjdHMpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0OworICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBhZGRWYWx1ZUluZGV4KCk7CiAgICAgCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNp
Y0Jsb2NrPj4gbV9ibG9ja3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1
Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsx
ODYsMTYgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBE
aXY6CisgICAgICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERp
dihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3Rh
bnQxIC8gY29uc3RhbnQyCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB1c2VzIENoaWxs
RGl2IHNlbWFudGljcy4gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhlIHJ1bGVzIGZvciBEaXYKKyAg
ICAgICAgICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6IGl0IGhhcyBjb3JuZXIgY2FzZXMgd2hl
cmUgaXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0CisgICAgICAgICAgICAvLyBsaWtlcy4K
KyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmRpdkNv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CiAgICAgICAgIGNhc2UgQml0QW5kOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgp
OwogCkBAIC0zMTgsNyArMzI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQml0WG9yKHZhbHVlWCwgdmFsdWVYKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJv
LWNvbnN0YW50LgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUt
PmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2Mu
YWRkSW50Q29uc3RhbnQobV92YWx1ZS0+dHlwZSgpLCAwKSk7CisgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgMCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC00NDYsNyArNDU2LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIp
CiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+ZXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkp
KTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5vdEVxdWFsOgpAQCAtNDczLDcg
KzQ4NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNv
bnN0MSwgY29uc3QyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgIT0gY29uc3Qy
CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJv
Yy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPm5vdEVxdWFsQ29uc3RhbnQobV92
YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFu
dCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5ub3RFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBMZXNzVGhhbjoKQEAg
LTQ4MSw0MiArNDk1LDU4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTU4CiAKICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3Zh
bHVlLT5jaGlsZCgwKS0+bGVzc1RoYW5Db25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAg
ICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQo
MCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgogICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFs
dWUtPmNoaWxkKDApLT5ncmVhdGVyVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwor
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgogICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsK
KyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCktPmxlc3NFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHcmVhdGVyRXF1YWw6CiAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQo
bV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEp
KSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKS0+Z3JlYXRlckVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFib3ZlOgogICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDApLT5hYm92ZUNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwor
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKS0+YWJvdmVDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgQmVsb3c6CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMCktPmJlbG93Q29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5iZWxvd0Nv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBBYm92ZUVxdWFsOgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAg
ICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5h
Ym92ZUVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAg
bV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5hYm92ZUVxdWFs
Q29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAot
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCkt
PmJlbG93RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAg
ICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5v
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93RXF1
YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgQnJhbmNoOiB7CkBAIC01NTMsNyArNTgzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogSnVtcChlbHNlKQogICAgICAgICAgICAgaWYgKHRyaVN0YXRl
ID09IEZhbHNlVHJpU3RhdGUpIHsKICAgICAgICAgICAgICAgICBicmFuY2gtPnRha2VuKCkuYmxv
Y2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IobV9ibG9jayk7Ci0gICAgICAgICAgICAgICAgYnJhbmNo
LT5jb252ZXJ0VG9KdW1wKGJyYW5jaC0+bm90VGFrZW4oKSk7CisgICAgICAgICAgICAgICAgYnJh
bmNoLT5jb252ZXJ0VG9KdW1wKGJyYW5jaC0+bm90VGFrZW4oKS5ibG9jaygpKTsKICAgICAgICAg
ICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpAQCAtNTYyLDcgKzU5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEp1bXAodGhlbikKICAgICAgICAgICAgIGlmICh0cmlTdGF0ZSA9PSBUcnVlVHJp
U3RhdGUpIHsKICAgICAgICAgICAgICAgICBicmFuY2gtPm5vdFRha2VuKCkuYmxvY2soKS0+cmVt
b3ZlUHJlZGVjZXNzb3IobV9ibG9jayk7Ci0gICAgICAgICAgICAgICAgYnJhbmNoLT5jb252ZXJ0
VG9KdW1wKGJyYW5jaC0+dGFrZW4oKSk7CisgICAgICAgICAgICAgICAgYnJhbmNoLT5jb252ZXJ0
VG9KdW1wKGJyYW5jaC0+dGFrZW4oKS5ibG9jaygpKTsKICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWRDRkcgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
NjMxLDYgKzY2MSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzaW1wbGlmeUNGRygpCiAgICAg
eworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlIHNp
bXBsaWZ5Q0ZHOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fcHJvYyk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgdGhyZWUgZWFzeSBzaW1wbGlmaWNhdGlvbiBy
dWxlczoKICAgICAgICAgLy8KICAgICAgICAgLy8gMSkgSWYgYSBzdWNjZXNzb3IgaXMgYSBibG9j
ayB0aGF0IGp1c3QganVtcHMgdG8gYW5vdGhlciBibG9jaywgdGhlbiBqdW1wIGRpcmVjdGx5IHRv
CkBAIC02NTEsNiArNjg2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaXRlcmF0aW9ucyBuZWVk
ZWQgdG8ga2lsbCBhIGxvdCBvZiBjb2RlLgogCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIkNvbnNpZGVyaW5nIGJsb2NrICIsICpibG9jaywgIjpcbiIpOworCiAgICAgICAg
ICAgICBjaGVja1ByZWRlY2Vzc29yVmFsaWRpdHkoKTsKIAogICAgICAgICAgICAgLy8gV2UgZG9u
J3QgY2FyZSBhYm91dCBibG9ja3MgdGhhdCBkb24ndCBoYXZlIHN1Y2Nlc3NvcnMuCkBAIC02NjQs
NyArNzAyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+
bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKSB7CiAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIG5ld1N1Y2Nlc3NvciA9IHN1Y2Nlc3Nvci0+c3VjY2Vzc29yQmxvY2soMCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChuZXdTdWNjZXNzb3IgIT0gc3VjY2Vzc29yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBuZXdTdWNjZXNzb3ItPnJlcGxhY2VQcmVkZWNlc3NvcihzdWNjZXNzb3Is
IGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlJlcGxhY2luZyAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1w
KHN1Y2Nlc3NvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd2l0aCAiLCBw
b2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKG5ld1N1Y2Nlc3NvciksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBkbyBy
ZXBsYWNlUHJlZGVjZXNzb3IoKSBiZWNhdXNlIHRoZSBibG9jayB3ZSdyZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2tpcHBpbmcgd2lsbCBzdGlsbCBoYXZlIG5ld1N1Y2Nlc3NvciBhcyBp
dHMgc3VjY2Vzc29yLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5hZGRQ
cmVkZWNlc3NvcihibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3IgPSBu
ZXdTdWNjZXNzb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02NzksMTQgKzcyNSwxOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGlmICghZWZmZWN0cy5tdXN0RXhlY3V0ZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIEFsbCBvZiB0aGUgc3VjY2Vzc29ycyBtdXN0IGJlIHRoZSBzYW1lLgogICAg
ICAgICAgICAgICAgICAgICBib29sIGFsbFNhbWUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBGcmVxdWVudGVkQmxvY2sgZmlyc3RTdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKDApOwor
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdFN1Y2Nlc3NvciA9IGJsb2NrLT5z
dWNjZXNzb3JCbG9jaygwKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSAhPSBmaXJzdFN1Y2Nlc3Nvci5ibG9j
aygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
KGkpICE9IGZpcnN0U3VjY2Vzc29yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
U2FtZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxTYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJDaGFuZ2luZyAiLCBwb2ludGVyRHVtcChibG9jayksICIncyB0
ZXJtaW5hbCB0byBhIEp1bXAuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+Y29u
dmVydFRvSnVtcChmaXJzdFN1Y2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWRDRkcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC03MTksNiArNzY5LDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHByZWRlY2Vz
c29ycyBvZiBibG9jaydzIG5ldyBzdWNjZXNzb3JzIGtub3cgd2hhdCdzIHVwLgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIG5ld1N1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N1Y2Nlc3Nvci0+cmVwbGFj
ZVByZWRlY2Vzc29yKHN1Y2Nlc3NvciwgYmxvY2spOworCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJNZXJnZWQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBw
b2ludGVyRHVtcChzdWNjZXNzb3IpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDggKzgw
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
dmFsdWVJblByb2MpIHsKLSAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNo
aWxkcmVuKCkpCisgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJl
bigpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoY2hpbGQsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAo
IkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBIYXNoU2V0PEJhc2lj
QmxvY2sqPj4gYWxsUHJlZGVjZXNzb3JzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOTIgKzEyNCw5NyBAQCBWYWx1ZSogVmFs
dWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYsIGluCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LVZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFs
dWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6c3ViQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1
cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZh
bHVlKiBWYWx1ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFs
dWUqIFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0T3JDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmJpdEFuZENvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotVmFsdWUqIFZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0
CitWYWx1ZSogVmFsdWU6OmJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBj
b25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OnNobENvbnN0
YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6Yml0WG9yQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1WYWx1ZSogVmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNv
bnN0CitWYWx1ZSogVmFsdWU6OnNobENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikg
Y29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjp6U2hyQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpzU2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0CitWYWx1
ZSogVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0Cit7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RyaVN0YXRlIFZhbHVlOjplcXVhbENvbnN0YW50
KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAot
VHJpU3RhdGUgVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUg
VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVy
biBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChW
YWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChjb25zdCBWYWx1
ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZh
bHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjpn
cmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KFZhbHVl
KikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSop
IGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVl
OjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSopIGNv
bnN0CitUcmlTdGF0ZSBWYWx1ZTo6YWJvdmVDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7
CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpiZWxvd0Nv
bnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0
IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3Rh
dGUgVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1
ZTo6YWJvdmVFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChW
YWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50KGNvbnN0IFZh
bHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDI1ICsxMTEsMjYg
QEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVy
ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGlu
dDMyX3Qgb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIGFkZENvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogc3ViQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBi
aXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1
YWwgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHNobENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogc1NockNvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogelNockNvbnN0
YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSog
YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7IC8vIFRoaXMgY2hvb3NlcyBDaGlsbERpdiBzZW1hbnRpY3Mg
Zm9yIGludGVnZXJzLgorICAgIHZpcnR1YWwgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogYml0T3JD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiB6
U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICAK
LSAgICB2aXJ0dWFsIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVFcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBiZWxvd0Vx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGVx
dWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0
YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyRXF1YWxD
b25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUg
YWJvdmVDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJp
U3RhdGUgYmVsb3dDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7
CisgICAgdmlydHVhbCBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdDsKIAogICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIGNvbXBhcmlzb24gdGhlbiB0
aGlzIHJldHVybnMgdGhlIGludmVydGVkIGZvcm0gb2YgdGhhdCBjb21wYXJpc29uLCBpZgogICAg
IC8vIHBvc3NpYmxlLiBJdCBjYW4gYmUgaW1wb3NzaWJsZSBmb3IgZG91YmxlIGNvbXBhcmlzb25z
LCB3aGVyZSBmb3IgZXhhbXBsZSBMZXNzVGhhbiBhbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzNiw2ICsyODM2LDEwOCBAQCB2b2lk
IHRlc3RDYWxsRnVuY3Rpb25XaXRoSGVsbGFEb3VibGVBcmd1CiAgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxkb3VibGU+KHByb2MpID09IGZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndW1lbnRzKDEs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNikpOwogfQogCit2b2lkIHRlc3RDaGls
bERpdihpbnQgbnVtLCBpbnQgZGVuLCBpbnQgcmVzKQoreworICAgIC8vIFRlc3Qgbm9uLWNvbnN0
YW50LgorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2Ms
IENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKSk7CisKKyAgICAgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIG51bSwgZGVuKSA9PSByZXMpOworICAgIH0KKwor
ICAgIC8vIFRlc3QgY29uc3RhbnQuCisgICAgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBudW0pLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBk
ZW4pKSk7CisgICAgICAgIAorICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykg
PT0gcmVzKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdENoaWxsRGl2VHdpY2UoaW50IG51bTEsIGlu
dCBkZW4xLCBpbnQgbnVtMiwgaW50IGRlbjIsIGludCByZXMpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRk
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9j
LCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpKSkpKTsKKyAgICAKKyAgICBD
SEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbnVtMSwgZGVuMSwgbnVtMiwgZGVuMikgPT0g
cmVzKTsKK30KKwordm9pZCB0ZXN0Q2hpbGxEaXY2NChpbnQ2NF90IG51bSwgaW50NjRfdCBkZW4s
IGludDY0X3QgcmVzKQoreworICAgIGlmICghaXM2NEJpdCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBUZXN0IG5vbi1jb25zdGFudC4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOwor
ICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBudW0s
IGRlbikgPT0gcmVzKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGNvbnN0YW50LgorICAgIHsKKyAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgbnVtKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgZGVuKSkpOworICAgICAgICAKKyAgICAgICAgQ0hFQ0so
Y29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKSA9PSByZXMpOworICAgIH0KK30KKwogI2RlZmlu
ZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAo
IXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzMxMiw2ICszNDE0LDI2IEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdENhbGxTaW1wbGVEb3VibGUo
MSwgMikpOwogICAgIFJVTih0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndW1lbnRz
KCkpOwogCisgICAgUlVOKHRlc3RDaGlsbERpdig0LCAyLCAyKSk7CisgICAgUlVOKHRlc3RDaGls
bERpdigxLCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigwLCAwLCAwKSk7CisgICAgUlVO
KHRlc3RDaGlsbERpdigxLCAtMSwgLTEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2KC0yMTQ3NDgz
NjQ3IC0gMSwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoLTIxNDc0ODM2NDcgLSAxLCAx
LCAtMjE0NzQ4MzY0NyAtIDEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2KC0yMTQ3NDgzNjQ3IC0g
MSwgLTEsIC0yMTQ3NDgzNjQ3IC0gMSkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoLTIxNDc0ODM2
NDcgLSAxLCAyLCAtMTA3Mzc0MTgyNCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXY2NCg0LCAyLCAy
KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KDEsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxs
RGl2NjQoMCwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXY2NCgxLCAtMSwgLTEpKTsKKyAg
ICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAtIDEsIDAsIDApKTsK
KyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAtIDEsIDEsIC05
MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIz
MzcyMDM2ODU0Nzc1ODA3bGwgLSAxLCAtMSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAtIDEpKTsK
KyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAtIDEsIDIsIC00
NjExNjg2MDE4NDI3Mzg3OTA0KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdlR3aWNlKDQsIDIsIDYs
IDIsIDUpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2VHdpY2UoNCwgMCwgNiwgMiwgMykpOworICAg
IFJVTih0ZXN0Q2hpbGxEaXZUd2ljZSg0LCAyLCA2LCAwLCAyKSk7CisKICAgICBpZiAodGFza3Mu
aXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMSw2ICsxMjEsNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYg
CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBibG9ja0p1
bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBibG9ja0xhYmVsc1tibG9ja10gPSBqaXQu
bGFiZWwoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQs
IGNvbnRleHQpOwpAQCAtMTQwLDggKzE0MSw2IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwg
Q0NhbGxIZWxwZXJzJiAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7Ci0gICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKLSAgICAgICAgICAgIGp1bXAgPSBpbnN0Lmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CiAgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKSkgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5l
cy5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsMzYgQEAgaW5saW5l
IGJvb2wgaXNVcnNoaWZ0NjRWYWxpZChjb25zdCBJbnN0JgogICAgIHJldHVybiBpc1NoaWZ0VmFs
aWQoaW5zdCk7CiB9CiAKK2lubGluZSBib29sIGlzWDg2RGl2SGVscGVyVmFsaWQoY29uc3QgSW5z
dCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIHJldHVybiBpbnN0
LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAmJiBpbnN0LmFyZ3Nb
MV0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKK2lubGluZSBib29sIGlzWDg2Q29udmVydFRvRG91YmxlV29yZDMyVmFsaWQo
Y29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNYODZEaXZIZWxwZXJWYWxpZChpbnN0
KTsKK30KKworaW5saW5lIGJvb2wgaXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZChjb25z
dCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOwor
fQorCitpbmxpbmUgYm9vbCBpc1g4NkRpdjMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAg
ICByZXR1cm4gaXNYODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNY
ODZEaXY2NFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVs
cGVyVmFsaWQoaW5zdCk7Cit9CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDYgKzk2LDIyIEBAIE5lZzMyIFVEOkcKIE5lZzY0IFVEOkcKICAgICBUbXAKIAorTXVsMzIg
VTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworWDg2Q29udmVydFRvRG91
YmxlV29yZDMyIFU6RywgRDpHCisgICAgVG1wKiwgVG1wKgorCitYODZDb252ZXJ0VG9Eb3VibGVX
b3JkNjQgVTpHLCBEOkcKKyAgICBUbXAqLCBUbXAqCisKK1g4NkRpdjMyIFVEOkcsIFVEOkcsIFU6
RworICAgIFRtcCosIFRtcCosIFRtcAorCitYODZEaXY2NCBVRDpHLCBVRDpHLCBVOkcKKyAgICBU
bXAqLCBUbXAqLCBUbXAKKwogTGVhIFVBOkcsIEQ6RwogICAgIEFkZHIsIFRtcAogCkBAIC0xNTcs
MTAgKzE3Myw2IEBAIFhvcjY0IFU6RywgVUQ6RwogICAgIFRtcCwgQWRkcgogICAgIEltbSwgVG1w
CiAKLU11bDMyIFU6RywgVUQ6RwotICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wCi0KICMgTm90
ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBp
cyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KICMgdGhlIHBsYXRmb3JtLiBJ
J20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQg
YmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCiAjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3Vy
IE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhh
dCBiYXNpY2FsbHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2ltcGxp
ZnlDRkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U2ltcGxpZnlDRkcuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
OSBAQCBib29sIHNpbXBsaWZ5Q0ZHKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVy
RHVtcChzdWNjZXNzb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdpdGgg
IiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChuZXdTdWNjZXNzb3IpLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1N1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKHN1Y2Nlc3NvciwgYmxvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBkbyByZXBsYWNlUHJl
ZGVjZXNzb3IoKSBiZWNhdXNlIHRoZSBibG9jayB3ZSdyZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc2tpcHBpbmcgd2lsbCBzdGlsbCBoYXZlIG5ld1N1Y2Nlc3NvciBhcyBpdHMgc3VjY2Vz
c29yLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5hZGRQcmVkZWNlc3Nv
cihibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3IgPSBuZXdTdWNjZXNz
b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMTEyLDYgKzExNCw3IEBAIGJvb2wgc2ltcGxpZnlDRkcoQ29kZSYgY29k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDaGFuZ2luZyAiLCBwb2lu
dGVyRHVtcChibG9jayksICIncyB0ZXJtaW5hbCB0byBhIEp1bXAuXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkgPSBJbnN0KEp1bXAsIGJsb2NrLT5sYXN0KCkub3Jp
Z2luKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkucmVzaXpl
KDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKVswXS5mcmVx
dWVuY3koKSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxv
Y2s+KTsKICAgICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRp
b25Db3VudCk7CiAgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9y
ZSwgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRlKCk7CiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOTksOCArMzM5
OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3ByKCkpOwot
ICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVy
KCkuaWRpdmxfcihvcDJHUFIpOworICAgICAgICBtX2ppdC54ODZDb252ZXJ0VG9Eb3VibGVXb3Jk
MzIoKTsKKyAgICAgICAgbV9qaXQueDg2RGl2MzIob3AyR1BSKTsKICAgICAgICAgICAgIAogICAg
ICAgICBpZiAob3AyVGVtcEdQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgdW5sb2Nr
KG9wMlRlbXBHUFIpOwpAQCAtMzU1NSw4ICszNTU1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoTW9kKE5vZAogCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHcHIs
IGVheC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGl2
aXNvciksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmNk
cSgpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQueDg2RGl2MzIoc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIs
IFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxl
cjo6WmVybywgZWR4LmdwcigpKSk7CkBAIC0zNjQ2LDggKzM2NDYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgZWF4LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYXNzZW1i
bGVyKCkuY2RxKCk7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Iob3AyR1BSKTsK
KyAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAgIG1faml0
Lng4NkRpdjMyKG9wMkdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKG9wMlRlbXBHUFIg
IT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJ
KHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDggKzg1OCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBKdW1wIGRlbm9taW5hdG9yTm90
TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKC0xKSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2
NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKLSAgICBtX2Fzc2Vt
Ymxlci5jZHEoKTsKLSAgICBtX2Fzc2VtYmxlci5pZGl2bF9yKHJlZ1QyKTsKKyAgICB4ODZDb252
ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICB4ODZEaXYzMihyZWdUMik7CiAgICAgSnVtcCBudW1l
cmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKSk7
CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIzLDggKzYyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3Vy
cmUKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gs
IFRydXN0ZWRJbW0zMigtMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcx
LmxpbmsodGhpcyk7Ci0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJsZXIuaWRp
dmxfcihlY3gpOworICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIHg4NkRpdjMy
KGVjeCk7CiAgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNvbXBp
bGVyLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvbkNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2Myw4ICs3NjMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOwogICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgWDg2UmVnaXN0ZXJzOjpl
Y3gpOwogICAgICAgICAgICAgaWYgKG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlNEaXYgfHwg
b3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01vZCkgewotICAgICAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNkcSgpOwotICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3IoWDg2UmVn
aXN0ZXJzOjplY3gpOworICAgICAgICAgICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigp
OworICAgICAgICAgICAgICAgIHg4NkRpdjMyKFg4NlJlZ2lzdGVyczo6ZWN4KTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IFdBU01PcEV4cHJlc3Np
b25JMzI6OlVEaXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1vZCk7CiAgICAgICAg
ICAgICAgICAgeG9yMzIoWDg2UmVnaXN0ZXJzOjplZHgsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTExLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBhIHByb2dy
YW0gd2l0aCBDaGlsbERpdgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTmVlZGVkIHRvIGJlZWYgdXAgc29tZSBjb21waWxlciBhbGdvcml0aG1zLiBBbGwg
b2YgdGhlIGhhcmRlbmluZyB3YXMgYWJvdXQgbWFraW5nIHRoZW0KKyAgICAgICAgd29yayB3aXRo
IG9iamVjdHMgdGhhdCBoYXZlIG1vdmUgc2VtYW50aWNzIGJ1dCBub3QgY29weSBzZW1hbnRpY3Mu
IFRoaXMgYXJpc2VzIGluIEIzCisgICAgICAgIGJhc2ljIGJsb2NrIGluc2VydGlvbiBzZXRzLgor
CisgICAgICAgICogd3RmL0J1YmJsZVNvcnQuaDoKKyAgICAgICAgKFdURjo6YnViYmxlU29ydCk6
CisgICAgICAgICogd3RmL0luc2VydGlvbi5oOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246Oklu
c2VydGlvbik6CisgICAgICAgIChXVEY6Okluc2VydGlvbjo6aW5kZXgpOgorICAgICAgICAoV1RG
OjpJbnNlcnRpb246OmVsZW1lbnQpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246Om9wZXJhdG9y
PCk6CisgICAgICAgIChXVEY6OmV4ZWN1dGVJbnNlcnRpb25zKToKKwogMjAxNS0xMS0xMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
VXNlIENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J1
YmJsZVNvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CdWJibGVTb3J0LmgJKHJl
dmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9XVEYvd3RmL0J1YmJsZVNvcnQuaAkod29ya2luZyBj
b3B5KQpAQCAtODksOCArODksOCBAQCB2b2lkIGJ1YmJsZVNvcnQoSXRlcmF0b3JUeXBlIGJlZ2lu
LCBJdGVyCiB7CiAgICAgYnViYmxlU29ydCgKICAgICAgICAgYmVnaW4sIGVuZCwKLSAgICAgICAg
W10gKHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5
cGUgbGVmdCwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJh
dG9yVHlwZT46OnZhbHVlX3R5cGUgcmlnaHQpIC0+IGJvb2wgeworICAgICAgICBbXSAoY29uc3Qg
dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3JUeXBlPjo6dmFsdWVfdHlwZSYg
bGVmdCwKKyAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0
ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUmIHJpZ2h0KSAtPiBib29sIHsKICAgICAgICAgICAgIHJl
dHVybiBsZWZ0IDwgcmlnaHQ7CiAgICAgICAgIH0pOwogfQpJbmRleDogU291cmNlL1dURi93dGYv
SW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJl
dmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxNSArMzIsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIEluc2Vy
dGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9u
KHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBVJiYgZWxlbWVudCkKICAgICAgICAgOiBtX2luZGV4
KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICAgICAsIG1fZWxlbWVu
dChzdGQ6OmZvcndhcmQ8VT4oZWxlbWVudCkpCiAgICAgewogICAgIH0KICAgICAKICAgICBzaXpl
X3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgVCBlbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgY29uc3QgVCYgZWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudDsgfQorICAgIFQmIGVsZW1lbnQoKSB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnNlcnRpb24mIG90aGVyKSBjb25z
dAogICAgIHsKQEAgLTY2LDggKzY4LDggQEAgdm9pZCBleGVjdXRlSW5zZXJ0aW9ucyhUYXJnZXRW
ZWN0b3JUeXBlJgogICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJ
bkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAgICAgc2l6ZV90
IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKLSAgICAgICAgICAgIHRhcmdldFtp
XSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOwotICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0g
PSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAgICAgICB0
YXJnZXRbaV0gPSBXVEY6Om1vdmUodGFyZ2V0W2kgLSBpbmRleE9mZnNldF0pOworICAgICAgICB0
YXJnZXRbZmlyc3RJbmRleF0gPSBXVEY6Om1vdmUoaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9u
c10uZWxlbWVudCgpKTsKICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKICAgICB9CiAg
ICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265251</attachid>
            <date>2015-11-10 17:09:19 -0800</date>
            <delta_ts>2015-11-10 17:42:20 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>110849</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNSBA
QAorMjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggQ2hpbGxEaXYKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGlzIGFib3V0IGEgbG90IG1vcmUgdGhhbiBDaGlsbERpdi4gSSBwaWNrZWQgdGhhdCBhcyB0aGUg
bmV4dCB0aGluZyB0byBsb3dlcgorICAgICAgICBiZWNhdXNlIEkga25ldyB0aGF0IGl0IHdvdWxk
IGZvcmNlIG1lIHRvIGNvbWUgdXAgd2l0aCBhIHNlbnNpYmxlIGlkaW9tIGZvciBkb2luZworICAg
ICAgICBzdGVwd2lzZSBsb3dlcmluZ3MgdGhhdCByZXF1aXJlIGJyZWFraW5nIGJhc2ljIGJsb2Nr
cy4gVGhlIGlkZWEgaXMgdGhhdCB5b3Ugd2FudCB0bworICAgICAgICB3cml0ZSBhIGxvb3AgdGhh
dCBpdGVyYXRlcyBmb3J3YXJkIG92ZXIgdGhlIHByb2dyYW0sIHdoaWNoIHR1cm5zIHNvbWUgb3Bl
cmF0aW9ucyB0aGF0CisgICAgICAgIGN1cnJlbnRseSBhcmUganVzdCBzaW5nbGUgVmFsdWVzIGlu
dG8gYW4gZW50aXJlIGxpdHRsZSBzdWItQ0ZHcy4gVGhhdCByZXF1aXJlcyBzcGxpdHRpbmcKKyAg
ICAgICAgdGhlIGJsb2NrIHRoYXQgY29udGFpbmVkIHRoZSBvcmlnaW5hbCBWYWx1ZS4gVGhhdCdz
IHRyaWNreSBpZiB5b3UgdGhlbiB3YW50IHRvIGtlZXAKKyAgICAgICAgaXRlcmF0aW5nOiB0aGUg
aW5kZXggb2YgdGhlIFZhbHVlIHlvdSB3ZXJlIGxhc3QgbG9va2luZyBhdCBoYXMgbm93IGNoYW5n
ZWQgYW5kIHlvdXIKKyAgICAgICAgSW5zZXJ0aW9uU2V0cyBhcmUgbm93IGludmFsaWQuCisKKyAg
ICAgICAgVGhpcyBpbnRyb2R1Y2VzIGFuIGlkaW9tIHRoYXQgaGFuZGxlcyB0aGlzLiBJdCdzIEJs
b2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEJlZm9yZSgpLiBUaGUKKyAgICAgICAgaWRlYSBpcyB0aGF0
IGl0IHVzZXMgdGhlIGN1cnJlbnQgYmxvY2sgYmVmb3JlIHRoZSBzcGxpdCBhcyB0aGUgY29udGlu
dWF0aW9uIGFmdGVyIHRoZQorICAgICAgICBzcGxpdC4gV2hlbiB5b3UgY2FsbCBzcGxpdEJlZm9y
ZSgpLCB5b3UgcGFzcyBpdCB5b3VyIGxvb3AgaW5kZXggYW5kIHlvdXIgSW5zZXJ0aW9uU2V0Cisg
ICAgICAgIChpZiBhcHBsaWNhYmxlKS4gSXQgbWFrZXMgc3VyZSB0aGF0IGl0IGNoYW5nZXMgdGhv
c2UgYXV4aWxpYXJ5IHRoaW5ncyBpbiBzdWNoIGEgd2F5IHRoYXQKKyAgICAgICAgeW91IGNhbiBr
ZWVwIGxvb3BpbmcuCisKKyAgICAgICAgVGhpcyB1bmNvdmVyZWQgc29tZSBidWdzLCBzaW5jZSB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgd2UncmUgY29tcGlsaW5nIGNyb3NzIGVkZ2VzLgor
CisgICAgICAgIEJlY2F1c2UgQ2hpbGxEaXYgaXMgcmVhbGx5IGEgZGl2aXNpb24sIEkgYWxzbyBo
YWQgdG8gd3JpdGUgYSBidW5jaCBvZiBjb2RlIHRvIHN1cHBvcnQKKyAgICAgICAgdGhlIG9yZGlu
YXJ5IEIzIERpdi4gV2hpbGUgZG9pbmcgdGhhdCwgSSByZWFsaXplZCB0aGF0IHRoZXJlIHdhcyBh
c3ltbWV0cnkgdG8gdGhhdAorICAgICAgICBjb25zdG5lc3Mgb2YgdGhlIFZhbHVlIGNvbnN0YW50
IGZvbGRpbmcgbWV0aG9kcywgc28gSSBmaXhlZCB0aGF0IGFzIHdlbGwuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6eDg2Q29udmVydFRvRG91YmxlV29yZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246Ong4NkRpdjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Om5lZzMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om11bDY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Ong4NkNvbnZlcnRUb0RvdWJsZVdvcmQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4ODZEaXY2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgICogYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZsX3IpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZxX3IpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OmNtcGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNkcSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y2RxcSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6ZnN0cHMpOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6cmVwbGFjZUxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6YXBwZW5kSW50
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVwbGFjZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6dXBkYXRlUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
QjM6OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5oOgorICAg
ICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJh
c2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2Nr
OjpwcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpmcmVxdWVuY3kp
OgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZXBsYWNlTGFzdFdpdGhOZXcpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3Vj
Y2Vzc29ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjp1cGRhdGVQcmVk
ZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAg
ICAqIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIz
OjpCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6
QjM6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpCMzo6QmxvY2tJ
bnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChKU0M6OkIzOjpCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkJsb2NrSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkIzOjppc1JlcHJlc2Vu
dGFibGVBcyk6CisgICAgICAgIChKU0M6OkIzOjpjaGlsbERpdik6CisgICAgICAgICogYjMvQjND
b25zdDMyVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdDMyVmFsdWU6OmJpdE9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZh
bHVlOjpiaXRYb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnNo
bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6c1NockNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
Q29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMy
VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1
ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dCk6CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0
NjRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkaXZDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmJpdFhvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c2hsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6
OkNvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDY0VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZh
bHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1
ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpn
cmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFi
b3ZlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50KToK
KyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKiBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjpyZXBsYWNlU3VjY2Vzc29yKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAgICogYjMv
QjNDb250cm9sVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6Ymxv
Y2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6ZnJlcXVlbmN5
KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlv
blNldDo6aW5zZXJ0SW50Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0
OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOgorICAgICAgICAqIGIz
L0IzTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omxvd2VyTWFjcm9z
KToKKyAgICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2Vy
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmFkZEJvb2xDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnJl
c2V0VmFsdWVPd25lcnMpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OnRha2VCeXByb2R1Y3RzKToKKyAgICAgICAgKiBiMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBi
My9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphZGRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiaXRBbmRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Yml0WG9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnNobENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzU2hyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnpTaHJDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bm90
RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc1RoYW5Db25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6CisgICAgICAgICogYjMvQjNW
YWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNVcnNoaWZ0NjRWYWxpZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmlzWDg2RGl2SGVscGVyVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpp
c1g4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMlZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
aXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmlzWDg2RGl2MzJWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzWDg2RGl2NjRWYWxp
ZCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNpbXBsaWZ5Q0ZH
KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2VHdpY2UpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2NjQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhEaXYpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhNb2QpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OmJ1aWxkQmluYXJ5STMyKToKKwogMjAxNS0xMS0xMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBDcmVhdGUgYW4gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIg
YWJzdHJhY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
OTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCwxMCBAQAogCQkw
RjMzOEUxNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYg
LyogQjNWYWx1ZUtleS5jcHAgKi87IH07CiAJCTBGMzM4RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBC
M1ZhbHVlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjMzOEUwOTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5oICovOyB9OwogCQkwRjMz
OEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTBBMUJGMDI3NkMwMDEzQzg4
RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oICovOyB9OworCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4
OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5jcHAgKi87IH07CisJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5o
ICovOyB9OworCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxOTFC
RjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87IH07CisJCTBGMzM4RTFFMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dl
ck1hY3Jvcy5oICovOyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0
QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRB
MTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5oICovOyB9OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwpAQCAt
MjMzOSw2ICsyMzQzLDEwIEBACiAJCTBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVLZXku
Y3BwOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzM4RTA5MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVLZXkuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhG
IC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzVmFsdWVLZXlJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4
OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTG93ZXJNYWNyb3MuY3BwOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xv
d2VyTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJNYWNy
b3MuaDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcv
REZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5
cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9
IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00NDMyLDYgKzQ0NDAsOCBAQAogCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suaCAqLywKIAkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Js
b2NrSW5saW5lcy5oICovLAogCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tVdGlscy5oICovLAorCQkJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjMzOERGNzFCRTk2QUE4MDAxM0M4OEYgLyogQjND
Q2FsbFZhbHVlLmNwcCAqLywKIAkJCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2Fs
bFZhbHVlLmggKi8sCkBAIC00NDczLDYgKzQ0ODMsOCBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYw
MDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAw
ODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBG
Rjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oICovLAorCQkJCTBGMzM4RTE5MUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLywKKwkJCQkwRjMzOEUxQTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovLAogCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAogCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLywKIAkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNN
ZW1vcnlWYWx1ZS5jcHAgKi8sCkBAIC02NjY2LDYgKzY2NzgsNyBAQAogCQkJCTBGRUM4NTM4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ1NzA0MTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjUsNiArNjc3OCw3IEBACiAJCQkJQzIyMzlE
MTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2
IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1
QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApA
QCAtODMxMCw2ICs4MzI0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3
QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAw
NjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4
RTFEMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04NDgyLDYgKzg0OTcsNyBAQAog
CQkJCTBGRUEwQTFFMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzI3MTg3REZERUMwMDgzQjY4NyAvKiBGVExB
dmFpbGFibGVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwOTE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4
RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZU
TERhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAko
cmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDMwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxfaTMycihzcmMsIGltbS5tX3ZhbHVl
LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkNv
bnZlcnRUb0RvdWJsZVdvcmQzMihSZWdpc3RlcklEIGVheCwgUmVnaXN0ZXJJRCBlZHgpCisgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKGVheCwgZWF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChlZHgsIGVkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7Cisg
ICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIH0KKworICAgIHZvaWQgeDg2
RGl2MzIoUmVnaXN0ZXJJRCBkZW5vbWluYXRvcikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmlkaXZsX3IoZGVub21pbmF0b3IpOworICAgIH0KKworICAgIHZvaWQgeDg2RGl2MzIoUmVnaXN0
ZXJJRCBlYXgsIFJlZ2lzdGVySUQgZWR4LCBSZWdpc3RlcklEIGRlbm9taW5hdG9yKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChlYXgsIGVheCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZWR4LCBlZHggPT0gWDg2UmVnaXN0ZXJzOjplZHgpOworICAg
ICAgICB4ODZEaXYzMihkZW5vbWluYXRvcik7CisgICAgfQorCiAgICAgdm9pZCBuZWczMihSZWdp
c3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX3Ioc3JjRGVz
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4Niw2ICszODYsMzAgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5pbXVscV9y
cihzcmMsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQ2NCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jZHFxKCk7CisgICAgfQorCisgICAg
dm9pZCB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoUmVnaXN0ZXJJRCByYXgsIFJlZ2lzdGVySUQg
cmR4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyYXgsIHJheCA9PSBYODZSZWdpc3Rl
cnM6OmVheCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXJz
OjplZHgpOworICAgICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHg4NkRpdjY0KFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5pZGl2cV9yKGRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkRp
djY0KFJlZ2lzdGVySUQgcmF4LCBSZWdpc3RlcklEIHJkeCwgUmVnaXN0ZXJJRCBkZW5vbWluYXRv
cikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmF4LCByYXggPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJkeCwgcmR4ID09IFg4NlJlZ2lzdGVyczo6
ZWR4KTsKKyAgICAgICAgeDg2RGl2NjQoZGVub21pbmF0b3IpOworICAgIH0KKwogICAgIHZvaWQg
bmVnNjQoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubmVncV9y
KGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjIsNiArOTYyLDExIEBA
IHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX0lESVYsIGRzdCk7CiAgICAgfQogCisgICAgdm9pZCBpZGl2cV9yKFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2
LCBHUk9VUDNfT1BfSURJViwgZHN0KTsKKyAgICB9CisKICAgICAvLyBDb21wYXJpc29uczoKIAog
ICAgIHZvaWQgY21wbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCkBAIC0xMjg0
LDYgKzEyODksMTEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1Bf
Q0RRKTsKICAgICB9CiAKKyAgICB2b2lkIGNkcXEoKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfQ0RRKTsKKyAgICB9CisKICAgICB2b2lkIGZzdHBzKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVP
cChPUF9FU0NBUEVfRDksIEVTQ0FQRV9EOV9GU1RQX3NpbmdsZVJlYWwsIGJhc2UsIG9mZnNldCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNp
b24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
CisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9j
a1V0aWxzLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKICNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgotI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKQEAgLTUyLDYgKzU0LDI5IEBAIHZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2
YWx1ZSkKICAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOwogfQogCit2b2lkIEJhc2ljQmxvY2s6
OnJlcGxhY2VMYXN0KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIHZhbHVlKQoreworICAgIHByb2Mu
ZGVsZXRlVmFsdWUobGFzdCgpKTsKKyAgICBsYXN0KCkgPSB2YWx1ZTsKK30KKworVmFsdWUqIEJh
c2ljQmxvY2s6OmFwcGVuZEludENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdp
biwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQoreworICAgIFZhbHVlKiByZXN1bHQgPSBwcm9j
LmFkZEludENvbnN0YW50KG9yaWdpbiwgdHlwZSwgdmFsdWUpOworICAgIGFwcGVuZChyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZhbHVlKiBCYXNpY0Jsb2NrOjphcHBlbmRJbnRD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3QgdmFsdWUp
Cit7CisgICAgcmV0dXJuIGFwcGVuZEludENvbnN0YW50KHByb2MsIGxpa2VWYWx1ZS0+b3JpZ2lu
KCksIGxpa2VWYWx1ZS0+dHlwZSgpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVw
bGFjZVN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBy
ZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnJlcGxhY2VTdWNjZXNzb3IoZnJvbSwg
dG8pOworfQorCiBib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJs
b2NrKQogewogICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwpAQCAt
NjcsNiArOTIsMTEgQEAgYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaQog
ICAgIHJldHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKIH0KIAor
dm9pZCBCYXNpY0Jsb2NrOjp1cGRhdGVQcmVkZWNlc3NvcnMoKQoreworICAgIEIzOjp1cGRhdGVQ
cmVkZWNlc3NvcnModGhpcyk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5MjI1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTEgKzI5LDE0IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUg
IkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitjbGFzcyBC
bG9ja0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNsYXNzIFByb2NlZHVyZTsK
IGNsYXNzIFZhbHVlOwpAQCAtNjgsMTAgKzcxLDE3IEBAIHB1YmxpYzoKICAgICBWYWx1ZUxpc3Qm
IHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGFwcGVuZChWYWx1ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwbGFjZUxh
c3QoUHJvY2VkdXJlJiwgVmFsdWUqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3KFByb2Nl
ZHVyZSYsIEFyZ3VtZW50cy4uLik7CiAKKyAgICBWYWx1ZSogYXBwZW5kSW50Q29uc3RhbnQoUHJv
Y2VkdXJlJiwgT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYXBwZW5k
SW50Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSk7
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgVmFsdWVUeXBlKiByZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJlJiwgQXJn
dW1lbnRzLi4uKTsKKwogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKICAgICBj
b25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAg
ICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwpAQCAtODMsNiAr
OTMsOCBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNj
ZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNv
bnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNv
bnN0OwogCisgICAgYm9vbCByZXBsYWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2lj
QmxvY2sqIHRvKTsKKwogICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQogICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
ICAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzW2luZGV4XTsgfQpAQCAtOTQsMTIgKzEwNiwxNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CiAgICAgYm9vbCByZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCisgICAgLy8gVXBk
YXRlIHByZWRlY2Vzc29ycyBzdGFydGluZyB3aXRoIHRoZSBzdWNjZXNzb3JzIG9mIHRoaXMgYmxv
Y2suCisgICAgdm9pZCB1cGRhdGVQcmVkZWNlc3NvcnMoKTsKKwogICAgIGRvdWJsZSBmcmVxdWVu
Y3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
CiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmll
bmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDE0IEBAIFZhbHVlVHlw
ZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHUKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1Zh
bHVlVHlwZSogQmFzaWNCbG9jazo6cmVwbGFjZUxhc3RXaXRoTmV3KFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
cHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgcmVwbGFjZUxhc3Qo
cHJvY2VkdXJlLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGlubGluZSB1bnNp
Z25lZCBCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAxOTIyNTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsMjAgQEAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvYwogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YXNpY0Jsb2NrPgordm9pZCB1cGRhdGVQcmVkZWNlc3NvcnMoQmFzaWNCbG9jayogcm9vdCkKK3sK
KyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBl
bmQocm9vdCk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAg
ICAgaWYgKGFkZFByZWRlY2Vzc29yKHN1Y2Nlc3NvciwgYmxvY2spKQorICAgICAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICB9CisgICAgfQorfQorCiAvLyBU
aGlzIHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4n
dCByZWFjaGFibGUuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBlbmFtZSBEZWxl
dGVGdW5jdG9yPgogdm9pZCByZXNldFJlYWNoYWJpbGl0eSgKQEAgLTgyLDE0ICs5Niw3IEBAIHZv
aWQgcmVzZXRSZWFjaGFiaWxpdHkoCiAgICAgICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzKCku
cmVzaXplKDApOwogICAgIH0KIAotICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJ
bmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QucHVzaChibG9ja3Nb
MF0uZ2V0KCkpOwotICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgp
KSB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrcygpKSB7Ci0gICAgICAgICAgICBhZGRQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2Nr
KTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICB1cGRhdGVQcmVkZWNlc3NvcnMoYmxvY2tzWzBdLmdldCgpKTsKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKCFi
bG9ja3NbaV0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja0luc2VydGlv
blNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJ
bnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChQcm9jZWR1cmUgJnByb2Mp
CisgICAgOiBtX3Byb2MocHJvYykKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0lu
c2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoQmxvY2tJ
bnNlcnRpb24mJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChXVEY6Om1v
dmUoaW5zZXJ0aW9uKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFYLCBmcmVxdWVuY3kp
KTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBpbnNlcnQoQmxv
Y2tJbnNlcnRpb24oaW5kZXgsIFdURjo6bW92ZShibG9jaykpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2lj
QmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0KGJl
Zm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeSA6IGJlZm9y
ZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6c3Bs
aXRGb3J3YXJkKAorICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwg
SW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgVmFs
dWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3
IGJsb2NrIHRoYXQgd2lsbCBnbyBqdXN0IGJlZm9yZSAnYmxvY2snLCBhbmQgbWFrZSBpdCBjb250
YWluIGV2ZXJ5dGhpbmcgcHJpb3IKKyAgICAvLyB0byAndmFsdWVJbmRleCcuCisgICAgQmFzaWNC
bG9jayogcmVzdWx0ID0gaW5zZXJ0QmVmb3JlKGJsb2NrLCBmcmVxdWVuY3kpOworICAgIHJlc3Vs
dC0+bV92YWx1ZXMucmVzaXplKHZhbHVlSW5kZXggKyAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2YWx1ZUluZGV4OyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmFsdWVzW2ldID0gYmxvY2st
Pm1fdmFsdWVzW2ldOworCisgICAgLy8gTWFrZSB0aGUgbmV3IGJsb2NrIGp1bXAgdG8gJ2Jsb2Nr
Jy4KKyAgICByZXN1bHQtPm1fdmFsdWVzW3ZhbHVlSW5kZXhdID0KKyAgICAgICAgbV9wcm9jLmFk
ZDxDb250cm9sVmFsdWU+KEp1bXAsIHZhbHVlLT5vcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGJs
b2NrKSk7CisKKyAgICAvLyBJZiB3ZSBoYWQgaW5zZXJ0ZWQgdGhpbmdzIGludG8gJ2Jsb2NrJyBi
ZWZvcmUgdGhpcywgZXhlY3V0ZSB0aG9zZSBpbnNlcnRpb25zIG5vdy4KKyAgICBpZiAoaW5zZXJ0
aW9uU2V0KQorICAgICAgICBpbnNlcnRpb25TZXQtPmV4ZWN1dGUocmVzdWx0KTsKKworICAgIC8v
IFJlbW92ZSBldmVyeXRoaW5nIHByaW9yIHRvICd2YWx1ZUluZGV4JyBmcm9tICdibG9jaycsIHNp
bmNlIHRob3NlIHRoaW5ncyBhcmUgbm93IGluIHRoZQorICAgIC8vIG5ldyBibG9jay4KKyAgICBi
bG9jay0+bV92YWx1ZXMucmVtb3ZlKDAsIHZhbHVlSW5kZXgpOworCisgICAgLy8gVGhpcyBpcyBi
ZWluZyB1c2VkIGluIGEgZm9yd2FyZCBsb29wIG92ZXIgJ2Jsb2NrJy4gVXBkYXRlIHRoZSBpbmRl
eCBvZiB0aGUgbG9vcCBzbyB0aGF0CisgICAgLy8gaXQgY2FuIGNvbnRpbnVlIHRvIHRoZSBuZXh0
IGJsb2NrLgorICAgIHZhbHVlSW5kZXggPSAwOworCisgICAgLy8gRml4dXAgdGhlIHByZWRlY2Vz
c29ycyBvZiAnYmxvY2snLiBUaGV5IG5vdyBtdXN0IGp1bXAgdG8gdGhlIG5ldyBibG9jay4KKyAg
ICByZXN1bHQtPnByZWRlY2Vzc29ycygpID0gV1RGOjptb3ZlKGJsb2NrLT5wcmVkZWNlc3NvcnMo
KSk7CisgICAgYmxvY2stPmFkZFByZWRlY2Vzc29yKHJlc3VsdCk7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBwcmVkZWNlc3NvciA6IHJlc3VsdC0+cHJlZGVjZXNzb3JzKCkpCisgICAgICAgIHByZWRl
Y2Vzc29yLT5yZXBsYWNlU3VjY2Vzc29yKGJsb2NrLCByZXN1bHQpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCit7CisgICAgaWYg
KG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4g
U28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgIC8vIHJ1bm5pbmcgV1RGOjpleGVj
dXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNvcnQgYW5kIHdlIHdh
bnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNvcnQuCisgICAgYnVi
YmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKKworICAg
IGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAK
KyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNl
c3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJv
bSBncm93aW5nLgorICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAg
ICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRyKSAtPiBib29sIHsK
KyAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgIH0pOworICAgIAorICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUoKTsgKytpKQorICAg
ICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNl
cnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Js
b2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tJ
bnNlcnRpb25TZXRfaAorI2RlZmluZSBCM0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9JbnNl
cnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRp
b248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlvbjsKKworY2xhc3Mg
QmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KFByb2Nl
ZHVyZSYpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIHZvaWQgaW5zZXJ0
KEJsb2NrSW5zZXJ0aW9uJiYpOworCisgICAgLy8gSW5zZXJ0IGEgbmV3IGJsb2NrIGF0IGEgZ2l2
ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
ZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJsb2NrIGJlZm9yZSB0
aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhlIGZyZXF1ZW5jeQor
ICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1c3QgdXNlIHRoZSBm
cmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKKyAgICAvLyB1c3VhbGx5IHdo
YXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJl
Zm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gQSBoZWxwZXIgdG8gc3Bs
aXQgYSBibG9jayB3aGVuIGZvcndhcmQgaXRlcmF0aW5nIG92ZXIgaXQuIEl0IGNyZWF0ZXMgYSBu
ZXcgYmxvY2sgdG8gaG9sZAorICAgIC8vIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBpbnN0cnVjdGlv
biBhdCB2YWx1ZUluZGV4LiBUaGUgY3VycmVudCBibG9jayBpcyBsZWZ0IHdpdGgKKyAgICAvLyBl
dmVyeXRoaW5nIGF0IGFuZCBhZnRlciB2YWx1ZUluZGV4LiBJZiB0aGUgb3B0aW9uYWwgSW5zZXJ0
aW9uU2V0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGdldAorICAgIC8vIGV4ZWN1dGVkIG9uIHRoZSBu
ZXdseSBjcmVhdGVkIGJsb2NrIC0gdGhpcyBtYWtlcyBzZW5zZSBpZiB5b3UgaGFkIHByZXZpb3Vz
bHkgaW5zZXJ0ZWQKKyAgICAvLyB0aGluZ3MgaW50byB0aGUgb3JpZ2luYWwgYmxvY2ssIHNpbmNl
IHRoZSBuZXdseSBjcmVhdGVkIGJsb2NrIHdpbGwgYmUgaW5kZXhlZCBpZGVudGljYWxseQorICAg
IC8vIHRvIGhvbGQgdGhpcyBibG9jayB3YXMgaW5kZXhlZCBmb3IgYWxsIHZhbHVlcyBwcmlvciB0
byB2YWx1ZUluZGV4LiBBZnRlciB0aGlzIHJ1bnMsIGl0CisgICAgLy8gc2V0cyB2YWx1ZUluZGV4
IHRvIHplcm8uIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBtZXRob2QgZm9yIHRoaW5ncyBs
aWtlOgorICAgIC8vCisgICAgLy8gZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgIC8vICAgICBWYWx1ZSog
dmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisgICAgLy8gICAgIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgPT0gRm9vKSB7CisgICAgLy8gICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9
CisgICAgLy8gICAgICAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5zcGxpdEZvcndhcmQoYmxv
Y2ssIHZhbHVlSW5kZXgsICZtX2luc2VydGlvblNldCk7CisgICAgLy8gICAgICAgICAuLi4gLy8g
Tm93IHlvdSBjYW4gYXBwZW5kIHRvIHByZWRlY2Vzc29yLCBpbnNlcnQgbmV3IGJsb2NrcyBiZWZv
cmUgJ2Jsb2NrJywgYW5kCisgICAgLy8gICAgICAgICAuLi4gLy8geW91IGNhbiB1c2UgbV9pbnNl
cnRpb25TZXQgdG8gaW5zZXJ0IG1vcmUgdGhpbmcgYmVmb3JlICd2YWx1ZScuCisgICAgLy8gICAg
ICAgICBwcmVkZWNlc3Nvci0+dXBkYXRlUHJlZGVjZXNzb3JzKCk7CisgICAgLy8gICAgIH0KKyAg
ICAvLyB9CisgICAgLy8KKyAgICAvLyBOb3RlIGhvdyB1c3VhbGx5IHRoaXMgaWRpb20gZW5kcyBp
biBhIGFsbCB0byB1cGRhdGVQcmVkZWNlc3NvcnMoKSwgd2hpY2ggZW5zdXJlcyB0aGF0IHRoZQor
ICAgIC8vIHByZWRlY2Vzc29ycyBpbnZvbHZlZCBpbiBhbnkgb2YgdGhlIG5ldyBjb250cm9sIGZs
b3cgdGhhdCB5b3UndmUgY3JlYXRlZCBhcmUgdXAgdG8gZGF0ZS4KKyAgICBCYXNpY0Jsb2NrKiBz
cGxpdEZvcndhcmQoCisgICAgICAgIEJhc2ljQmxvY2sqLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwg
SW5zZXJ0aW9uU2V0KiA9IG51bGxwdHIsCisgICAgICAgIGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFO
KTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBQcm9jZWR1cmUm
IG1fcHJvYzsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDI0IEBAIGlubGlu
ZSBib29sIGlzUmVwcmVzZW50YWJsZUFzKGRvdWJsZSB2YWwKICAgICByZXR1cm4gaXNSZXByZXNl
bnRhYmxlQXNJbXBsPFJlc3VsdFR5cGUsIGRvdWJsZSwgaW50NjRfdD4odmFsdWUpOwogfQogCitp
bmxpbmUgaW50MzJfdCBjaGlsbERpdihpbnQzMl90IG51bSwgaW50MzJfdCBkZW4pCit7CisgICAg
aWYgKCFkZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkZW4gPT0gLTEgJiYgbnVtID09
IC0yMTQ3NDgzNjQ3IC0gMSkKKyAgICAgICAgcmV0dXJuIG51bTsKKyAgICByZXR1cm4gbnVtIC8g
ZGVuOworfQorCitpbmxpbmUgaW50NjRfdCBjaGlsbERpdihpbnQ2NF90IG51bSwgaW50NjRfdCBk
ZW4pCit7CisgICAgaWYgKCFkZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkZW4gPT0g
LTEgJiYgbnVtID09IC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAxKQorICAgICAgICByZXR1cm4g
bnVtOworICAgIHJldHVybiBudW0gLyBkZW47Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTI2ICs0NywxMzMgQEAgVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdQog
ICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgb3Ro
ZXIpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmFkZENvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICgh
b3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBw
cm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgb3RoZXItPmFzSW50MzIo
KSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQzMigp
KTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVlOjpkaXZDb25zdGFu
dChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAo
IW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgY2hpbGxEaXYobV92YWx1ZSwgb3RoZXIt
PmFzSW50MzIoKSkpOworfQorCitWYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJv
Yy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAmIG90aGVyLT5hc0ludDMyKCkp
OwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0T3JDb25zdGFu
dChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAo
IW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSB8IG90aGVyLT5hc0ludDMy
KCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jZWR1cmUm
IHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdFhvckNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAg
IGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJl
dHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIF4gb3RoZXItPmFz
SW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnNobENvbnN0YW50KFByb2NlZHVy
ZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6c2hsQ29u
c3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAg
aWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0
dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPDwgKG90aGVyLT5h
c0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpzU2hyQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVl
OjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPj4g
KG90aGVyLT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjp6U2hy
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29u
c3QzMlZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIHN0
YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+PiAob3Ro
ZXItPmFzSW50MzIoKSAmIDMxKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmVxdWFs
Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjplcXVh
bENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5o
YXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJp
U3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Qz
MlZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENv
bnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7
CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7CiB9
CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAg
IHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwgb3Ro
ZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlclRoYW5D
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmdyZWF0
ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3Ro
ZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVy
biB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENv
bnN0MzJWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3Rh
dGUgQ29uc3QzMlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzSW50MzIo
KSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyRXF1YWxDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRl
KG1fdmFsdWUgPj0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1
ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFs
dWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICgh
b3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJl
dHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkgPiBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFs
dWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZh
bHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAo
IW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICBy
ZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fdmFsdWUpIDwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZh
bHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29u
c3QzMlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAog
ewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0
YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkg
Pj0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0KIAotVHJpU3Rh
dGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAor
VHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVy
biBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyNSArNDIsMjYgQEAgcHVibGlj
OgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0T3JD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZh
bHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBUcmlTdGF0ZSBlcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbm90RXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxl
c3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0
ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
VHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
LSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYs
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNvbnN0
YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSog
Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVyZSYs
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHpTaHJDb25z
dGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFu
dChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NF
cXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJp
U3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93RXF1YWxD
b25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMjYg
KzQ3LDEzMyBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1CiAgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihvdGhlcikpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRDb25z
dGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDY0
VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVl
ICsgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OnN1YkNvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0NjRW
YWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUg
LSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6Yml0QW5kQ29u
c3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2
NFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgY2hpbGxE
aXYobV92YWx1ZSwgb3RoZXItPmFzSW50NjQoKSkpOworfQorCitWYWx1ZSogQ29uc3Q2NFZhbHVl
OjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAm
IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRPckNvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0NjRW
YWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSB8IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRYb3JD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBt
X3ZhbHVlIF4gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OnNo
bENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENv
bnN0NjRWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1f
dmFsdWUgPDwgKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZh
bHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitW
YWx1ZSogQ29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3Jp
Z2luKCksIG1fdmFsdWUgPj4gKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwogfQogCi1WYWx1ZSog
Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIp
IGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
LCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRW
YWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQ2NF90
PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYzKSkpOwogfQogCi1UcmlTdGF0ZSBD
b25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUg
Q29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsK
ICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0
ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0K
IAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0gb3Ro
ZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc1RoYW5Db25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Omxlc3NUaGFu
Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhh
c0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlT
dGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRW
YWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBD
b25zdDY0VmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50NjQoKSk7
CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAg
ICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUg
PD0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6Z3JlYXRl
ckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVl
OjpncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAg
aWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAg
ICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRy
aVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitU
cmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV92
YWx1ZSkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3RoZXItPmFzSW50NjQoKSkpOwogfQogCi1U
cmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAor
VHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1f
dmFsdWUpIDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKIH0KIAot
VHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBj
b25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAg
IHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1
aW50NjRfdD4obV92YWx1ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0
KCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29uc3Rh
bnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0
KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miwy
NSArNDIsMjYgQEAgcHVibGljOgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQz
Ml90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSog
Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
LSAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQo
UHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogelNo
ckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dFcXVh
bENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUq
IGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJl
JiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1NockNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNv
bnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUg
Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25zdGFu
dChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3Zl
RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRy
aVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw1NiArNDcsNjMgQEAgVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50
KFBybwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSArIHN0YXRpY19jYXN0PGRvdWJsZT4ob3RoZXIpKTsKIH0KIAotVmFsdWUqIENvbnN0RG91
YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25z
dAorVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3Vi
bGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVZh
bHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm9j
ZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVy
LT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2Mu
YWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91Ymxl
KCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudChQcm9j
ZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVy
LT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2Mu
YWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC8gb3RoZXItPmFzRG91Ymxl
KCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKICAg
ICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUg
PT0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpu
b3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAg
IGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsK
ICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAK
LVRyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCiAg
ICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVl
IDwgb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpn
cmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91
YmxlVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAog
ewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVyLT5hc0RvdWJsZSgpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc0VxdWFsQ29uc3Rh
bnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJs
ZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUo
bV92YWx1ZSA8PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRl
IENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJu
IE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3ICs0MCwx
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQogCi0gICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYgcHJvYykgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJf
dCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29u
c3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2Vk
dXJlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYs
IGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQ
cm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVl
KiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOworICAgIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3Rh
bnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNz
VGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJp
U3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVt
cE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24g
MTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMjIgQEAgQ29udHJvbFZhbHVlOjp+Q29udHJvbFZh
bHVlKCkKIHsKIH0KIAotdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb0p1bXAoY29uc3QgRnJl
cXVlbnRlZEJsb2NrJiBkZXN0aW5hdGlvbikKK2Jvb2wgQ29udHJvbFZhbHVlOjpyZXBsYWNlU3Vj
Y2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7CisgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3NvciA6IG1fc3Vj
Y2Vzc29ycykgeworICAgICAgICBpZiAoc3VjY2Vzc29yLmJsb2NrKCkgPT0gZnJvbSkgeworICAg
ICAgICAgICAgc3VjY2Vzc29yLmJsb2NrKCkgPSB0bzsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRy
dWU7CisKKyAgICAgICAgICAgIC8vIEtlZXAgbG9vcGluZyBiZWNhdXNlIGl0J3MgdmFsaWQgZm9y
IGEgc3VjY2Vzc29yIHRvIGJlIG1lbnRpb25lZCBtdWx0aXBsZSB0aW1lcywKKyAgICAgICAgICAg
IC8vIGxpa2UgaWYgbXVsdGlwbGUgc3dpdGNoIGNhc2VzIGhhdmUgdGhlIHNhbWUgdGFyZ2V0Lgor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ29udHJvbFZh
bHVlOjpjb252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogewogICAgIHVuc2ln
bmVkIGluZGV4ID0gdGhpcy0+aW5kZXgoKTsKICAgICBPcmlnaW4gb3JpZ2luID0gdGhpcy0+b3Jp
Z2luKCk7CkBAIC00NCw3ICs1OSw3IEBAIHZvaWQgQ29udHJvbFZhbHVlOjpjb252ZXJ0VG9KdW1w
KGNvbnN0IEYKIAogICAgIHRoaXMtPkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpOwogCi0g
ICAgbmV3ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgZGVzdGluYXRp
b24pOworICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKGluZGV4LCBKdW1wLCBvcmlnaW4sIEZy
ZXF1ZW50ZWRCbG9jayhkZXN0aW5hdGlvbikpOwogCiAgICAgdGhpcy0+b3duZXIgPSBvd25lcjsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZp
c2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3Vj
Y2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQog
ICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0K
IAorICAgIGJvb2wgcmVwbGFjZVN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2Nr
KiB0byk7CisKICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRha2VuKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChvcGNvZGUoKSA9PSBKdW1wIHx8IG9wY29kZSgpID09IEJyYW5jaCk7
CkBAIC04NSw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN1Y2Nlc3NvcigxKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNvbnZlcnRUb0p1bXAoY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBk
ZXN0aW5hdGlvbik7CisgICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGRlc3RpbmF0
aW9uKTsKIAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEo
Q29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93ZXJNYWNy
b3MuaCIKICNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKICNpbmNsdWRlICJCM01vdmVDb25zdGFu
dHMuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgpAQCAtNjYsNiArNjcsOCBAQCB2b2lkIGdl
bmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIGRhdGFMb2cocHJvY2Vk
dXJlKTsKICAgICB9CiAKKyAgICBsb3dlck1hY3Jvcyhwcm9jZWR1cmUpOworCiAgICAgcmVkdWNl
U3RyZW5ndGgocHJvY2VkdXJlKTsKICAgICAKICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1p
emF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBt
X2Jsb2NrOyB9CiAgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4g
bV9mcmVxdWVuY3k7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyYgZnJlcXVlbmN5KCkgeyByZXR1cm4g
bV9mcmVxdWVuY3k7IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmNw
cAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0
aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDIyIEBACiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2Vk
dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0J1YmJsZVNvcnQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK1ZhbHVl
KiBJbnNlcnRpb25TZXQ6Omluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgT3JpZ2luIG9y
aWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBpbnNlcnRWYWx1
ZShpbmRleCwgbV9wcm9jZWR1cmUuYWRkSW50Q29uc3RhbnQob3JpZ2luLCB0eXBlLCB2YWx1ZSkp
OworfQorCitWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnRDb25zdGFudChzaXplX3QgaW5k
ZXgsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGluc2Vy
dEludENvbnN0YW50KGluZGV4LCBsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5cGUo
KSwgdmFsdWUpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBi
bG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlv
bnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2Vy
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKICNp
bmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02
Miw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZSogaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cyk7CiAKKyAgICBWYWx1ZSogaW5zZXJ0SW50Q29uc3RhbnQoc2l6
ZV90IGluZGV4LCBPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlKiBpbnNl
cnRJbnRDb25zdGFudChzaXplX3QgaW5kZXgsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3QgdmFs
dWUpOworCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJNYWNy
b3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzQ29u
dHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTG93
ZXJNYWNyb3MgeworcHVibGljOgorICAgIExvd2VyTWFjcm9zKFByb2NlZHVyZSYgcHJvYykKKyAg
ICAgICAgOiBtX3Byb2MocHJvYykKKyAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2Mp
CisgICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykg
eworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgcHJvY2Vzc0N1cnJl
bnRCbG9jaygpOworICAgICAgICB9CisgICAgICAgIG1fY2hhbmdlZCB8PSBtX2Jsb2NrSW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgaWYgKG1fY2hhbmdlZCkKKyAgICAgICAgICAgIG1f
cHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzQ3VycmVudEJsb2NrKCkKKyAgICB7
CisgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsr
bV9pbmRleCkgeworICAgICAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0KG1faW5kZXgpOwor
ICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBDaGlsbERpdjogeworICAgICAgICAgICAgICAgIC8vIEFSTSBzdXBwb3J0cyB0aGlzIGluc3Ry
dWN0aW9uIG5hdGl2ZWx5LgorICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIC8vIFdlIGltcGxlbWVudCAicmVzID0gQ2hpbGxEaXYobnVtLCBk
ZW4pIiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
ICAgIGlmIChkZW4gKyAxIDw9X3Vuc2lnbmVkIDEpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIGlmICghZGVuKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0gMDsK
KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICAgICBpZiAobnVtID09IC0y
MTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0gbnVtOwor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAgICAg
IC8vICAgICByZXMgPSBudW0gLyBkZXY7CisgICAgICAgICAgICAgICAgLy8gZG9uZToKKworICAg
ICAgICAgICAgICAgIFZhbHVlKiBudW0gPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAgICBW
YWx1ZSogb25lID0KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50
Q29uc3RhbnQobV9pbmRleCwgbV92YWx1ZSwgMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGlz
RGVuT0sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBBYm92ZSwgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmln
aW4oKSwgZGVuLCBvbmUpLAorICAgICAgICAgICAgICAgICAgICBvbmUpOworCisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmVmb3JlID0KKyAgICAgICAgICAgICAgICAgICAgbV9ibG9ja0lu
c2VydGlvblNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9pbmRleCwgJm1faW5zZXJ0aW9uU2V0
KTsKKworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5vcm1hbERpdkNhc2UgPSBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBzaGFkeURlbkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSht
X2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB6ZXJvRGVuQ2FzZSA9IG1fYmxv
Y2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIG5lZzFEZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUo
bV9ibG9jayk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogaW50TWluQ2FzZSA9IG1fYmxv
Y2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworCisgICAgICAgICAgICAgICAg
YmVmb3JlLT5yZXBsYWNlTGFzdFdpdGhOZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9yaWdpbigpLCBpc0Rlbk9LLAorICAgICAg
ICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobm9ybWFsRGl2Q2FzZSwgRnJlcXVlbmN5Q2xh
c3M6Ok5vcm1hbCksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhzaGFkeURl
bkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICAgICAgICAgICAgICBVcHNpbG9u
VmFsdWUqIG5vcm1hbFJlc3VsdCA9IG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxVcHNpbG9uVmFs
dWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIG1fdmFsdWUtPm9yaWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICBub3JtYWxEaXZDYXNlLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RGl2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbnVtLCBkZW4pKTsKKyAgICAgICAgICAgICAgICBub3Jt
YWxEaXZDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLCBKdW1wLCBtX3ZhbHVlLT5vcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKG1fYmxvY2sp
KTsKKworICAgICAgICAgICAgICAgIHNoYWR5RGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgQnJhbmNoLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgZGVuLAorICAgICAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobmVnMURlbkNhc2Us
IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpLAorICAgICAgICAgICAgICAgICAgICBGcmVxdWVudGVk
QmxvY2soemVyb0RlbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICAgICAgICAg
ICAgICBVcHNpbG9uVmFsdWUqIHplcm9SZXN1bHQgPSB6ZXJvRGVuQ2FzZS0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIHplcm9EZW5DYXNlLT5hcHBlbmRJbnRDb25zdGFudCht
X3Byb2MsIG1fdmFsdWUsIDApKTsKKyAgICAgICAgICAgICAgICB6ZXJvRGVuQ2FzZS0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgSnVtcCwgbV92
YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IGJhZE51bWVyYXRvckNvbnN0OworICAgICAgICAgICAgICAgIHN3aXRjaCAo
bV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAg
ICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSAtMjE0NzQ4MzY0NyAtIDE7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAg
ICAgICAgICAgICAgIGJhZE51bWVyYXRvckNvbnN0ID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAt
IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgICAgICBiYWROdW1lcmF0b3JDb25zdCA9IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgVmFsdWUqIGJhZE51bWVyYXRvciA9CisgICAgICAgICAgICAgICAgICAgIG5l
ZzFEZW5DYXNlLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUsIGJhZE51bWVyYXRv
ckNvbnN0KTsKKworICAgICAgICAgICAgICAgIG5lZzFEZW5DYXNlLT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9y
aWdpbigpLAorICAgICAgICAgICAgICAgICAgICBuZWcxRGVuQ2FzZS0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgRXF1YWwsIG1fdmFsdWUtPm9yaWdp
bigpLCBudW0sIGJhZE51bWVyYXRvciksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRC
bG9jayhpbnRNaW5DYXNlLCBGcmVxdWVuY3lDbGFzczo6UmFyZSksCisgICAgICAgICAgICAgICAg
ICAgIEZyZXF1ZW50ZWRCbG9jayhub3JtYWxEaXZDYXNlLCBGcmVxdWVuY3lDbGFzczo6Tm9ybWFs
KSk7CisKKyAgICAgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIGludE1pblJlc3VsdCA9IGludE1p
bkNhc2UtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3By
b2MsIG1fdmFsdWUtPm9yaWdpbigpLCBiYWROdW1lcmF0b3IpOworICAgICAgICAgICAgICAgIGlu
dE1pbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBt
X3Byb2MsIEp1bXAsIG1fdmFsdWUtPm9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobV9ibG9jaykp
OworCisgICAgICAgICAgICAgICAgVmFsdWUqIHBoaSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFBoaSwgbV92YWx1ZS0+dHlwZSgp
LCBtX3ZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgbm9ybWFsUmVzdWx0LT5zZXRQ
aGkocGhpKTsKKyAgICAgICAgICAgICAgICB6ZXJvUmVzdWx0LT5zZXRQaGkocGhpKTsKKyAgICAg
ICAgICAgICAgICBpbnRNaW5SZXN1bHQtPnNldFBoaShwaGkpOworCisgICAgICAgICAgICAgICAg
bV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShwaGkpOworICAgICAgICAgICAgICAgIGJlZm9y
ZS0+dXBkYXRlUHJlZGVjZXNzb3JzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgU3dpdGNoLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNQor
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7
CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIEJsb2NrSW5zZXJ0aW9u
U2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0
OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBW
YWx1ZSogbV92YWx1ZTsKKyAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07Cit9OworCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBsb3dlck1hY3JvcyhQcm9jZWR1cmUmIHByb2Mp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJsb3dlck1hY3JvcyIpOworICAg
IExvd2VyTWFjcm9zIGxvd2VyTWFjcm9zKHByb2MpOworICAgIHJldHVybiBsb3dlck1hY3Jvcy5y
dW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0xvd2VyTWFjcm9zX2gKKyNkZWZpbmUg
QjNMb3dlck1hY3Jvc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBMb3dlcnMgaGlnaC1sZXZl
bCBvcGVyYXRpb25zIHRoYXQgaXQncyBlYXNpZXIgdG8gZGVhbCB3aXRoIG9uY2UgdGhleSBhcmUg
YnJva2VuIHVwLiBDdXJyZW50bHkKKy8vIHRoaXMgaW5jbHVkZXMgU3dpdGNoIGFuZCBDaGlsbERp
di4KKworYm9vbCBsb3dlck1hY3JvcyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlck1h
Y3Jvc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzMyw2ICsxMjMzLDQwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIERpdjogeworICAg
ICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBU
bXAgZWF4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgICAgICBUbXAgZWR4
ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKKworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2Rl
IGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgZGl2Owor
ICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9
IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMjsKKyAgICAgICAgICAgICAgICAgICAgZGl2ID0gWDg2
RGl2MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
SW50NjQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252
ZXJ0VG9Eb3VibGVXb3JkNjQ7CisgICAgICAgICAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgp
OworICAgICAgICAgICAgICAgIGFwcGVuZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7
CisgICAgICAgICAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGls
ZCgxKSkpOworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBlYXgsIHRtcChtX3ZhbHVlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBkb3VibGVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk5MQorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgQml0QW5kOiB7CiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQs
IEFpcjo6T29wcywgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxk
KDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgZW51bSBPcGNvZGUgOiBpbnQx
Nl90IHsKICAgICBBZGQsCiAgICAgU3ViLAogICAgIE11bCwKLSAgICBEaXYsCisgICAgRGl2LCAv
LyBBbGwgYmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0
ZSB0aGlzIGZvciAtMl4zMS8tMSBhbmQgeC8wLgogCiAgICAgLy8gSW50ZWdlciBtYXRoLgogICAg
IENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDIyICs1NSwyNyBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFk
ZEJsb2NrKGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmFsdWUqIFByb2NlZHVy
ZTo6YWRkSW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorVmFsdWUqIFByb2Nl
ZHVyZTo6YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90IHZh
bHVlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSW50MzI6Ci0gICAgICAgIHJl
dHVybiBhZGQ8Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4odmFsdWUpKTsKICAgICBjYXNlIEludDY0OgotICAgICAgICByZXR1cm4gYWRk
PENvbnN0NjRWYWx1ZT4oT3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGFkZDxDb25z
dDY0VmFsdWU+KG9yaWdpbiwgdmFsdWUpOwogICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1
cm4gYWRkPENvbnN0RG91YmxlVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKSk7CisgICAgICAgIHJldHVybiBhZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luLCBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQog
Ci1WYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUpCitW
YWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90
IHZhbHVlKQoreworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChsaWtlVmFsdWUtPm9yaWdpbigp
LCBsaWtlVmFsdWUtPnR5cGUoKSwgdmFsdWUpOworfQorCitWYWx1ZSogUHJvY2VkdXJlOjphZGRC
b29sQ29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHJpU3RhdGUgdHJpU3RhdGUpCiB7CiAgICAgaW50
MzJfdCB2YWx1ZSA9IDA7CiAgICAgc3dpdGNoICh0cmlTdGF0ZSkgewpAQCAtODQsNyArODksNyBA
QCBWYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBhZGRJbnRDb25zdGFudChJbnQzMiwgdmFs
dWUpOworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChvcmlnaW4sIEludDMyLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAjaW5j
bHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KQEAgLTQwLDYgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBj
bGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBPcGFxdWVC
eXByb2R1Y3RzOwogY2xhc3MgVmFsdWU7CiAKQEAgLTU2LDEwICs1OCwxMSBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAg
ICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKIAotICAgIFZhbHVlKiBhZGRJbnRDb25z
dGFudChUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3Jp
Z2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFs
dWUqLCBpbnQ2NF90IHZhbHVlKTsKIAogICAgIC8vIFJldHVybnMgbnVsbCBmb3IgTWl4ZWRUcmlT
dGF0ZS4KLSAgICBWYWx1ZSogYWRkQm9vbENvbnN0YW50KFRyaVN0YXRlKTsKKyAgICBWYWx1ZSog
YWRkQm9vbENvbnN0YW50KE9yaWdpbiwgVHJpU3RhdGUpOwogCiAgICAgdm9pZCByZXNldFZhbHVl
T3duZXJzKCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwpAQCAtMjE2LDYgKzIxOSw4
IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gdGFrZUJ5
cHJvZHVjdHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9ieXByb2R1Y3RzKTsgfQogCiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKKyAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOwogICAgIAogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNiArMTg2LDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGJyZWFrOwog
CisgICAgICAgIGNhc2UgRGl2OgorICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHRoaXMgdXNlcyBDaGlsbERpdiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZSBy
dWxlcyBmb3IgRGl2CisgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBpdCBoYXMg
Y29ybmVyIGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAorICAgICAg
ICAgICAgLy8gbGlrZXMuCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUt
PmNoaWxkKDApLT5kaXZDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEJpdEFuZDoKICAgICAgICAgICAgIGhhbmRs
ZUNvbW11dGF0aXZpdHkoKTsKIApAQCAtMzE4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZVgsIHZhbHVlWCkKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogemVyby1jb25zdGFudC4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUtPnR5cGUoKSwgMCkpOworICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1f
dmFsdWUsIDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAt
NDQ2LDcgKzQ1Niw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFs
KGNvbnN0MSwgY29uc3QyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29u
c3QyCiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1f
cHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV92
YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFu
dCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOb3RF
cXVhbDoKQEAgLTQ3Myw3ICs0ODUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBOb3RFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczog
Y29uc3QxICE9IGNvbnN0MgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAg
ICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ub3RF
cXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJv
Yy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigp
LAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFu
dChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgTGVzc1RoYW46CkBAIC00ODEsNDIgKzQ5NSw1OCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk1OAogCiAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1ZS0+
Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJv
b2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3ZhbHVl
LT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAor
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQo
MSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIExlc3NFcXVhbDoKICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFk
ZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc0VxdWFsQ29uc3RhbnQobV92YWx1
ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgK
KyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgx
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR3JlYXRlckVxdWFsOgog
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2Mu
YWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyRXF1YWxDb25zdGFudCht
X3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENvbnN0YW50KG1fdmFsdWUt
PmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBYm92ZToK
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9j
LmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVDb25zdGFudChtX3ZhbHVl
LT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAor
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCktPmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJlbG93OgogICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG1fdmFsdWUtPmNoaWxkKDApLT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkp
OworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKS0+YmVsb3dDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3Zh
bHVlLT5jaGlsZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwor
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7
CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJyYW5jaDogewpAQCAtNTUzLDcgKzU4Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAoZWxzZSkKICAgICAgICAg
ICAgIGlmICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgYnJh
bmNoLT50YWtlbigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAg
ICAgICAgICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkpOworICAg
ICAgICAgICAgICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkuYmxv
Y2soKSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU2Miw3ICs1OTIsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBKdW1wKHRoZW4pCiAgICAgICAgICAgICBpZiAodHJp
U3RhdGUgPT0gVHJ1ZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5ub3RUYWtl
bigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAgICAg
IGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPnRha2VuKCkpOworICAgICAgICAgICAgICAg
IGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPnRha2VuKCkuYmxvY2soKSk7CiAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTYzMSw2ICs2NjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2lt
cGxpZnlDRkcoKQogICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coIkJlZm9yZSBzaW1wbGlmeUNGRzpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX3By
b2MpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHRocmVlIGVhc3kg
c2ltcGxpZmljYXRpb24gcnVsZXM6CiAgICAgICAgIC8vCiAgICAgICAgIC8vIDEpIElmIGEgc3Vj
Y2Vzc29yIGlzIGEgYmxvY2sgdGhhdCBqdXN0IGp1bXBzIHRvIGFub3RoZXIgYmxvY2ssIHRoZW4g
anVtcCBkaXJlY3RseSB0bwpAQCAtNjUxLDYgKzY4Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8v
IGl0ZXJhdGlvbnMgbmVlZGVkIHRvIGtpbGwgYSBsb3Qgb2YgY29kZS4KIAogICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBibG9jayAiLCAqYmxvY2ssICI6
XG4iKTsKKwogICAgICAgICAgICAgY2hlY2tQcmVkZWNlc3NvclZhbGlkaXR5KCk7CiAKICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBzdWNj
ZXNzb3JzLgpAQCAtNjY0LDcgKzcwMiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAmJiBzdWNjZXNzb3ItPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVtcCkgewogICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3IgPSBzdWNjZXNzb3ItPnN1Y2Nlc3NvckJs
b2NrKDApOwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3VjY2Vzc29yICE9IHN1Y2Nlc3Nv
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5yZXBsYWNlUHJlZGVj
ZXNzb3Ioc3VjY2Vzc29yLCBibG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAi
LT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiIHdpdGggIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChuZXdT
dWNjZXNzb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBkbyBub3QgZG8gcmVwbGFjZVByZWRlY2Vzc29yKCkgYmVjYXVzZSB0aGUgYmxvY2sgd2Un
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXBwaW5nIHdpbGwgc3RpbGwgaGF2ZSBu
ZXdTdWNjZXNzb3IgYXMgaXRzIHN1Y2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1N1Y2Nlc3Nvci0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yID0gbmV3U3VjY2Vzc29yOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjc5LDE0ICs3MjUs
MTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIWVmZmVjdHMubXVzdEV4ZWN1dGUo
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBbGwgb2YgdGhlIHN1Y2Nlc3NvcnMgbXVzdCBi
ZSB0aGUgc2FtZS4KICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxTYW1lID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGZpcnN0U3VjY2Vzc29yID0gYmxvY2st
PnN1Y2Nlc3NvcigwKTsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogZmlyc3RTdWNj
ZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yQmxvY2soMCk7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soaSkgIT0gZmly
c3RTdWNjZXNzb3IuYmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT5zdWNjZXNzb3JCbG9jayhpKSAhPSBmaXJzdFN1Y2Nlc3NvcikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbFNhbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBpZiAoYWxsU2FtZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhbmdpbmcgIiwgcG9pbnRlckR1
bXAoYmxvY2spLCAiJ3MgdGVybWluYWwgdG8gYSBKdW1wLlxuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5hczxDb250
cm9sVmFsdWU+KCktPmNvbnZlcnRUb0p1bXAoZmlyc3RTdWNjZXNzb3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNzE5LDYgKzc2OSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBFbnN1
cmUgdGhhdCBwcmVkZWNlc3NvcnMgb2YgYmxvY2sncyBuZXcgc3VjY2Vzc29ycyBrbm93IHdoYXQn
cyB1cC4KICAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3Ig
OiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdT
dWNjZXNzb3ItPnJlcGxhY2VQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2VkICIsIHBvaW50ZXJEdW1w
KGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZENGRyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkyMjU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw4ICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7Ci0gICAgICAgICAgICBmb3IgKFZhbHVlKiBj
aGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKGNoaWxkLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNv
bnRhaW5zKGNoaWxkKSwgKCJBdCAiLCAqdmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKGNoaWxkKSkp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaE1hcDxCYXNpY0Jsb2Nr
KiwgSGFzaFNldDxCYXNpY0Jsb2NrKj4+IGFsbFByZWRlY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDkyICsxMjQs
OTcgQEAgVmFsdWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbgogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3Qg
VmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6
OnN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6c3Vi
Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3Qg
VmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6
OmJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpi
aXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJl
JiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYs
IGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUq
IFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFs
dWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVl
KiBWYWx1ZTo6elNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBW
YWx1ZTo6c1NockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFs
dWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3Qg
VmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitUcmlTdGF0ZSBWYWx1
ZTo6ZXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKikg
Y29uc3QKK1RyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29u
c3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6Omxl
c3NUaGFuQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29u
c3RhbnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwog
fQogCi1UcmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSopIGNvbnN0CitU
cmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7
CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpsZXNzRXF1
YWxDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6bGVzc0VxdWFsQ29uc3Rh
bnQoY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQog
Ci1UcmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJp
U3RhdGUgVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsK
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29u
c3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3Qg
VmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0
ZSBWYWx1ZTo6YmVsb3dDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YmVs
b3dDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25z
dAorVHJpU3RhdGUgVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0
CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpiZWxv
d0VxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmJlbG93RXF1YWxD
b25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMSwyNSArMTExLDI2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIFZhbHVlKiBuZWdD
b25zdGFudChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFu
dChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBh
ZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwg
VmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAg
dmlydHVhbCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVl
KiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBzaGxDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHNT
aHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwg
VmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAg
IHZpcnR1YWwgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBkaXZDb25zdGFudChQ
cm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OyAvLyBUaGlzIGNob29zZXMgQ2hp
bGxEaXYgc2VtYW50aWNzIGZvciBpbnRlZ2Vycy4KKyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRBbmRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHNobENvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSog
c1NockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZh
bHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1
YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3Jl
YXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0
YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0
YXRlIGJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0
YXRlIGFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwg
VHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmly
dHVhbCBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7Cisg
ICAgdmlydHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVl
KiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50
KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3Rh
dGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50
KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CiAKICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBj
b21wYXJpc29uIHRoZW4gdGhpcyByZXR1cm5zIHRoZSBpbnZlcnRlZCBmb3JtIG9mIHRoYXQgY29t
cGFyaXNvbiwgaWYKICAgICAvLyBwb3NzaWJsZS4gSXQgY2FuIGJlIGltcG9zc2libGUgZm9yIGRv
dWJsZSBjb21wYXJpc29ucywgd2hlcmUgZm9yIGV4YW1wbGUgTGVzc1RoYW4gYW5kCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MzYsNiAr
MjgzNiwxMDggQEAgdm9pZCB0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndQogICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jKSA9PSBmdW5jdGlvbldpdGhIZWxsYURv
dWJsZUFyZ3VtZW50cygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywg
MTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYpKTsKIH0K
IAordm9pZCB0ZXN0Q2hpbGxEaXYoaW50IG51bSwgaW50IGRlbiwgaW50IHJlcykKK3sKKyAgICAv
LyBUZXN0IG5vbi1jb25zdGFudC4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkp
OworCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBudW0sIGRlbikgPT0g
cmVzKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGNvbnN0YW50LgorICAgIHsKKyAgICAgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgICAgIAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbnVtKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgZGVuKSkpOworICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpID09IHJlcyk7CisgICAgfQorfQorCit2b2lkIHRlc3RDaGlsbERpdlR3
aWNlKGludCBudW0xLCBpbnQgZGVuMSwgaW50IG51bTIsIGludCBkZW4yLCBpbnQgcmVzKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSkpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKSkp
KSk7CisgICAgCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIG51bTEsIGRlbjEs
IG51bTIsIGRlbjIpID09IHJlcyk7Cit9CisKK3ZvaWQgdGVzdENoaWxsRGl2NjQoaW50NjRfdCBu
dW0sIGludDY0X3QgZGVuLCBpbnQ2NF90IHJlcykKK3sKKyAgICBpZiAoIWlzNjRCaXQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gVGVzdCBub24tY29uc3RhbnQuCisgICAgeworICAgICAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSkpKTsKKyAgICAgICAgCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50
NjRfdD4ocHJvYywgbnVtLCBkZW4pID09IHJlcyk7CisgICAgfQorCisgICAgLy8gVGVzdCBjb25z
dGFudC4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9j
LCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG51bSksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGRlbikpKTsKKyAgICAgICAg
CisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYykgPT0gcmVzKTsKKyAg
ICB9Cit9CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMzMTIs
NiArMzQxNCwyNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RD
YWxsU2ltcGxlRG91YmxlKDEsIDIpKTsKICAgICBSVU4odGVzdENhbGxGdW5jdGlvbldpdGhIZWxs
YURvdWJsZUFyZ3VtZW50cygpKTsKIAorICAgIFJVTih0ZXN0Q2hpbGxEaXYoNCwgMiwgMikpOwor
ICAgIFJVTih0ZXN0Q2hpbGxEaXYoMSwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoMCwg
MCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoMSwgLTEsIC0xKSk7CisgICAgUlVOKHRlc3RD
aGlsbERpdigtMjE0NzQ4MzY0NyAtIDEsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2KC0y
MTQ3NDgzNjQ3IC0gMSwgMSwgLTIxNDc0ODM2NDcgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERp
digtMjE0NzQ4MzY0NyAtIDEsIC0xLCAtMjE0NzQ4MzY0NyAtIDEpKTsKKyAgICBSVU4odGVzdENo
aWxsRGl2KC0yMTQ3NDgzNjQ3IC0gMSwgMiwgLTEwNzM3NDE4MjQpKTsKKyAgICBSVU4odGVzdENo
aWxsRGl2NjQoNCwgMiwgMikpOworICAgIFJVTih0ZXN0Q2hpbGxEaXY2NCgxLCAwLCAwKSk7Cisg
ICAgUlVOKHRlc3RDaGlsbERpdjY0KDAsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQo
MSwgLTEsIC0xKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3
bGwgLSAxLCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1
ODA3bGwgLSAxLCAxLCAtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMSkpOworICAgIFJVTih0ZXN0
Q2hpbGxEaXY2NCgtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMSwgLTEsIC05MjIzMzcyMDM2ODU0
Nzc1ODA3bGwgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1
ODA3bGwgLSAxLCAyLCAtNDYxMTY4NjAxODQyNzM4NzkwNCkpOworICAgIFJVTih0ZXN0Q2hpbGxE
aXZUd2ljZSg0LCAyLCA2LCAyLCA1KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdlR3aWNlKDQsIDAs
IDYsIDIsIDMpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2VHdpY2UoNCwgMiwgNiwgMCwgMikpOwor
CiAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5
MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2Rl
LCBDQ2FsbEhlbHBlcnMmIAogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
ICAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgYmxvY2tMYWJl
bHNbYmxvY2tdID0gaml0LmxhYmVsKCk7CiAgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49
IDEpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7
ICsraSkgewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQo
aSkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKQEAgLTE0MCw4ICsxNDEsNiBAQCB2b2lkIGdlbmVy
YXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQs
IGNvbnRleHQpOwotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCi0gICAgICAgICAg
ICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwogICAgICAgICBzd2l0Y2ggKGJs
b2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgQVNT
RVJUKCFqdW1wLmlzU2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiAr
MTI4LDM2IEBAIGlubGluZSBib29sIGlzVXJzaGlmdDY0VmFsaWQoY29uc3QgSW5zdCYKICAgICBy
ZXR1cm4gaXNTaGlmdFZhbGlkKGluc3QpOwogfQogCitpbmxpbmUgYm9vbCBpc1g4NkRpdkhlbHBl
clZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkK
KyAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAg
ICAgJiYgaW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBpc1g4NkNvbnZlcnRUb0Rv
dWJsZVdvcmQzMlZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2
SGVscGVyVmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzWDg2Q29udmVydFRvRG91Ymxl
V29yZDY0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNYODZEaXZIZWxw
ZXJWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNYODZEaXYzMlZhbGlkKGNvbnN0IElu
c3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVyVmFsaWQoaW5zdCk7Cit9CisK
K2lubGluZSBib29sIGlzWDg2RGl2NjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJl
dHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOworfQorCiB9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTIy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwyMiBAQCBOZWczMiBVRDpHCiBOZWc2NCBVRDpHCiAg
ICAgVG1wCiAKK011bDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisK
K1g4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMiBVOkcsIEQ6RworICAgIFRtcCosIFRtcCoKKworWDg2
Q29udmVydFRvRG91YmxlV29yZDY0IFU6RywgRDpHCisgICAgVG1wKiwgVG1wKgorCitYODZEaXYz
MiBVRDpHLCBVRDpHLCBVOkcKKyAgICBUbXAqLCBUbXAqLCBUbXAKKworWDg2RGl2NjQgVUQ6Rywg
VUQ6RywgVTpHCisgICAgVG1wKiwgVG1wKiwgVG1wCisKIExlYSBVQTpHLCBEOkcKICAgICBBZGRy
LCBUbXAKIApAQCAtMTU3LDEwICsxNzMsNiBAQCBYb3I2NCBVOkcsIFVEOkcKICAgICBUbXAsIEFk
ZHIKICAgICBJbW0sIFRtcAogCi1NdWwzMiBVOkcsIFVEOkcKLSAgICBUbXAsIFRtcAotICAgIEFk
ZHIsIFRtcAotCiAjIE5vdGUgdGhhdCBNb3ZlIG9wZXJhdGVzIG92ZXIgdGhlIGZ1bGwgcmVnaXN0
ZXIgc2l6ZSwgd2hpY2ggaXMgZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgZGVwZW5kaW5nIG9uCiAj
IHRoZSBwbGF0Zm9ybS4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2Qg
dGhpbmc7IGl0IG1pZ2h0IGJlIGJldHRlciB0byBqdXN0IGhhdmUgYQogIyBNb3ZlNjQgaW5zdHJ1
Y3Rpb24uIE9UT0gsIG91ciBNYWNyb0Fzc2VtYmxlcnMgYWxyZWFkeSBoYXZlIHRoaXMgbm90aW9u
IG9mICJtb3ZlKCkiIHRoYXQgYmFzaWNhbGx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg2LDcgKzg2LDkgQEAgYm9vbCBzaW1wbGlmeUNGRyhDb2RlJiBjb2RlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwbGFjaW5nICIsIHBvaW50ZXJEdW1wKGJsb2Nr
KSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiB3aXRoICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAo
bmV3U3VjY2Vzc29yKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBuZXdTdWNjZXNzb3ItPnJlcGxhY2VQcmVkZWNlc3NvcihzdWNjZXNz
b3IsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBu
b3QgZG8gcmVwbGFjZVByZWRlY2Vzc29yKCkgYmVjYXVzZSB0aGUgYmxvY2sgd2UncmUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNraXBwaW5nIHdpbGwgc3RpbGwgaGF2ZSBuZXdTdWNjZXNz
b3IgYXMgaXRzIHN1Y2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N1Y2Nlc3Nv
ci0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
c29yID0gbmV3U3VjY2Vzc29yOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTExMiw2ICsxMTQsNyBAQCBib29sIHNpbXBs
aWZ5Q0ZHKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q2hhbmdpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiJ3MgdGVybWluYWwgdG8gYSBKdW1wLlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpID0gSW5zdChKdW1wLCBi
bG9jay0+bGFzdCgpLm9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+c3Vj
Y2Vzc29ycygpLnJlc2l6ZSgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zdWNj
ZXNzb3JzKClbMF0uZnJlcXVlbmN5KCkgPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsOwogICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgUGFz
c1JlZlB0cjxCYXNpY0Jsb2NrPik7CiAgICAgQmFzaWNCbG9jayogaW5zZXJ0KHNpemVfdCBpbmRl
eCwgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwogICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShC
YXNpY0Jsb2NrKiBiZWZvcmUsIGZsb2F0IGV4ZWN1dGlvbkNvdW50KTsKLSAgICAKKwogICAgIGJv
b2wgZXhlY3V0ZSgpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzk5LDggKzMzOTksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhE
aXYoTm9kCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQ
UiwgZWF4LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAg
IG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Iob3AyR1BSKTsKKyAgICAgICAgbV9qaXQueDg2Q29u
dmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAgIG1faml0Lng4NkRpdjMyKG9wMkdQUik7CiAg
ICAgICAgICAgICAKICAgICAgICAgaWYgKG9wMlRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZykKICAg
ICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsKQEAgLTM1NTUsOCArMzU1NSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKIAogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKGRpdmlzb3IpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5hc3NlbWJsZXIoKS5jZHEoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5p
ZGl2bF9yKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG1faml0Lng4NkNvbnZlcnRUb0Rv
dWJsZVdvcmQzMigpOworICAgICAgICAgICAgICAgIG1faml0Lng4NkRpdjMyKHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtZXJh
dG9yUG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVx
dWFsLCBvcDFTYXZlR1BSLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hU
ZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIGVkeC5ncHIoKSkpOwpAQCAtMzY0Niw4ICszNjQ2LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIGVheC5ncHIoKSk7Ci0gICAg
ICAgIG1faml0LmFzc2VtYmxlcigpLmNkcSgpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5p
ZGl2bF9yKG9wMkdQUik7CisgICAgICAgIG1faml0Lng4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigp
OworICAgICAgICBtX2ppdC54ODZEaXYzMihvcDJHUFIpOwogICAgICAgICAgICAgCiAgICAgICAg
IGlmIChvcDJUZW1wR1BSICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICB1bmxvY2sob3Ay
VGVtcEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljMzJfNjQuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OCw4ICs4
NTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgSnVt
cCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMigtMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhp
cyk7Ci0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJsZXIuaWRpdmxfcihyZWdU
Mik7CisgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgeDg2RGl2MzIocmVnVDIp
OwogICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1
YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMSkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhpcyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyMyw4ICs2MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2Qo
SW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gz
MihOb3RFcXVhbCwgZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwogICAgIGRl
bm9taW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwotICAgIG1fYXNzZW1ibGVyLmNkcSgpOwotICAg
IG1fYXNzZW1ibGVyLmlkaXZsX3IoZWN4KTsKKyAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIo
KTsKKyAgICB4ODZEaXYzMihlY3gpOwogICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKICAgICBudW1lcmF0b3JQb3NpdGl2
ZS5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0
aW9uQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNRnVuY3Rpb25Db21waWxlci5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NjMsOCArNzYzLDggQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKICAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEs
IFg4NlJlZ2lzdGVyczo6ZWN4KTsKICAgICAgICAgICAgIGlmIChvcCA9PSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpTRGl2IHx8IG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlNNb2QpIHsKLSAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKLSAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5pZGl2bF9yKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICAgICAgICAgICAgICB4ODZDb252ZXJ0
VG9Eb3VibGVXb3JkMzIoKTsKKyAgICAgICAgICAgICAgICB4ODZEaXYzMihYODZSZWdpc3RlcnM6
OmVjeCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9
PSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVRGl2IHx8IG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6
OlVNb2QpOwogICAgICAgICAgICAgICAgIHhvcjMyKFg4NlJlZ2lzdGVyczo6ZWR4LCBYODZSZWdp
c3RlcnM6OmVkeCk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNS0xMS0xMCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEIzIHNob3VsZCBiZSBhYmxlIHRv
IGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggQ2hpbGxEaXYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWRlZCB0byBiZWVmIHVwIHNvbWUgY29tcGlsZXIg
YWxnb3JpdGhtcy4gQWxsIG9mIHRoZSBoYXJkZW5pbmcgd2FzIGFib3V0IG1ha2luZyB0aGVtCisg
ICAgICAgIHdvcmsgd2l0aCBvYmplY3RzIHRoYXQgaGF2ZSBtb3ZlIHNlbWFudGljcyBidXQgbm90
IGNvcHkgc2VtYW50aWNzLiBUaGlzIGFyaXNlcyBpbiBCMworICAgICAgICBiYXNpYyBibG9jayBp
bnNlcnRpb24gc2V0cy4KKworICAgICAgICAqIHd0Zi9CdWJibGVTb3J0Lmg6CisgICAgICAgIChX
VEY6OmJ1YmJsZVNvcnQpOgorICAgICAgICAqIHd0Zi9JbnNlcnRpb24uaDoKKyAgICAgICAgKFdU
Rjo6SW5zZXJ0aW9uOjpJbnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmluZGV4
KToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjplbGVtZW50KToKKyAgICAgICAgKFdURjo6SW5z
ZXJ0aW9uOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpleGVjdXRlSW5zZXJ0aW9ucyk6CisK
IDIwMTUtMTEtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIFVzZSBDUk9TU19QTEFURk9STV9DT05URVhUX01FTlVTCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9CdWJibGVTb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
QnViYmxlU29ydC5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9CdWJibGVT
b3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDggQEAgdm9pZCBidWJibGVTb3J0KEl0
ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcgogewogICAgIGJ1YmJsZVNvcnQoCiAgICAgICAgIGJlZ2lu
LCBlbmQsCi0gICAgICAgIFtdICh0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRv
clR5cGU+Ojp2YWx1ZV90eXBlIGxlZnQsCi0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJh
dG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1ZV90eXBlIHJpZ2h0KSAtPiBib29sIHsKKyAg
ICAgICAgW10gKGNvbnN0IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlw
ZT46OnZhbHVlX3R5cGUmIGxlZnQsCisgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBzdGQ6Oml0
ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1ZV90eXBlJiByaWdodCkgLT4gYm9vbCB7
CiAgICAgICAgICAgICByZXR1cm4gbGVmdCA8IHJpZ2h0OwogICAgICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBjbGFzcyBJbnNlcnRpb24gewogcHVibGljOgogICAgIEluc2VydGlvbigpIHsgfQotICAg
IAotICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIFQgZWxlbWVudCkKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVSYmIGVsZW1lbnQpCiAg
ICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAg
ICAgICAgLCBtX2VsZW1lbnQoc3RkOjpmb3J3YXJkPFU+KGVsZW1lbnQpKQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAg
IFQgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIGNvbnN0IFQmIGVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBUJiBlbGVtZW50KCkgeyBy
ZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0
aW9uJiBvdGhlcikgY29uc3QKICAgICB7CkBAIC02Niw4ICs2OCw4IEBAIHZvaWQgZXhlY3V0ZUlu
c2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYKICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBp
bnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7
CiAgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAg
ICAgICAgICB0YXJnZXRbaV0gPSB0YXJnZXRbaSAtIGluZGV4T2Zmc2V0XTsKLSAgICAgICAgdGFy
Z2V0W2ZpcnN0SW5kZXhdID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uZWxlbWVudCgp
OworICAgICAgICAgICAgdGFyZ2V0W2ldID0gV1RGOjptb3ZlKHRhcmdldFtpIC0gaW5kZXhPZmZz
ZXRdKTsKKyAgICAgICAgdGFyZ2V0W2ZpcnN0SW5kZXhdID0gV1RGOjptb3ZlKGluc2VydGlvbnNb
aW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKSk7CiAgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0
SW5kZXg7CiAgICAgfQogICAgIGluc2VydGlvbnMucmVzaXplKDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265255</attachid>
            <date>2015-11-10 17:42:20 -0800</date>
            <delta_ts>2015-11-10 21:53:02 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>110914</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNSBA
QAorMjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggQ2hpbGxEaXYKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdl
IGlzIGFib3V0IGEgbG90IG1vcmUgdGhhbiBDaGlsbERpdi4gSSBwaWNrZWQgdGhhdCBhcyB0aGUg
bmV4dCB0aGluZyB0byBsb3dlcgorICAgICAgICBiZWNhdXNlIEkga25ldyB0aGF0IGl0IHdvdWxk
IGZvcmNlIG1lIHRvIGNvbWUgdXAgd2l0aCBhIHNlbnNpYmxlIGlkaW9tIGZvciBkb2luZworICAg
ICAgICBzdGVwd2lzZSBsb3dlcmluZ3MgdGhhdCByZXF1aXJlIGJyZWFraW5nIGJhc2ljIGJsb2Nr
cy4gVGhlIGlkZWEgaXMgdGhhdCB5b3Ugd2FudCB0bworICAgICAgICB3cml0ZSBhIGxvb3AgdGhh
dCBpdGVyYXRlcyBmb3J3YXJkIG92ZXIgdGhlIHByb2dyYW0sIHdoaWNoIHR1cm5zIHNvbWUgb3Bl
cmF0aW9ucyB0aGF0CisgICAgICAgIGN1cnJlbnRseSBhcmUganVzdCBzaW5nbGUgVmFsdWVzIGlu
dG8gYW4gZW50aXJlIGxpdHRsZSBzdWItQ0ZHcy4gVGhhdCByZXF1aXJlcyBzcGxpdHRpbmcKKyAg
ICAgICAgdGhlIGJsb2NrIHRoYXQgY29udGFpbmVkIHRoZSBvcmlnaW5hbCBWYWx1ZS4gVGhhdCdz
IHRyaWNreSBpZiB5b3UgdGhlbiB3YW50IHRvIGtlZXAKKyAgICAgICAgaXRlcmF0aW5nOiB0aGUg
aW5kZXggb2YgdGhlIFZhbHVlIHlvdSB3ZXJlIGxhc3QgbG9va2luZyBhdCBoYXMgbm93IGNoYW5n
ZWQgYW5kIHlvdXIKKyAgICAgICAgSW5zZXJ0aW9uU2V0cyBhcmUgbm93IGludmFsaWQuCisKKyAg
ICAgICAgVGhpcyBpbnRyb2R1Y2VzIGFuIGlkaW9tIHRoYXQgaGFuZGxlcyB0aGlzLiBJdCdzIEJs
b2NrSW5zZXJ0aW9uU2V0OjpzcGxpdEJlZm9yZSgpLiBUaGUKKyAgICAgICAgaWRlYSBpcyB0aGF0
IGl0IHVzZXMgdGhlIGN1cnJlbnQgYmxvY2sgYmVmb3JlIHRoZSBzcGxpdCBhcyB0aGUgY29udGlu
dWF0aW9uIGFmdGVyIHRoZQorICAgICAgICBzcGxpdC4gV2hlbiB5b3UgY2FsbCBzcGxpdEJlZm9y
ZSgpLCB5b3UgcGFzcyBpdCB5b3VyIGxvb3AgaW5kZXggYW5kIHlvdXIgSW5zZXJ0aW9uU2V0Cisg
ICAgICAgIChpZiBhcHBsaWNhYmxlKS4gSXQgbWFrZXMgc3VyZSB0aGF0IGl0IGNoYW5nZXMgdGhv
c2UgYXV4aWxpYXJ5IHRoaW5ncyBpbiBzdWNoIGEgd2F5IHRoYXQKKyAgICAgICAgeW91IGNhbiBr
ZWVwIGxvb3BpbmcuCisKKyAgICAgICAgVGhpcyB1bmNvdmVyZWQgc29tZSBidWdzLCBzaW5jZSB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgd2UncmUgY29tcGlsaW5nIGNyb3NzIGVkZ2VzLgor
CisgICAgICAgIEJlY2F1c2UgQ2hpbGxEaXYgaXMgcmVhbGx5IGEgZGl2aXNpb24sIEkgYWxzbyBo
YWQgdG8gd3JpdGUgYSBidW5jaCBvZiBjb2RlIHRvIHN1cHBvcnQKKyAgICAgICAgdGhlIG9yZGlu
YXJ5IEIzIERpdi4gV2hpbGUgZG9pbmcgdGhhdCwgSSByZWFsaXplZCB0aGF0IHRoZXJlIHdhcyBh
c3ltbWV0cnkgdG8gdGhhdAorICAgICAgICBjb25zdG5lc3Mgb2YgdGhlIFZhbHVlIGNvbnN0YW50
IGZvbGRpbmcgbWV0aG9kcywgc28gSSBmaXhlZCB0aGF0IGFzIHdlbGwuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6eDg2Q29udmVydFRvRG91YmxlV29yZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246Ong4NkRpdjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Om5lZzMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om11bDY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Ong4NkNvbnZlcnRUb0RvdWJsZVdvcmQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4ODZEaXY2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgICogYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZsX3IpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZxX3IpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OmNtcGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNkcSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y2RxcSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6ZnN0cHMpOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6cmVwbGFjZUxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6YXBwZW5kSW50
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVwbGFjZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6dXBkYXRlUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
QjM6OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5oOgorICAg
ICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJh
c2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2Nr
OjpwcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpmcmVxdWVuY3kp
OgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZXBsYWNlTGFzdFdpdGhOZXcpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3Vj
Y2Vzc29ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjp1cGRhdGVQcmVk
ZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAg
ICAqIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIz
OjpCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6
QjM6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpCMzo6QmxvY2tJ
bnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChKU0M6OkIzOjpCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkJsb2NrSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkIzOjppc1JlcHJlc2Vu
dGFibGVBcyk6CisgICAgICAgIChKU0M6OkIzOjpjaGlsbERpdik6CisgICAgICAgICogYjMvQjND
b25zdDMyVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdDMyVmFsdWU6OmJpdE9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZh
bHVlOjpiaXRYb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnNo
bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6c1NockNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
Q29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMy
VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1
ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dCk6CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0
NjRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkaXZDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmJpdFhvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c2hsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6
OkNvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDY0VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZh
bHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1
ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpn
cmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFi
b3ZlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50KToK
KyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKiBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjpyZXBsYWNlU3VjY2Vzc29yKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAgICogYjMv
QjNDb250cm9sVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6Ymxv
Y2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6ZnJlcXVlbmN5
KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlv
blNldDo6aW5zZXJ0SW50Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0
OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOgorICAgICAgICAqIGIz
L0IzTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omxvd2VyTWFjcm9z
KToKKyAgICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2Vy
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmFkZEJvb2xDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnJl
c2V0VmFsdWVPd25lcnMpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OnRha2VCeXByb2R1Y3RzKToKKyAgICAgICAgKiBiMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBi
My9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphZGRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiaXRBbmRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Yml0WG9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnNobENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzU2hyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnpTaHJDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bm90
RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc1RoYW5Db25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6CisgICAgICAgICogYjMvQjNW
YWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNVcnNoaWZ0NjRWYWxpZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmlzWDg2RGl2SGVscGVyVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpp
c1g4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMlZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
aXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmlzWDg2RGl2MzJWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzWDg2RGl2NjRWYWxp
ZCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNpbXBsaWZ5Q0ZH
KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2VHdpY2UpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2NjQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhEaXYpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhNb2QpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OmJ1aWxkQmluYXJ5STMyKToKKwogMjAxNS0xMS0xMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBDcmVhdGUgYW4gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIg
YWJzdHJhY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
OTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCwxMCBAQAogCQkw
RjMzOEUxNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYg
LyogQjNWYWx1ZUtleS5jcHAgKi87IH07CiAJCTBGMzM4RTE1MUJGMDI3NkMwMDEzQzg4RiAvKiBC
M1ZhbHVlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjMzOEUwOTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5oICovOyB9OwogCQkwRjMz
OEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTBBMUJGMDI3NkMwMDEzQzg4
RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oICovOyB9OworCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4
OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5jcHAgKi87IH07CisJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Js
b2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5o
ICovOyB9OworCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxOTFC
RjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87IH07CisJCTBGMzM4RTFFMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dl
ck1hY3Jvcy5oICovOyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0
QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRB
MTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5oICovOyB9OwogCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovOyB9OwpAQCAt
MjMzOSw2ICsyMzQzLDEwIEBACiAJCTBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVLZXku
Y3BwOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzM4RTA5MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVLZXkuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhG
IC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzVmFsdWVLZXlJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlS2V5SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxNzFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4
OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTG93ZXJNYWNyb3MuY3BwOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xv
d2VyTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJNYWNy
b3MuaDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcv
REZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5
cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9
IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00NDMyLDYgKzQ0NDAsOCBAQAogCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suaCAqLywKIAkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Js
b2NrSW5saW5lcy5oICovLAogCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tVdGlscy5oICovLAorCQkJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjMzOERGNzFCRTk2QUE4MDAxM0M4OEYgLyogQjND
Q2FsbFZhbHVlLmNwcCAqLywKIAkJCQkwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2Fs
bFZhbHVlLmggKi8sCkBAIC00NDczLDYgKzQ0ODMsOCBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYw
MDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAw
ODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBG
Rjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oICovLAorCQkJCTBGMzM4RTE5MUJGMjg2RUEw
MDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLywKKwkJCQkwRjMzOEUxQTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovLAogCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAogCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLywKIAkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNN
ZW1vcnlWYWx1ZS5jcHAgKi8sCkBAIC02NjY2LDYgKzY2NzgsNyBAQAogCQkJCTBGRUM4NTM4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ1NzA0MTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjUsNiArNjc3OCw3IEBACiAJCQkJQzIyMzlE
MTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjMzOEUxQzFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0lu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2
IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1
QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApA
QCAtODMxMCw2ICs4MzI0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0
ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3
QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAw
NjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4
RTFEMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkQ0REREMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04NDgyLDYgKzg0OTcsNyBAQAog
CQkJCTBGRUEwQTFFMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzI3MTg3REZERUMwMDgzQjY4NyAvKiBGVExB
dmFpbGFibGVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwOTE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzM4
RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZU
TERhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAko
cmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDMwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxfaTMycihzcmMsIGltbS5tX3ZhbHVl
LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkNv
bnZlcnRUb0RvdWJsZVdvcmQzMihSZWdpc3RlcklEIGVheCwgUmVnaXN0ZXJJRCBlZHgpCisgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKGVheCwgZWF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChlZHgsIGVkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7Cisg
ICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIH0KKworICAgIHZvaWQgeDg2
RGl2MzIoUmVnaXN0ZXJJRCBkZW5vbWluYXRvcikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmlkaXZsX3IoZGVub21pbmF0b3IpOworICAgIH0KKworICAgIHZvaWQgeDg2RGl2MzIoUmVnaXN0
ZXJJRCBlYXgsIFJlZ2lzdGVySUQgZWR4LCBSZWdpc3RlcklEIGRlbm9taW5hdG9yKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChlYXgsIGVheCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZWR4LCBlZHggPT0gWDg2UmVnaXN0ZXJzOjplZHgpOworICAg
ICAgICB4ODZEaXYzMihkZW5vbWluYXRvcik7CisgICAgfQorCiAgICAgdm9pZCBuZWczMihSZWdp
c3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5uZWdsX3Ioc3JjRGVz
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4Niw2ICszODYsMzAgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5pbXVscV9y
cihzcmMsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQ2NCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jZHFxKCk7CisgICAgfQorCisgICAg
dm9pZCB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoUmVnaXN0ZXJJRCByYXgsIFJlZ2lzdGVySUQg
cmR4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyYXgsIHJheCA9PSBYODZSZWdpc3Rl
cnM6OmVheCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXJz
OjplZHgpOworICAgICAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHg4NkRpdjY0KFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5pZGl2cV9yKGRlbm9taW5hdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkRp
djY0KFJlZ2lzdGVySUQgcmF4LCBSZWdpc3RlcklEIHJkeCwgUmVnaXN0ZXJJRCBkZW5vbWluYXRv
cikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmF4LCByYXggPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJkeCwgcmR4ID09IFg4NlJlZ2lzdGVyczo6
ZWR4KTsKKyAgICAgICAgeDg2RGl2NjQoZGVub21pbmF0b3IpOworICAgIH0KKwogICAgIHZvaWQg
bmVnNjQoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubmVncV9y
KGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjIsNiArOTYyLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19FdiwgR1JP
VVAzX09QX0lESVYsIGRzdCk7CiAgICAgfQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICB2b2lkIGlk
aXZxX3IoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9JRElWLCBkc3QpOworICAgIH0KKyNlbmRpZiAv
LyBDUFUoWDg2XzY0KQorCiAgICAgLy8gQ29tcGFyaXNvbnM6CiAKICAgICB2b2lkIGNtcGxfcnIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpAQCAtMTI4NCw2ICsxMjkxLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0NEUSk7CiAgICAgfQogCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICB2b2lkIGNkcXEoKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfQ0RRKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZvaWQgZnN0cHMo
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wKE9QX0VTQ0FQRV9EOSwgRVNDQVBFX0Q5X0ZTVFBfc2luZ2xlUmVhbCwgYmFzZSwg
b2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCi0jaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgewpAQCAtNTIsNiArNTQsMjkgQEAgdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQo
VmFsdWUqIHZhbHVlKQogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiB9CiAKK3ZvaWQgQmFz
aWNCbG9jazo6cmVwbGFjZUxhc3QoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogdmFsdWUpCit7Cisg
ICAgcHJvYy5kZWxldGVWYWx1ZShsYXN0KCkpOworICAgIGxhc3QoKSA9IHZhbHVlOworfQorCitW
YWx1ZSogQmFzaWNCbG9jazo6YXBwZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBPcmln
aW4gb3JpZ2luLCBUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCit7CisgICAgVmFsdWUqIHJlc3Vs
dCA9IHByb2MuYWRkSW50Q29uc3RhbnQob3JpZ2luLCB0eXBlLCB2YWx1ZSk7CisgICAgYXBwZW5k
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmFsdWUqIEJhc2ljQmxvY2s6OmFw
cGVuZEludENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRf
dCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYXBwZW5kSW50Q29uc3RhbnQocHJvYywgbGlrZVZhbHVl
LT5vcmlnaW4oKSwgbGlrZVZhbHVlLT50eXBlKCksIHZhbHVlKTsKK30KKworYm9vbCBCYXNpY0Js
b2NrOjpyZXBsYWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
eworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+cmVwbGFjZVN1Y2Nlc3Nv
cihmcm9tLCB0byk7Cit9CisKIGJvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2spCiB7CiAgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9j
ayk7CkBAIC02Nyw2ICs5MiwxMSBAQCBib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpCiAgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8p
OwogfQogCit2b2lkIEJhc2ljQmxvY2s6OnVwZGF0ZVByZWRlY2Vzc29ycygpCit7CisgICAgQjM6
OnVwZGF0ZVByZWRlY2Vzc29ycyh0aGlzKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5k
ZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTQgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAj
aW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgogI2lu
Y2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAK
K2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgSW5zZXJ0aW9uU2V0OwogY2xhc3MgUHJv
Y2VkdXJlOwogY2xhc3MgVmFsdWU7CkBAIC02OCwxMCArNzEsMTcgQEAgcHVibGljOgogICAgIFZh
bHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZXBsYWNlTGFzdChQcm9jZWR1cmUmLCBWYWx1ZSopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFsdWVUeXBlKiBhcHBlbmRO
ZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKIAorICAgIFZhbHVlKiBhcHBlbmRJbnRDb25z
dGFudChQcm9jZWR1cmUmLCBPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVl
KiBhcHBlbmRJbnRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90
IHZhbHVlKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIHJlcGxhY2VMYXN0V2l0aE5ldyhQcm9jZWR1
cmUmLCBBcmd1bWVudHMuLi4pOworCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0
OwogICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKICAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CkBA
IC04Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpOwogICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxv
Y2tzKCkgY29uc3Q7CiAKKyAgICBib29sIHJlcGxhY2VTdWNjZXNzb3IoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8pOworCiAgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29u
c3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CiAgICAgQmFzaWNCbG9jayogcHJl
ZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2lu
ZGV4XTsgfQogICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CkBAIC05NCwxMiArMTA2LDE2IEBAIHB1Ymxp
YzoKICAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKICAgICBib29sIHJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CiAKKyAg
ICAvLyBVcGRhdGUgcHJlZGVjZXNzb3JzIHN0YXJ0aW5nIHdpdGggdGhlIHN1Y2Nlc3NvcnMgb2Yg
dGhpcyBibG9jay4KKyAgICB2b2lkIHVwZGF0ZVByZWRlY2Vzc29ycygpOworCiAgICAgZG91Ymxl
IGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0Owog
ICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTQgQEAg
VmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiBy
ZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICByZXBs
YWNlTGFzdChwcm9jZWR1cmUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5s
aW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAogewogICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9u
IDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwyMCBAQCBib29sIHJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHVwZGF0ZVByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBy
b290KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OworICAgIHdvcmts
aXN0LmFwcGVuZChyb290KTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7Cisg
ICAgICAgICAgICBpZiAoYWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29yLCBibG9jaykpCisgICAgICAg
ICAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3Nvcik7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIC8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRo
YXQgYXJlbid0IHJlYWNoYWJsZS4KIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVu
YW1lIERlbGV0ZUZ1bmN0b3I+CiB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KApAQCAtODIsMTQgKzk2
LDcgQEAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgKICAgICAgICAgICAgIGJsb2NrLT5wcmVkZWNl
c3NvcnMoKS5yZXNpemUoMCk7CiAgICAgfQogCi0gICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNC
bG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5wdXNo
KGJsb2Nrc1swXS5nZXQoKSk7Ci0gICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xp
c3QucG9wKCkpIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+
c3VjY2Vzc29yQmxvY2tzKCkpIHsKLSAgICAgICAgICAgIGFkZFByZWRlY2Vzc29yKHN1Y2Nlc3Nv
ciwgYmxvY2spOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChzdWNjZXNzb3IpOwotICAgICAg
ICB9Ci0gICAgfQorICAgIHVwZGF0ZVByZWRlY2Vzc29ycyhibG9ja3NbMF0uZ2V0KCkpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoIWJsb2Nrc1tpXSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMu
aCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KFByb2NlZHVy
ZSAmcHJvYykKKyAgICA6IG1fcHJvYyhwcm9jKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6
fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChCbG9ja0luc2VydGlvbiYmIGluc2VydGlvbikKK3sKKyAgICBtX2luc2VydGlvbnMuYXBwZW5k
KFdURjo6bW92ZShpbnNlcnRpb24pKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIGZy
ZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIGlu
c2VydChCbG9ja0luc2VydGlvbihpbmRleCwgV1RGOjptb3ZlKGJsb2NrKSkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZv
cmUoQmFzaWNCbG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHJldHVybiBp
bnNlcnQoYmVmb3JlLT5pbmRleCgpLCBmcmVxdWVuY3kgPT0gZnJlcXVlbmN5ID8gZnJlcXVlbmN5
IDogYmVmb3JlLT5mcmVxdWVuY3koKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9u
U2V0OjpzcGxpdEZvcndhcmQoCisgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkJiB2YWx1
ZUluZGV4LCBJbnNlcnRpb25TZXQqIGluc2VydGlvblNldCwgZG91YmxlIGZyZXF1ZW5jeSkKK3sK
KyAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisKKyAgICAvLyBDcmVh
dGUgYSBuZXcgYmxvY2sgdGhhdCB3aWxsIGdvIGp1c3QgYmVmb3JlICdibG9jaycsIGFuZCBtYWtl
IGl0IGNvbnRhaW4gZXZlcnl0aGluZyBwcmlvcgorICAgIC8vIHRvICd2YWx1ZUluZGV4Jy4KKyAg
ICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBpbnNlcnRCZWZvcmUoYmxvY2ssIGZyZXF1ZW5jeSk7Cisg
ICAgcmVzdWx0LT5tX3ZhbHVlcy5yZXNpemUodmFsdWVJbmRleCArIDEpOworICAgIGZvciAodW5z
aWduZWQgaSA9IHZhbHVlSW5kZXg7IGktLTspCisgICAgICAgIHJlc3VsdC0+bV92YWx1ZXNbaV0g
PSBibG9jay0+bV92YWx1ZXNbaV07CisKKyAgICAvLyBNYWtlIHRoZSBuZXcgYmxvY2sganVtcCB0
byAnYmxvY2snLgorICAgIHJlc3VsdC0+bV92YWx1ZXNbdmFsdWVJbmRleF0gPQorICAgICAgICBt
X3Byb2MuYWRkPENvbnRyb2xWYWx1ZT4oSnVtcCwgdmFsdWUtPm9yaWdpbigpLCBGcmVxdWVudGVk
QmxvY2soYmxvY2spKTsKKworICAgIC8vIElmIHdlIGhhZCBpbnNlcnRlZCB0aGluZ3MgaW50byAn
YmxvY2snIGJlZm9yZSB0aGlzLCBleGVjdXRlIHRob3NlIGluc2VydGlvbnMgbm93LgorICAgIGlm
IChpbnNlcnRpb25TZXQpCisgICAgICAgIGluc2VydGlvblNldC0+ZXhlY3V0ZShyZXN1bHQpOwor
CisgICAgLy8gUmVtb3ZlIGV2ZXJ5dGhpbmcgcHJpb3IgdG8gJ3ZhbHVlSW5kZXgnIGZyb20gJ2Js
b2NrJywgc2luY2UgdGhvc2UgdGhpbmdzIGFyZSBub3cgaW4gdGhlCisgICAgLy8gbmV3IGJsb2Nr
LgorICAgIGJsb2NrLT5tX3ZhbHVlcy5yZW1vdmUoMCwgdmFsdWVJbmRleCk7CisKKyAgICAvLyBU
aGlzIGlzIGJlaW5nIHVzZWQgaW4gYSBmb3J3YXJkIGxvb3Agb3ZlciAnYmxvY2snLiBVcGRhdGUg
dGhlIGluZGV4IG9mIHRoZSBsb29wIHNvIHRoYXQKKyAgICAvLyBpdCBjYW4gY29udGludWUgdG8g
dGhlIG5leHQgYmxvY2suCisgICAgdmFsdWVJbmRleCA9IDA7CisKKyAgICAvLyBGaXh1cCB0aGUg
cHJlZGVjZXNzb3JzIG9mICdibG9jaycuIFRoZXkgbm93IG11c3QganVtcCB0byB0aGUgbmV3IGJs
b2NrLgorICAgIHJlc3VsdC0+cHJlZGVjZXNzb3JzKCkgPSBXVEY6Om1vdmUoYmxvY2stPnByZWRl
Y2Vzc29ycygpKTsKKyAgICBibG9jay0+YWRkUHJlZGVjZXNzb3IocmVzdWx0KTsKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogcmVzdWx0LT5wcmVkZWNlc3NvcnMoKSkKKyAgICAg
ICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3IoYmxvY2ssIHJlc3VsdCk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sK
KyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55
IG9yZGVyLiBTbywgd2UgbmVlZCB0byBzb3J0IHRoZW0gYmVmb3JlCisgICAgLy8gcnVubmluZyBX
VEY6OmV4ZWN1dGVJbnNlcnRpb25zLiBXZSBzdHJvbmdseSBwcmVmZXIgYSBzdGFibGUgc29ydCBh
bmQgd2Ugd2FudCBpdCB0byBiZQorICAgIC8vIGZhc3QsIHNvIHdlIHVzZSBidWJibGUgc29ydC4K
KyAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkp
OworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9wcm9jLm1fYmxvY2tzLCBtX2luc2VydGlvbnMp
OworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmlj
dGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sg
bGlzdCBmcm9tIGdyb3dpbmcuCisgICAgbV9wcm9jLm1fYmxvY2tzLnJlbW92ZUFsbE1hdGNoaW5n
KAorICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiYgYmxvY2tQdHIpIC0+
IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFibG9ja1B0cjsKKyAgICAgICAgfSk7CisgICAg
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2Vz
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2MubV9ibG9ja3Muc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fcHJvYy5tX2Jsb2Nrc1tpXS0+bV9pbmRleCA9IGk7CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tJ
bnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
bG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNCbG9ja0luc2VydGlvblNldF9oCisjZGVmaW5lIEIzQmxvY2tJbnNlcnRpb25TZXRfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSA8
d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEluc2VydGlvblNldDsKKwordHlwZWRlZiBXVEY6
Okluc2VydGlvbjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IEJsb2NrSW5zZXJ0aW9uOwor
CitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25T
ZXQoUHJvY2VkdXJlJik7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9p
ZCBpbnNlcnQoQmxvY2tJbnNlcnRpb24mJik7CisKKyAgICAvLyBJbnNlcnQgYSBuZXcgYmxvY2sg
YXQgYSBnaXZlbiBpbmRleC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQodW5zaWduZWQgaW5kZXgs
IGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIC8vIEluc2VydHMgYSBuZXcgYmxvY2sg
YmVmb3JlIHRoZSBnaXZlbiBibG9jay4gVXN1YWxseSB5b3Ugd2lsbCBub3QgcGFzcyB0aGUgZnJl
cXVlbmN5CisgICAgLy8gYXJndW1lbnQuIFBhc3NpbmcgUE5hTiBjYXVzZXMgdXMgdG8ganVzdCB1
c2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgJ2JlZm9yZScgYmxvY2suIFRoYXQncworICAgIC8vIHVz
dWFsbHkgd2hhdCB5b3Ugd2FudC4KKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlLCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBBIGhlbHBl
ciB0byBzcGxpdCBhIGJsb2NrIHdoZW4gZm9yd2FyZCBpdGVyYXRpbmcgb3ZlciBpdC4gSXQgY3Jl
YXRlcyBhIG5ldyBibG9jayB0byBob2xkCisgICAgLy8gZXZlcnl0aGluZyBiZWZvcmUgdGhlIGlu
c3RydWN0aW9uIGF0IHZhbHVlSW5kZXguIFRoZSBjdXJyZW50IGJsb2NrIGlzIGxlZnQgd2l0aAor
ICAgIC8vIGV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHZhbHVlSW5kZXguIElmIHRoZSBvcHRpb25h
bCBJbnNlcnRpb25TZXQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZ2V0CisgICAgLy8gZXhlY3V0ZWQg
b24gdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2sgLSB0aGlzIG1ha2VzIHNlbnNlIGlmIHlvdSBoYWQg
cHJldmlvdXNseSBpbnNlcnRlZAorICAgIC8vIHRoaW5ncyBpbnRvIHRoZSBvcmlnaW5hbCBibG9j
aywgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2sgd2lsbCBiZSBpbmRleGVkIGlkZW50aWNh
bGx5CisgICAgLy8gdG8gaG9sZCB0aGlzIGJsb2NrIHdhcyBpbmRleGVkIGZvciBhbGwgdmFsdWVz
IHByaW9yIHRvIHZhbHVlSW5kZXguIEFmdGVyIHRoaXMgcnVucywgaXQKKyAgICAvLyBzZXRzIHZh
bHVlSW5kZXggdG8gemVyby4gVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIG1ldGhvZCBmb3Ig
dGhpbmdzIGxpa2U6CisgICAgLy8KKyAgICAvLyBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAw
OyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CisgICAgLy8gICAg
IFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAvLyAgICAgaWYgKHZh
bHVlLT5vcGNvZGUoKSA9PSBGb28pIHsKKyAgICAvLyAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yID0KKyAgICAvLyAgICAgICAgICAgICBtX2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9y
d2FyZChibG9jaywgdmFsdWVJbmRleCwgJm1faW5zZXJ0aW9uU2V0KTsKKyAgICAvLyAgICAgICAg
IC4uLiAvLyBOb3cgeW91IGNhbiBhcHBlbmQgdG8gcHJlZGVjZXNzb3IsIGluc2VydCBuZXcgYmxv
Y2tzIGJlZm9yZSAnYmxvY2snLCBhbmQKKyAgICAvLyAgICAgICAgIC4uLiAvLyB5b3UgY2FuIHVz
ZSBtX2luc2VydGlvblNldCB0byBpbnNlcnQgbW9yZSB0aGluZyBiZWZvcmUgJ3ZhbHVlJy4KKyAg
ICAvLyAgICAgICAgIHByZWRlY2Vzc29yLT51cGRhdGVQcmVkZWNlc3NvcnMoKTsKKyAgICAvLyAg
ICAgfQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgaG93IHVzdWFsbHkgdGhpcyBpZGlv
bSBlbmRzIGluIGEgYWxsIHRvIHVwZGF0ZVByZWRlY2Vzc29ycygpLCB3aGljaCBlbnN1cmVzIHRo
YXQgdGhlCisgICAgLy8gcHJlZGVjZXNzb3JzIGludm9sdmVkIGluIGFueSBvZiB0aGUgbmV3IGNv
bnRyb2wgZmxvdyB0aGF0IHlvdSd2ZSBjcmVhdGVkIGFyZSB1cCB0byBkYXRlLgorICAgIEJhc2lj
QmxvY2sqIHNwbGl0Rm9yd2FyZCgKKyAgICAgICAgQmFzaWNCbG9jayosIHVuc2lnbmVkJiB2YWx1
ZUluZGV4LCBJbnNlcnRpb25TZXQqID0gbnVsbHB0ciwKKyAgICAgICAgZG91YmxlIGZyZXF1ZW5j
eSA9IFBOYU4pOworICAgIAorICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIFBy
b2NlZHVyZSYgbV9wcm9jOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRp
b25zOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsMjQg
QEAgaW5saW5lIGJvb2wgaXNSZXByZXNlbnRhYmxlQXMoZG91YmxlIHZhbAogICAgIHJldHVybiBp
c1JlcHJlc2VudGFibGVBc0ltcGw8UmVzdWx0VHlwZSwgZG91YmxlLCBpbnQ2NF90Pih2YWx1ZSk7
CiB9CiAKK2lubGluZSBpbnQzMl90IGNoaWxsRGl2KGludDMyX3QgbnVtLCBpbnQzMl90IGRlbikK
K3sKKyAgICBpZiAoIWRlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGRlbiA9PSAtMSAm
JiBudW0gPT0gLTIxNDc0ODM2NDcgLSAxKQorICAgICAgICByZXR1cm4gbnVtOworICAgIHJldHVy
biBudW0gLyBkZW47Cit9CisKK2lubGluZSBpbnQ2NF90IGNoaWxsRGl2KGludDY0X3QgbnVtLCBp
bnQ2NF90IGRlbikKK3sKKyAgICBpZiAoIWRlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KGRlbiA9PSAtMSAmJiBudW0gPT0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdsbCAtIDEpCisgICAgICAg
IHJldHVybiBudW07CisgICAgcmV0dXJuIG51bSAvIGRlbjsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMjYgKzQ3LDEzMyBAQCBWYWx1ZSogQ29uc3QzMlZhbHVlOjphZGRDb25zdGFudChQ
cm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFs
dWUgKyBvdGhlcik7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OmFkZENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRk
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+
YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVlOjpzdWJD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAg
ICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5h
c0ludDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudChQcm9j
ZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmRp
dkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAorewor
ICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBjaGlsbERpdihtX3ZhbHVl
LCBvdGhlci0+YXNJbnQzMigpKSk7Cit9CisKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdEFuZENv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAg
IGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJl
dHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICYgb3RoZXItPmFz
SW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdE9yQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRP
ckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIHwgb3RoZXIt
PmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdFhvckNvbnN0YW50KFBy
b2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6
Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgXiBv
dGhlci0+YXNJbnQzMigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6c2hsQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVl
OjpzaGxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QK
IHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSA8PCAo
b3RoZXItPmFzSW50MzIoKSAmIDMxKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnNTaHJD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDMxKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFs
dWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1Zh
bHVlKiBDb25zdDMyVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmln
aW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fdmFsdWUp
ID4+IChvdGhlci0+YXNJbnQzMigpICYgMzEpKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1
ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFs
dWU6OmVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICgh
b3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJl
dHVybiB0cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0ludDMyKCkpOwogfQogCi1UcmlTdGF0
ZSBDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJp
U3RhdGUgQ29uc3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhlci0+YXNJbnQz
MigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPCBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVh
dGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0MzJWYWx1
ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAg
aWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAg
ICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPiBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJp
U3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1
cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA8PSBvdGhlci0+
YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyRXF1YWxDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmdyZWF0ZXJF
cXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVy
LT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4g
dHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29u
c3QzMlZhbHVlOjphYm92ZUNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENv
bnN0MzJWYWx1ZTo6YWJvdmVDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CiAgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+IHN0
YXRpY19jYXN0PHVpbnQzMl90PihvdGhlci0+YXNJbnQzMigpKSk7CiB9CiAKLVRyaVN0YXRlIENv
bnN0MzJWYWx1ZTo6YmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBD
b25zdDMyVmFsdWU6OmJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkgPCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQogCi1UcmlTdGF0ZSBD
b25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlT
dGF0ZSBDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1p
eGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQzMl90Piht
X3ZhbHVlKSA+PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQog
Ci1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFudChjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAg
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDI1ICs0MiwyNiBA
QCBwdWJsaWM6CiAKICAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qgb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1
cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRBbmRDb25z
dGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVl
KiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHNobENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHNTaHJDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiB6U2hyQ29uc3RhbnQo
UHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFRyaVN0YXRl
IGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0
ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJp
U3RhdGUgbGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBhYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSog
c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBWYWx1ZSogZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYml0T3JDb25z
dGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAg
IFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSog
elNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyVGhh
bkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgbGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0
YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVs
b3dFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAKIHBy
b3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRl
ciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDEyNiArNDcsMTMzIEBAIFZhbHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2Nl
ZHUKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAr
IHN0YXRpY19jYXN0PGludDY0X3Q+KG90aGVyKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6
OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUq
IENvbnN0NjRWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgKyBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6
c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSog
Q29uc3Q2NFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSAtIG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpi
aXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVl
KiBDb25zdDY0VmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigp
LCBjaGlsbERpdihtX3ZhbHVlLCBvdGhlci0+YXNJbnQ2NCgpKSk7Cit9CisKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBt
X3ZhbHVlICYgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OmJp
dE9yQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSog
Q29uc3Q2NFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigp
LCBtX3ZhbHVlIHwgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6
OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFs
dWUqIENvbnN0NjRWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3Jp
Z2luKCksIG1fdmFsdWUgXiBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRW
YWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitW
YWx1ZSogQ29uc3Q2NFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmln
aW4oKSwgbV92YWx1ZSA8PCAob3RoZXItPmFzSW50MzIoKSAmIDYzKSk7CiB9CiAKLVZhbHVlKiBD
b25zdDY0VmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikg
Y29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OnNTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZh
bHVlPihvcmlnaW4oKSwgbV92YWx1ZSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYzKSk7CiB9CiAK
LVZhbHVlKiBDb25zdDY0VmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5o
YXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG1fdmFsdWUpID4+IChvdGhlci0+YXNJbnQzMigpICYgNjMpKSk7CiB9CiAKLVRy
aVN0YXRlIENvbnN0NjRWYWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitU
cmlTdGF0ZSBDb25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID09IG90aGVyLT5hc0ludDY0
KCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQog
ICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1
ZSAhPSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNz
VGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6
bGVzc1RoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0
dXJuIHRyaVN0YXRlKG1fdmFsdWUgPCBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUg
Q29uc3Q2NFZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1Ry
aVN0YXRlIENvbnN0NjRWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJu
IE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPiBvdGhlci0+YXNJ
bnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Omxlc3NFcXVhbENvbnN0
YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2
NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUo
bV92YWx1ZSA8PSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVl
OjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25z
dDY0VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QK
IHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+PSBvdGhlci0+YXNJbnQ2NCgpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUNvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJvdmVDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtX3ZhbHVlKSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihvdGhlci0+YXNJbnQ2NCgpKSk7
CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJl
dHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50
NjRfdD4obV92YWx1ZSkgPCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3RoZXItPmFzSW50NjQoKSkp
OwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1ZSog
b3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihtX3ZhbHVlKSA+PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3RoZXIt
PmFzSW50NjQoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93RXF1YWxDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93RXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMTkyMjU5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDI1ICs0MiwyNiBAQCBwdWJsaWM6CiAKICAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJv
Y2VkdXJlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBhZGRDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBz
dWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYs
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHNobENvbnN0YW50KFBy
b2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIHNTaHJD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZh
bHVlKiB6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLQotICAgIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBsZXNzRXF1YWxDb25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGdyZWF0ZXJFcXVhbENvbnN0
YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGJlbG93Q29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBhYm92ZUVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBi
ZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1
ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYml0QW5kQ29u
c3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzaGxDb25zdGFudChQ
cm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVl
KiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1YWxDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBU
cmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlQ29uc3Rh
bnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBiZWxv
d0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgYWJvdmVFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRl
ciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDU2ICs0Nyw2MyBAQCBWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRk
Q29uc3RhbnQoUHJvCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdp
bigpLCBtX3ZhbHVlICsgc3RhdGljX2Nhc3Q8ZG91YmxlPihvdGhlcikpOwogfQogCi1WYWx1ZSog
Q29uc3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFz
RG91YmxlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxD
b25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIG90aGVyLT5hc0RvdWJsZSgpKTsK
IH0KIAotVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OnN1YkNvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+
YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmVxdWFsQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmRpdkNvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlm
ICghb3RoZXItPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLyBvdGhlci0+
YXNEb3VibGUoKSk7Cit9CisKK1RyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6OmVxdWFsQ29uc3Rh
bnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJs
ZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUo
bV92YWx1ZSA9PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29u
c3REb3VibGVWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlICE9IG90aGVyLT5hc0RvdWJsZSgp
KTsKIH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1
ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpsZXNzVGhhbkNvbnN0
YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3Vi
bGUoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRl
KG1fdmFsdWUgPCBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91Ymxl
VmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUg
Q29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCiAgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzRG91
YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpsZXNzRXF1YWxDb25zdGFu
dChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjpsZXNzRXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+
aGFzRG91YmxlKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0
cmlTdGF0ZShtX3ZhbHVlIDw9IG90aGVyLT5hc0RvdWJsZSgpKTsKIH0KIAotVHJpU3RhdGUgQ29u
c3REb3VibGVWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAor
VHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAg
ICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTcgKzQwLDE4IEBAIHB1YmxpYzoKICAgICAKICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAKLSAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
KSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
LCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVl
KiBzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBuZWdDb25zdGFu
dChQcm9jZWR1cmUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50
KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbm90RXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0
YXRlIGxlc3NUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
KyAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFu
dChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShy
ZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiwyMiBAQCBDb250cm9sVmFsdWU6On5D
b250cm9sVmFsdWUoKQogewogfQogCi12b2lkIENvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcChj
b25zdCBGcmVxdWVudGVkQmxvY2smIGRlc3RpbmF0aW9uKQorYm9vbCBDb250cm9sVmFsdWU6OnJl
cGxhY2VTdWNjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29y
IDogbV9zdWNjZXNzb3JzKSB7CisgICAgICAgIGlmIChzdWNjZXNzb3IuYmxvY2soKSA9PSBmcm9t
KSB7CisgICAgICAgICAgICBzdWNjZXNzb3IuYmxvY2soKSA9IHRvOworICAgICAgICAgICAgcmVz
dWx0ID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gS2VlcCBsb29waW5nIGJlY2F1c2UgaXQncyB2
YWxpZCBmb3IgYSBzdWNjZXNzb3IgdG8gYmUgbWVudGlvbmVkIG11bHRpcGxlIHRpbWVzLAorICAg
ICAgICAgICAgLy8gbGlrZSBpZiBtdWx0aXBsZSBzd2l0Y2ggY2FzZXMgaGF2ZSB0aGUgc2FtZSB0
YXJnZXQuCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBD
b250cm9sVmFsdWU6OmNvbnZlcnRUb0p1bXAoQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiB7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSB0aGlzLT5pbmRleCgpOwogICAgIE9yaWdpbiBvcmlnaW4gPSB0
aGlzLT5vcmlnaW4oKTsKQEAgLTQ0LDcgKzU5LDcgQEAgdm9pZCBDb250cm9sVmFsdWU6OmNvbnZl
cnRUb0p1bXAoY29uc3QgRgogCiAgICAgdGhpcy0+Q29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVl
KCk7CiAKLSAgICBuZXcgKHRoaXMpIENvbnRyb2xWYWx1ZShpbmRleCwgSnVtcCwgb3JpZ2luLCBk
ZXN0aW5hdGlvbik7CisgICAgbmV3ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9y
aWdpbiwgRnJlcXVlbnRlZEJsb2NrKGRlc3RpbmF0aW9uKSk7CiAKICAgICB0aGlzLT5vd25lciA9
IG93bmVyOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRy
b2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICBj
b25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNz
b3JzOyB9CiAgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yczsgfQogCisgICAgYm9vbCByZXBsYWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKTsKKwogICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFrZW4oKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG9wY29kZSgpID09IEp1bXAgfHwgb3Bjb2RlKCkgPT0g
QnJhbmNoKTsKQEAgLTg1LDcgKzg3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3VjY2Vz
c29yKDEpOwogICAgIH0KIAotICAgIHZvaWQgY29udmVydFRvSnVtcChjb25zdCBGcmVxdWVudGVk
QmxvY2smIGRlc3RpbmF0aW9uKTsKKyAgICB2b2lkIGNvbnZlcnRUb0p1bXAoQmFzaWNCbG9jayog
ZGVzdGluYXRpb24pOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMTkyMjU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKICNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNM
b3dlck1hY3Jvcy5oIgogI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgogI2luY2x1ZGUgIkIzTW92
ZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCkBAIC02Niw2ICs2Nyw4IEBA
IHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgZGF0YUxv
Zyhwcm9jZWR1cmUpOwogICAgIH0KIAorICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7CisKICAg
ICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgIAogICAgIC8vIEZJWE1FOiBBZGQgbW9y
ZSBvcHRpbWl6YXRpb25zIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIGJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQogICAgIEJhc2ljQmxvY2sqJiBibG9jaygpIHsg
cmV0dXJuIG1fYmxvY2s7IH0KICAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBjb25zdCB7
IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorICAgIEZyZXF1ZW5jeUNsYXNzJiBmcmVxdWVuY3koKSB7
IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRp
b25TZXQuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMjIgQEAKICNp
ZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvQnViYmxlU29ydC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
IAorVmFsdWUqIEluc2VydGlvblNldDo6aW5zZXJ0SW50Q29uc3RhbnQoc2l6ZV90IGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGlu
c2VydFZhbHVlKGluZGV4LCBtX3Byb2NlZHVyZS5hZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUs
IHZhbHVlKSk7Cit9CisKK1ZhbHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEludENvbnN0YW50KHNp
emVfdCBpbmRleCwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gaW5zZXJ0SW50Q29uc3RhbnQoaW5kZXgsIGxpa2VWYWx1ZS0+b3JpZ2luKCksIGxpa2VWYWx1
ZS0+dHlwZSgpLCB2YWx1ZSk7Cit9CisKIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2lj
QmxvY2sqIGJsb2NrKQogewogICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1f
aW5zZXJ0aW9ucy5lbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNl
cnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNl
cnRpb25TZXQuaAkocmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lm
IEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgogI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTYyLDYgKzY0LDkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlKiBpbnNlcnQoc2l6ZV90IGlu
ZGV4LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKTsKIAorICAgIFZhbHVlKiBpbnNlcnRJbnRDb25z
dGFudChzaXplX3QgaW5kZXgsIE9yaWdpbiwgVHlwZSwgaW50NjRfdCB2YWx1ZSk7CisgICAgVmFs
dWUqIGluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50
NjRfdCB2YWx1ZSk7CisKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNM
b3dlck1hY3Jvcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIK
KyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMu
aCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitj
bGFzcyBMb3dlck1hY3JvcyB7CitwdWJsaWM6CisgICAgTG93ZXJNYWNyb3MoUHJvY2VkdXJlJiBw
cm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25T
ZXQocHJvYykKKyAgICAgICAgLCBtX2luc2VydGlvblNldChwcm9jKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9wcm9jKSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBwcm9j
ZXNzQ3VycmVudEJsb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9jaGFuZ2VkIHw9IG1fYmxv
Y2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgICAgICBpZiAobV9jaGFuZ2VkKQorICAgICAg
ICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgIHJldHVybiBtX2NoYW5n
ZWQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3NDdXJyZW50QmxvY2so
KQorICAgIHsKKyAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IG1fYmxvY2stPnNp
emUoKTsgKyttX2luZGV4KSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gbV9ibG9jay0+YXQobV9p
bmRleCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIENoaWxsRGl2OiB7CisgICAgICAgICAgICAgICAgLy8gQVJNIHN1cHBvcnRzIHRo
aXMgaW5zdHJ1Y3Rpb24gbmF0aXZlbHkuCisgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gV2UgaW1wbGVtZW50ICJyZXMgPSBDaGlsbERp
dihudW0sIGRlbikiIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyAgICAgaWYgKGRlbiArIDEgPD1fdW5zaWduZWQgMSkgeworICAgICAgICAgICAgICAg
IC8vICAgICAgICAgaWYgKCFkZW4pIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBy
ZXMgPSAwOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIGlmIChu
dW0gPT0gLTIxNDc0ODM2NDgpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXMg
PSBudW07CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZ290byBkb25lOworICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAg
ICAgICAgICAgLy8gICAgIHJlcyA9IG51bSAvIGRldjsKKyAgICAgICAgICAgICAgICAvLyBkb25l
OgorCisgICAgICAgICAgICAgICAgVmFsdWUqIG51bSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAg
ICAgICAgICAgICAgIFZhbHVlKiBkZW4gPSBtX3ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAg
ICAgICAgIFZhbHVlKiBvbmUgPQorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLCAxKTsKKyAgICAgICAgICAgICAgICBW
YWx1ZSogaXNEZW5PSyA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXgsIEFib3ZlLCBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBBZGQsIG1fdmFs
dWUtPm9yaWdpbigpLCBkZW4sIG9uZSksCisgICAgICAgICAgICAgICAgICAgIG9uZSk7CisKKyAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBiZWZvcmUgPQorICAgICAgICAgICAgICAgICAgICBt
X2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9yd2FyZChtX2Jsb2NrLCBtX2luZGV4LCAmbV9pbnNl
cnRpb25TZXQpOworCisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbm9ybWFsRGl2Q2FzZSA9
IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHNoYWR5RGVuQ2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0
QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNl
ID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogbmVnMURlbkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2Vy
dEJlZm9yZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBpbnRNaW5DYXNl
ID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CisKKyAgICAgICAg
ICAgICAgICBiZWZvcmUtPnJlcGxhY2VMYXN0V2l0aE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICAgICAgICAgICAgICBtX3Byb2MsIEJyYW5jaCwgbV92YWx1ZS0+b3JpZ2luKCksIGlzRGVuT0ss
CisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhub3JtYWxEaXZDYXNlLCBGcmVx
dWVuY3lDbGFzczo6Tm9ybWFsKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2Nr
KHNoYWR5RGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAgICAgICAgICAgICAg
IFVwc2lsb25WYWx1ZSogbm9ybWFsUmVzdWx0ID0gbm9ybWFsRGl2Q2FzZS0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBEaXYsIG1fdmFsdWUtPm9yaWdpbigpLCBudW0sIGRlbikpOworICAgICAgICAgICAg
ICAgIG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MsIEp1bXAsIG1fdmFsdWUtPm9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2so
bV9ibG9jaykpOworCisgICAgICAgICAgICAgICAgc2hhZHlEZW5DYXNlLT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUt
Pm9yaWdpbigpLCBkZW4sCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhuZWcx
RGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCksCisgICAgICAgICAgICAgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayh6ZXJvRGVuQ2FzZSwgRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKKworICAg
ICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogemVyb1Jlc3VsdCA9IHplcm9EZW5DYXNlLT5hcHBl
bmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBtX3ZhbHVl
LT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgemVyb0RlbkNhc2UtPmFwcGVuZEludENv
bnN0YW50KG1fcHJvYywgbV92YWx1ZSwgMCkpOworICAgICAgICAgICAgICAgIHplcm9EZW5DYXNl
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBK
dW1wLCBtX3ZhbHVlLT5vcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKG1fYmxvY2spKTsKKworICAg
ICAgICAgICAgICAgIGludDY0X3QgYmFkTnVtZXJhdG9yQ29uc3Q7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgICAgICAgICBiYWROdW1lcmF0b3JDb25zdCA9IC0yMTQ3NDgzNjQ3IC0gMTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSAtOTIyMzM3MjAzNjg1NDc3
NTgwN2xsIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJhZE51bWVyYXRvckNvbnN0ID0gMDsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogYmFkTnVtZXJhdG9yID0KKyAgICAgICAgICAgICAg
ICAgICAgbmVnMURlbkNhc2UtPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgbV92YWx1ZSwgYmFk
TnVtZXJhdG9yQ29uc3QpOworCisgICAgICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEJyYW5jaCwgbV92
YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG5lZzFEZW5DYXNlLT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLCBFcXVhbCwgbV92YWx1
ZS0+b3JpZ2luKCksIG51bSwgYmFkTnVtZXJhdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgRnJl
cXVlbnRlZEJsb2NrKGludE1pbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKKyAgICAgICAg
ICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKG5vcm1hbERpdkNhc2UsIEZyZXF1ZW5jeUNsYXNz
OjpOb3JtYWwpKTsKKworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogaW50TWluUmVzdWx0
ID0gaW50TWluQ2FzZS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2luKCksIGJhZE51bWVyYXRvcik7CisgICAgICAgICAg
ICAgICAgaW50TWluQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgIG1fcHJvYywgSnVtcCwgbV92YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayht
X2Jsb2NrKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogcGhpID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgUGhpLCBtX3ZhbHVl
LT50eXBlKCksIG1fdmFsdWUtPm9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBub3JtYWxSZXN1
bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAgICAgIHplcm9SZXN1bHQtPnNldFBoaShwaGkp
OworICAgICAgICAgICAgICAgIGludE1pblJlc3VsdC0+c2V0UGhpKHBoaSk7CisKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHBoaSk7CisgICAgICAgICAgICAg
ICAgYmVmb3JlLT51cGRhdGVQcmVkZWNlc3NvcnMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBTd2l0Y2gu
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUxMTE1CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSht
X2Jsb2NrKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQmxvY2tJ
bnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNl
cnRpb25TZXQ7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIFZhbHVlKiBtX3ZhbHVlOworICAgIGJvb2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKK307
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIGxvd2VyTWFjcm9zKFByb2NlZHVy
ZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImxvd2VyTWFjcm9z
Iik7CisgICAgTG93ZXJNYWNyb3MgbG93ZXJNYWNyb3MocHJvYyk7CisgICAgcmV0dXJuIGxvd2Vy
TWFjcm9zLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
TWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJN
YWNyb3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
TWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93ZXJNYWNyb3NfaAor
I2RlZmluZSBCM0xvd2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIExvd2VycyBo
aWdoLWxldmVsIG9wZXJhdGlvbnMgdGhhdCBpdCdzIGVhc2llciB0byBkZWFsIHdpdGggb25jZSB0
aGV5IGFyZSBicm9rZW4gdXAuIEN1cnJlbnRseQorLy8gdGhpcyBpbmNsdWRlcyBTd2l0Y2ggYW5k
IENoaWxsRGl2LgorCitib29sIGxvd2VyTWFjcm9zKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0xvd2VyTWFjcm9zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMzLDYgKzEyMzMsNDAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRGl2
OiB7CisgICAgICAgICAgICBpZiAoaXNJbnQobV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAg
ICAgICAgIFRtcCBlYXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAgICAgICAg
IFRtcCBlZHggPSBUbXAoWDg2UmVnaXN0ZXJzOjplZHgpOworCisgICAgICAgICAgICAgICAgQWly
OjpPcGNvZGUgY29udmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29k
ZSBkaXY7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Eb3Vi
bGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMyOworICAgICAgICAgICAgICAgICAgICBk
aXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9
IFg4NkNvbnZlcnRUb0RvdWJsZVdvcmQ2NDsKKyAgICAgICAgICAgICAgICAgICAgZGl2ID0gWDg2
RGl2NjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGlsZCgw
KSksIGVheCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVh
eCwgZWR4KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgdG1wKG1fdmFs
dWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGVheCwgdG1wKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGRvdWJsZXMuCisgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTkxCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKICAgICAgICAgY2FzZSBCaXRBbmQ6IHsKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMy
LCBBbmQ2NCwgQWlyOjpPb3BzLCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09wY29kZS5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBlbnVtIE9wY29k
ZSA6IGludDE2X3QgewogICAgIEFkZCwKICAgICBTdWIsCiAgICAgTXVsLAotICAgIERpdiwKKyAg
ICBEaXYsIC8vIEFsbCBiZXRzIGFyZSBvZmYgYXMgdG8gd2hhdCB3aWxsIGhhcHBlbiB3aGVuIHlv
dSBleGVjdXRlIHRoaXMgZm9yIC0yXjMxLy0xIGFuZCB4LzAuCiAKICAgICAvLyBJbnRlZ2VyIG1h
dGguCiAgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMg
KHgveSl8MC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAko
cmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjIgKzU1LDI3IEBAIEJhc2ljQmxvY2sqIFByb2Nl
ZHVyZTo6YWRkQmxvY2soZG91YmxlIGYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WYWx1ZSog
UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCitWYWx1
ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChPcmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUsIGlu
dDY0X3QgdmFsdWUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJbnQzMjoKLSAg
ICAgICAgcmV0dXJuIGFkZDxDb25zdDMyVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBz
dGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOwogICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgIHJl
dHVybiBhZGQ8Q29uc3Q2NFZhbHVlPihPcmlnaW4oKSwgdmFsdWUpOworICAgICAgICByZXR1cm4g
YWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luLCB2YWx1ZSk7CiAgICAgY2FzZSBEb3VibGU6Ci0gICAg
ICAgIHJldHVybiBhZGQ8Q29uc3REb3VibGVWYWx1ZT4oT3JpZ2luKCksIHN0YXRpY19jYXN0PGRv
dWJsZT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdERvdWJsZVZhbHVlPihvcmln
aW4sIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiB9CiAKLVZhbHVlKiBQcm9jZWR1cmU6OmFkZEJvb2xDb25zdGFudChUcmlTdGF0ZSB0cmlT
dGF0ZSkKK1ZhbHVlKiBQcm9jZWR1cmU6OmFkZEludENvbnN0YW50KFZhbHVlKiBsaWtlVmFsdWUs
IGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkZEludENvbnN0YW50KGxpa2VWYWx1ZS0+
b3JpZ2luKCksIGxpa2VWYWx1ZS0+dHlwZSgpLCB2YWx1ZSk7Cit9CisKK1ZhbHVlKiBQcm9jZWR1
cmU6OmFkZEJvb2xDb25zdGFudChPcmlnaW4gb3JpZ2luLCBUcmlTdGF0ZSB0cmlTdGF0ZSkKIHsK
ICAgICBpbnQzMl90IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHRyaVN0YXRlKSB7CkBAIC04NCw3
ICs4OSw3IEBAIFZhbHVlKiBQcm9jZWR1cmU6OmFkZEJvb2xDb25zdGFudChUcmlTdGEKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGFkZEludENvbnN0YW50KElu
dDMyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGFkZEludENvbnN0YW50KG9yaWdpbiwgSW50MzIsIHZh
bHVlKTsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OnJlc2V0VmFsdWVPd25lcnMoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNPcmlnaW4u
aCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCiAjaW5jbHVkZSA8
d3RmL0JhZy5oPgpAQCAtNDAsNiArNDEsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CiAKIGNsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNz
IE9wYXF1ZUJ5cHJvZHVjdHM7CiBjbGFzcyBWYWx1ZTsKIApAQCAtNTYsMTAgKzU4LDExIEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOwogCi0gICAgVmFsdWUqIGFk
ZEludENvbnN0YW50KFR5cGUsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlKiBhZGRJbnRDb25z
dGFudChPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlKiBhZGRJbnRDb25z
dGFudChWYWx1ZSosIGludDY0X3QgdmFsdWUpOwogCiAgICAgLy8gUmV0dXJucyBudWxsIGZvciBN
aXhlZFRyaVN0YXRlLgotICAgIFZhbHVlKiBhZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUpOworICAg
IFZhbHVlKiBhZGRCb29sQ29uc3RhbnQoT3JpZ2luLCBUcmlTdGF0ZSk7CiAKICAgICB2b2lkIHJl
c2V0VmFsdWVPd25lcnMoKTsKICAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CkBAIC0yMTYs
NiArMjE5LDggQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3Rz
PiB0YWtlQnlwcm9kdWN0cygpIHsgcmV0dXJuIFdURjo6bW92ZShtX2J5cHJvZHVjdHMpOyB9CiAK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OworICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBhZGRWYWx1ZUluZGV4KCk7CiAgICAgCiAgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYsMTYgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
YnJlYWs7CiAKKyAgICAgICAgY2FzZSBEaXY6CisgICAgICAgIGNhc2UgQ2hpbGxEaXY6CisgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IERpdihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCisgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgdGhpcyB1c2VzIENoaWxsRGl2IHNlbWFudGljcy4gVGhhdCdzIGZpbmUsIGJlY2F1
c2UgdGhlIHJ1bGVzIGZvciBEaXYKKyAgICAgICAgICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6
IGl0IGhhcyBjb3JuZXIgY2FzZXMgd2hlcmUgaXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0
CisgICAgICAgICAgICAvLyBsaWtlcy4KKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
bV92YWx1ZS0+Y2hpbGQoMCktPmRpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgQml0QW5kOgogICAgICAgICAg
ICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCkBAIC0zMTgsNyArMzI4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVlWCwgdmFsdWVYKQogICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgogICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZS0+dHlwZSgpLCAw
KSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29u
c3RhbnQobV92YWx1ZSwgMCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogCkBAIC00NDYsNyArNDU2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogRXF1YWwoY29uc3QxLCBjb25zdDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0
MSA9PSBjb25zdDIKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAg
ICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+ZXF1YWxDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9v
bENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV92YWx1ZS0+
Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIE5vdEVxdWFsOgpAQCAtNDczLDcgKzQ4NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQogICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBjb25zdDEgIT0gY29uc3QyCiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQo
MCktPm5vdEVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5ub3RFcXVh
bENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBMZXNzVGhhbjoKQEAgLTQ4MSw0MiArNDk1LDU4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTU4
CiAKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9w
cm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc1RoYW5Db25zdGFudCht
X3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdyZWF0ZXJUaGFu
OgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3By
b2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyVGhhbkNvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3ZhbHVl
LT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTGVzc0Vx
dWFsOgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBt
X3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFu
dChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENv
bnN0YW50KAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NFcXVhbENvbnN0YW50KG1fdmFsdWUt
PmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHcmVhdGVy
RXF1YWw6CiAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAg
IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlckVxdWFsQ29uc3RhbnQo
bV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IEFib3ZlOgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAg
ICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5hYm92ZUNvbnN0YW50
KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVDb25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQmVsb3c6CiAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93Q29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApLT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBYm92ZUVxdWFsOgogICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG1fdmFsdWUtPmNoaWxkKDApLT5hYm92ZUVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQo
MSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDApLT5hYm92ZUVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJlbG93RXF1YWw6CiAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmJlbG93RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCktPmJlbG93RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7CkBAIC01NTMsNyAr
NTgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEludG8gdGhpczogSnVtcChlbHNlKQog
ICAgICAgICAgICAgaWYgKHRyaVN0YXRlID09IEZhbHNlVHJpU3RhdGUpIHsKICAgICAgICAgICAg
ICAgICBicmFuY2gtPnRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IobV9ibG9jayk7
Ci0gICAgICAgICAgICAgICAgYnJhbmNoLT5jb252ZXJ0VG9KdW1wKGJyYW5jaC0+bm90VGFrZW4o
KSk7CisgICAgICAgICAgICAgICAgYnJhbmNoLT5jb252ZXJ0VG9KdW1wKGJyYW5jaC0+bm90VGFr
ZW4oKS5ibG9jaygpKTsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTYyLDcgKzU5Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAodGhlbikKICAgICAgICAgICAg
IGlmICh0cmlTdGF0ZSA9PSBUcnVlVHJpU3RhdGUpIHsKICAgICAgICAgICAgICAgICBicmFuY2gt
Pm5vdFRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IobV9ibG9jayk7Ci0gICAgICAg
ICAgICAgICAgYnJhbmNoLT5jb252ZXJ0VG9KdW1wKGJyYW5jaC0+dGFrZW4oKSk7CisgICAgICAg
ICAgICAgICAgYnJhbmNoLT5jb252ZXJ0VG9KdW1wKGJyYW5jaC0+dGFrZW4oKS5ibG9jaygpKTsK
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtNjMxLDYgKzY2MSwxMSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBzaW1wbGlmeUNGRygpCiAgICAgeworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiQmVmb3JlIHNpbXBsaWZ5Q0ZHOlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKG1fcHJvYyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgdGhy
ZWUgZWFzeSBzaW1wbGlmaWNhdGlvbiBydWxlczoKICAgICAgICAgLy8KICAgICAgICAgLy8gMSkg
SWYgYSBzdWNjZXNzb3IgaXMgYSBibG9jayB0aGF0IGp1c3QganVtcHMgdG8gYW5vdGhlciBibG9j
aywgdGhlbiBqdW1wIGRpcmVjdGx5IHRvCkBAIC02NTEsNiArNjg2LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gaXRlcmF0aW9ucyBuZWVkZWQgdG8ga2lsbCBhIGxvdCBvZiBjb2RlLgogCiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGJsb2NrICIsICpi
bG9jaywgIjpcbiIpOworCiAgICAgICAgICAgICBjaGVja1ByZWRlY2Vzc29yVmFsaWRpdHkoKTsK
IAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBibG9ja3MgdGhhdCBkb24ndCBo
YXZlIHN1Y2Nlc3NvcnMuCkBAIC02NjQsNyArNzAyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld1N1Y2Nlc3NvciA9IHN1Y2Nlc3Nvci0+c3Vj
Y2Vzc29yQmxvY2soMCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdWNjZXNzb3IgIT0g
c3VjY2Vzc29yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdWNjZXNzb3ItPnJlcGxh
Y2VQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcGxhY2luZyAiLCBwb2ludGVyRHVtcChi
bG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgd2l0aCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJE
dW1wKG5ld1N1Y2Nlc3NvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IHdlIGRvIG5vdCBkbyByZXBsYWNlUHJlZGVjZXNzb3IoKSBiZWNhdXNlIHRoZSBi
bG9jayB3ZSdyZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcHBpbmcgd2lsbCBzdGls
bCBoYXZlIG5ld1N1Y2Nlc3NvciBhcyBpdHMgc3VjY2Vzc29yLgorICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3U3VjY2Vzc29yLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzb3IgPSBuZXdTdWNjZXNzb3I7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02Nzks
MTQgKzcyNSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmICghZWZmZWN0cy5tdXN0
RXhlY3V0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFsbCBvZiB0aGUgc3VjY2Vzc29y
cyBtdXN0IGJlIHRoZSBzYW1lLgogICAgICAgICAgICAgICAgICAgICBib29sIGFsbFNhbWUgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sgZmlyc3RTdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yKDApOworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBm
aXJzdFN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKTsKICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhp
KSAhPSBmaXJzdFN1Y2Nlc3Nvci5ibG9jaygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpICE9IGZpcnN0U3VjY2Vzc29yKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWxsU2FtZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxTYW1lKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFuZ2luZyAiLCBw
b2ludGVyRHVtcChibG9jayksICIncyB0ZXJtaW5hbCB0byBhIEp1bXAuXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkt
PmFzPENvbnRyb2xWYWx1ZT4oKS0+Y29udmVydFRvSnVtcChmaXJzdFN1Y2Nlc3Nvcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC03MTksNiArNzY5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIEVuc3VyZSB0aGF0IHByZWRlY2Vzc29ycyBvZiBibG9jaydzIG5ldyBzdWNjZXNzb3JzIGtu
b3cgd2hhdCdzIHVwLgogICAgICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIG5ld1N1
Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1N1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKHN1Y2Nlc3NvciwgYmxvY2spOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXJnZWQgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lv
biAxOTIyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKLSAgICAgICAgICAgIGZvciAo
VmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBmb3IgKFZhbHVl
KiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
Y2hpbGQsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJ
blByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAo
Y2hpbGQpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoTWFwPEJh
c2ljQmxvY2sqLCBIYXNoU2V0PEJhc2ljQmxvY2sqPj4gYWxsUHJlZGVjZXNzb3JzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQs
OTIgKzEyNCw5NyBAQCBWYWx1ZSogVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYsIGluCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVl
KiBWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZh
bHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVl
KiBWYWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSog
VmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjpiaXRYb3JDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmJpdE9yQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1WYWx1ZSogVmFsdWU6OnNobENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1Zh
bHVlKiBWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25z
dAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OnNTaHJDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OnNobENvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotVmFsdWUqIFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAor
VmFsdWUqIFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25z
dAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6ZXF1YWxDb25z
dGFudChWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OnpTaHJDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RyaVN0
YXRlIFZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1
cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQo
VmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBW
YWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6bGVz
c1RoYW5Db25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJp
U3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKikg
Y29uc3QKK1RyaVN0YXRlIFZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKikg
Y29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6
Omxlc3NFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZhbHVlOjpsZXNzRXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSopIGNv
bnN0CitUcmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqKSBj
b25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1ZTo6
YWJvdmVDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YWJvdmVDb25zdGFu
dChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAK
LVRyaVN0YXRlIFZhbHVlOjpiZWxvd0NvbnN0YW50KFZhbHVlKikgY29uc3QKK1RyaVN0YXRlIFZh
bHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChWYWx1
ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVl
KikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFs
dWU6OmJlbG93RXF1YWxDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YmVs
b3dFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gTWl4ZWRU
cmlTdGF0ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTExLDI1ICsxMTEsMjYgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgVmFs
dWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwg
VmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAg
dmlydHVhbCBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSog
b3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJl
JiwgVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBiaXRYb3JDb25zdGFu
dChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHNo
bENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBW
YWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAg
dmlydHVhbCBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29u
c3Q7CisgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1
cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIGRpdkNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7IC8vIFRoaXMgY2hv
b3NlcyBDaGlsbERpdiBzZW1hbnRpY3MgZm9yIGludGVnZXJzLgorICAgIHZpcnR1YWwgVmFsdWUq
IGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7Cisg
ICAgdmlydHVhbCBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc2hsQ29u
c3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFZhbHVlKiB6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGVxdWFsQ29uc3Rh
bnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIG5vdEVxdWFsQ29u
c3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NUaGFu
Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0
ZXJUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRl
IGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlT
dGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1
YWwgVHJpU3RhdGUgYWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1
YWwgVHJpU3RhdGUgYmVsb3dDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1
YWwgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAg
dmlydHVhbCBUcmlTdGF0ZSBiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRlIGdyZWF0ZXJUaGFu
Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyaVN0YXRl
IGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVh
bCBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBiZWxvd0VxdWFs
Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKIAogICAgIC8vIElmIHRoZSB2YWx1
ZSBpcyBhIGNvbXBhcmlzb24gdGhlbiB0aGlzIHJldHVybnMgdGhlIGludmVydGVkIGZvcm0gb2Yg
dGhhdCBjb21wYXJpc29uLCBpZgogICAgIC8vIHBvc3NpYmxlLiBJdCBjYW4gYmUgaW1wb3NzaWJs
ZSBmb3IgZG91YmxlIGNvbXBhcmlzb25zLCB3aGVyZSBmb3IgZXhhbXBsZSBMZXNzVGhhbiBhbmQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIyNTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgzNiw2ICsyODM2LDEwOCBAQCB2b2lkIHRlc3RDYWxsRnVuY3Rpb25XaXRoSGVsbGFEb3VibGVB
cmd1CiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxkb3VibGU+KHByb2MpID09IGZ1bmN0aW9uV2l0
aEhlbGxhRG91YmxlQXJndW1lbnRzKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwg
MTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAy
NikpOwogfQogCit2b2lkIHRlc3RDaGlsbERpdihpbnQgbnVtLCBpbnQgZGVuLCBpbnQgcmVzKQor
eworICAgIC8vIFRlc3Qgbm9uLWNvbnN0YW50LgorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAg
IAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpKSk7CisKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIG51bSwg
ZGVuKSA9PSByZXMpOworICAgIH0KKworICAgIC8vIFRlc3QgY29uc3RhbnQuCisgICAgeworICAg
ICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdp
bigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBudW0pLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBkZW4pKSk7CisgICAgICAgIAorICAgICAgICBDSEVDSyhj
b21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gcmVzKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdENo
aWxsRGl2VHdpY2UoaW50IG51bTEsIGludCBkZW4xLCBpbnQgbnVtMiwgaW50IGRlbjIsIGludCBy
ZXMpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpLAor
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjMpKSkpKTsKKyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbnVt
MSwgZGVuMSwgbnVtMiwgZGVuMikgPT0gcmVzKTsKK30KKwordm9pZCB0ZXN0Q2hpbGxEaXY2NChp
bnQ2NF90IG51bSwgaW50NjRfdCBkZW4sIGludDY0X3QgcmVzKQoreworICAgIGlmICghaXM2NEJp
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUZXN0IG5vbi1jb25zdGFudC4KKyAgICB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBDaGlsbERpdiwg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ2NF90Pihwcm9jLCBudW0sIGRlbikgPT0gcmVzKTsKKyAgICB9CisKKyAgICAvLyBU
ZXN0IGNvbnN0YW50LgorICAgIHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbnVtKSwKKyAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgZGVuKSkpOwor
ICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKSA9PSBy
ZXMpOworICAgIH0KK30KKwogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApA
QCAtMzMxMiw2ICszNDE0LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBS
VU4odGVzdENhbGxTaW1wbGVEb3VibGUoMSwgMikpOwogICAgIFJVTih0ZXN0Q2FsbEZ1bmN0aW9u
V2l0aEhlbGxhRG91YmxlQXJndW1lbnRzKCkpOwogCisgICAgUlVOKHRlc3RDaGlsbERpdig0LCAy
LCAyKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigxLCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGls
bERpdigwLCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigxLCAtMSwgLTEpKTsKKyAgICBS
VU4odGVzdENoaWxsRGl2KC0yMTQ3NDgzNjQ3IC0gMSwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hp
bGxEaXYoLTIxNDc0ODM2NDcgLSAxLCAxLCAtMjE0NzQ4MzY0NyAtIDEpKTsKKyAgICBSVU4odGVz
dENoaWxsRGl2KC0yMTQ3NDgzNjQ3IC0gMSwgLTEsIC0yMTQ3NDgzNjQ3IC0gMSkpOworICAgIFJV
Tih0ZXN0Q2hpbGxEaXYoLTIxNDc0ODM2NDcgLSAxLCAyLCAtMTA3Mzc0MTgyNCkpOworICAgIFJV
Tih0ZXN0Q2hpbGxEaXY2NCg0LCAyLCAyKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KDEsIDAs
IDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoMCwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hp
bGxEaXY2NCgxLCAtMSwgLTEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIwMzY4
NTQ3NzU4MDdsbCAtIDEsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIw
MzY4NTQ3NzU4MDdsbCAtIDEsIDEsIC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAxKSk7CisgICAg
UlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAxLCAtMSwgLTkyMjMz
NzIwMzY4NTQ3NzU4MDdsbCAtIDEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoLTkyMjMzNzIw
MzY4NTQ3NzU4MDdsbCAtIDEsIDIsIC00NjExNjg2MDE4NDI3Mzg3OTA0KSk7CisgICAgUlVOKHRl
c3RDaGlsbERpdlR3aWNlKDQsIDIsIDYsIDIsIDUpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2VHdp
Y2UoNCwgMCwgNiwgMiwgMykpOworICAgIFJVTih0ZXN0Q2hpbGxEaXZUd2ljZSg0LCAyLCA2LCAw
LCAyKSk7CisKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2
aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsNyBAQCB2b2lkIGdlbmVyYXRlKENv
ZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
Y29kZSkgewogICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBi
bG9ja0xhYmVsc1tibG9ja10gPSBqaXQubGFiZWwoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5z
aXplKCkgPj0gMSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6
ZSgpIC0gMTsgKytpKSB7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJs
b2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwpAQCAtMTQwLDggKzE0MSw2IEBAIHZv
aWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVy
YXRlKGppdCwgY29udGV4dCk7Ci0gICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKLSAg
ICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CiAgICAgICAgIHN3
aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgewogICAgICAgICBjYXNlIDA6CiAgICAgICAg
ICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyOCw2ICsxMjgsMzYgQEAgaW5saW5lIGJvb2wgaXNVcnNoaWZ0NjRWYWxpZChjb25zdCBJbnN0
JgogICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7CiB9CiAKK2lubGluZSBib29sIGlzWDg2
RGl2SGVscGVyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUo
WDg2XzY0KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWF4
KQorICAgICAgICAmJiBpbnN0LmFyZ3NbMV0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBib29sIGlzWDg2Q29u
dmVydFRvRG91YmxlV29yZDMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4g
aXNYODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKK30KKworaW5saW5lIGJvb2wgaXNYODZDb252ZXJ0
VG9Eb3VibGVXb3JkNjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1g4
NkRpdkhlbHBlclZhbGlkKGluc3QpOworfQorCitpbmxpbmUgYm9vbCBpc1g4NkRpdjMyVmFsaWQo
Y29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNYODZEaXZIZWxwZXJWYWxpZChpbnN0
KTsKK30KKworaW5saW5lIGJvb2wgaXNYODZEaXY2NFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7
CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVyVmFsaWQoaW5zdCk7Cit9CisKIH0gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlz
aW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDIyIEBAIE5lZzMyIFVEOkcKIE5lZzY0
IFVEOkcKICAgICBUbXAKIAorTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRy
LCBUbXAKKworWDg2Q29udmVydFRvRG91YmxlV29yZDMyIFU6RywgRDpHCisgICAgVG1wKiwgVG1w
KgorCitYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjQgVTpHLCBEOkcKKyAgICBUbXAqLCBUbXAqCisK
K1g4NkRpdjMyIFVEOkcsIFVEOkcsIFU6RworICAgIFRtcCosIFRtcCosIFRtcAorCitYODZEaXY2
NCBVRDpHLCBVRDpHLCBVOkcKKyAgICBUbXAqLCBUbXAqLCBUbXAKKwogTGVhIFVBOkcsIEQ6Rwog
ICAgIEFkZHIsIFRtcAogCkBAIC0xNTcsMTAgKzE3Myw2IEBAIFhvcjY0IFU6RywgVUQ6RwogICAg
IFRtcCwgQWRkcgogICAgIEltbSwgVG1wCiAKLU11bDMyIFU6RywgVUQ6RwotICAgIFRtcCwgVG1w
Ci0gICAgQWRkciwgVG1wCi0KICMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVs
bCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRp
bmcgb24KICMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlz
IGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCiAjIE1vdmU2
NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhp
cyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU2ltcGxpZnlDRkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2ltcGxpZnlDRkcuY3BwCShyZXZpc2lvbiAxOTIyNTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODYsNyArODYsOSBAQCBib29sIHNpbXBsaWZ5Q0ZHKENvZGUmIGNvZGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1
bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIHdpdGggIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2lu
dGVyRHVtcChuZXdTdWNjZXNzb3IpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29y
KHN1Y2Nlc3NvciwgYmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvIG5vdCBkbyByZXBsYWNlUHJlZGVjZXNzb3IoKSBiZWNhdXNlIHRoZSBibG9jayB3ZSdy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcHBpbmcgd2lsbCBzdGlsbCBoYXZlIG5l
d1N1Y2Nlc3NvciBhcyBpdHMgc3VjY2Vzc29yLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U3VjY2Vzc29yLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3IgPSBuZXdTdWNjZXNzb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTEyLDYgKzExNCw3IEBAIGJv
b2wgc2ltcGxpZnlDRkcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDaGFuZ2luZyAiLCBwb2ludGVyRHVtcChibG9jayksICIncyB0ZXJtaW5hbCB0byBh
IEp1bXAuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkgPSBJbnN0
KEp1bXAsIGJsb2NrLT5sYXN0KCkub3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT5zdWNjZXNzb3JzKCkucmVzaXplKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnN1Y2Nlc3NvcnMoKVswXS5mcmVxdWVuY3koKSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGlu
ZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+KTsKICAgICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6
ZV90IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgQmFzaWNCbG9jayogaW5zZXJ0
QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwotICAgIAor
CiAgICAgYm9vbCBleGVjdXRlKCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkyMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzOTksOCArMzM5OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aERpdihOb2QKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIG1faml0Lm1v
dmUob3AxR1BSLCBlYXguZ3ByKCkpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsK
LSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihvcDJHUFIpOworICAgICAgICBtX2pp
dC54ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICAgICAgbV9qaXQueDg2RGl2MzIob3Ay
R1BSKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAob3AyVGVtcEdQUiAhPSBJbnZhbGlkR1BS
UmVnKQogICAgICAgICAgICAgdW5sb2NrKG9wMlRlbXBHUFIpOwpAQCAtMzU1NSw4ICszNTU1LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogCiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDFHcHIsIGVheC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoZGl2aXNvciksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgIG1faml0LmFzc2VtYmxlcigpLmNkcSgpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2Vt
YmxlcigpLmlkaXZsX3Ioc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2Q29u
dmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2RGl2MzIoc2Ny
YXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBudW1lcmF0b3JQb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIG9wMVNhdmVHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0
LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgZWR4LmdwcigpKSk7CkBAIC0zNjQ2LDgg
KzM2NDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgZWF4Lmdwcigp
KTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAgIG1faml0LmFzc2Vt
YmxlcigpLmlkaXZsX3Iob3AyR1BSKTsKKyAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91Ymxl
V29yZDMyKCk7CisgICAgICAgIG1faml0Lng4NkRpdjMyKG9wMkdQUik7CiAgICAgICAgICAgICAK
ICAgICAgICAgaWYgKG9wMlRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIHVu
bG9jayhvcDJUZW1wR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODU4LDggKzg1OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUK
ICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwg
VHJ1c3RlZEltbTMyKC0xKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEu
bGluayh0aGlzKTsKLSAgICBtX2Fzc2VtYmxlci5jZHEoKTsKLSAgICBtX2Fzc2VtYmxlci5pZGl2
bF9yKHJlZ1QyKTsKKyAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICB4ODZEaXYz
MihyZWdUMik7CiAgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMTkyMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIzLDggKzYyMyw4IEBAIHZvaWQgSklUOjplbWl0
X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7
CiAgICAgZGVub21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7Ci0gICAgbV9hc3NlbWJsZXIuY2Rx
KCk7Ci0gICAgbV9hc3NlbWJsZXIuaWRpdmxfcihlY3gpOworICAgIHg4NkNvbnZlcnRUb0RvdWJs
ZVdvcmQzMigpOworICAgIHg4NkRpdjMyKGVjeCk7CiAgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRv
clBvc2l0aXZlLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNRnVuY3Rpb25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc2Myw4ICs3NjMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoR1BSSW5m
bzo6cmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwogICAgICAgICAgICAgbW92ZShHUFJJbmZv
OjpyZWdUMSwgWDg2UmVnaXN0ZXJzOjplY3gpOwogICAgICAgICAgICAgaWYgKG9wID09IFdBU01P
cEV4cHJlc3Npb25JMzI6OlNEaXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01vZCkg
ewotICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNkcSgpOwotICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmlkaXZsX3IoWDg2UmVnaXN0ZXJzOjplY3gpOworICAgICAgICAgICAgICAgIHg4
NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgICAgICAgICAgICAgIHg4NkRpdjMyKFg4NlJl
Z2lzdGVyczo6ZWN4KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlVEaXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVz
c2lvbkkzMjo6VU1vZCk7CiAgICAgICAgICAgICAgICAgeG9yMzIoWDg2UmVnaXN0ZXJzOjplZHgs
IFg4NlJlZ2lzdGVyczo6ZWR4KTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTIyNTkpCisrKyBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTExLTEw
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGJl
IGFibGUgdG8gY29tcGlsZSBhIHByb2dyYW0gd2l0aCBDaGlsbERpdgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMTE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZGVkIHRvIGJlZWYgdXAgc29tZSBj
b21waWxlciBhbGdvcml0aG1zLiBBbGwgb2YgdGhlIGhhcmRlbmluZyB3YXMgYWJvdXQgbWFraW5n
IHRoZW0KKyAgICAgICAgd29yayB3aXRoIG9iamVjdHMgdGhhdCBoYXZlIG1vdmUgc2VtYW50aWNz
IGJ1dCBub3QgY29weSBzZW1hbnRpY3MuIFRoaXMgYXJpc2VzIGluIEIzCisgICAgICAgIGJhc2lj
IGJsb2NrIGluc2VydGlvbiBzZXRzLgorCisgICAgICAgICogd3RmL0J1YmJsZVNvcnQuaDoKKyAg
ICAgICAgKFdURjo6YnViYmxlU29ydCk6CisgICAgICAgICogd3RmL0luc2VydGlvbi5oOgorICAg
ICAgICAoV1RGOjpJbnNlcnRpb246Okluc2VydGlvbik6CisgICAgICAgIChXVEY6Okluc2VydGlv
bjo6aW5kZXgpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmVsZW1lbnQpOgorICAgICAgICAo
V1RGOjpJbnNlcnRpb246Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6OmV4ZWN1dGVJbnNlcnRp
b25zKToKKwogMjAxNS0xMS0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gVXNlIENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J1YmJsZVNvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9CdWJibGVTb3J0LmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0J1YmJsZVNvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCB2b2lkIGJ1YmJs
ZVNvcnQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyCiB7CiAgICAgYnViYmxlU29ydCgKICAgICAg
ICAgYmVnaW4sIGVuZCwKLSAgICAgICAgW10gKHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRz
PEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUgbGVmdCwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0
ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUgcmlnaHQpIC0+IGJv
b2wgeworICAgICAgICBbXSAoY29uc3QgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRl
cmF0b3JUeXBlPjo6dmFsdWVfdHlwZSYgbGVmdCwKKyAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1l
IHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUmIHJpZ2h0KSAt
PiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7CiAgICAgICAgIH0pOwog
fQpJbmRleDogU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvSW5zZXJ0aW9uLmgJKHJldmlzaW9uIDE5MjI1OSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KIGNsYXNzIEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkg
eyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBVJiYgZWxl
bWVudCkKICAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVt
ZW50KQorICAgICAgICAsIG1fZWxlbWVudChzdGQ6OmZvcndhcmQ8VT4oZWxlbWVudCkpCiAgICAg
ewogICAgIH0KICAgICAKICAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9Ci0gICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgY29u
c3QgVCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIFQmIGVsZW1l
bnQoKSB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPChjb25z
dCBJbnNlcnRpb24mIG90aGVyKSBjb25zdAogICAgIHsKQEAgLTY2LDggKzY4LDggQEAgdm9pZCBl
eGVjdXRlSW5zZXJ0aW9ucyhUYXJnZXRWZWN0b3JUeXBlJgogICAgICAgICBzaXplX3QgZmlyc3RJ
bmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5z
ZXJ0aW9uczsKICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMg
KyAxOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4
OykKLSAgICAgICAgICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOwotICAg
ICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5l
bGVtZW50KCk7CisgICAgICAgICAgICB0YXJnZXRbaV0gPSBXVEY6Om1vdmUodGFyZ2V0W2kgLSBp
bmRleE9mZnNldF0pOworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBXVEY6Om1vdmUoaW5z
ZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uZWxlbWVudCgpKTsKICAgICAgICAgbGFzdEluZGV4
ID0gZmlyc3RJbmRleDsKICAgICB9CiAgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cg==
</data>
<flag name="review"
          id="290316"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265269</attachid>
            <date>2015-11-10 21:53:02 -0800</date>
            <delta_ts>2015-11-10 22:06:44 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30590</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDE1LTExLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBhbmQgY2Fub25pY2FsaXplIE11bAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMTI0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3YXMgYSBzdHJh
bmdlIHRyaXAuIEkgd2FudGVkIHRvIGRvIGEgcXVpY2sgcGF0Y2ggdG8gaW1wbGVtZW50IE11bC4g
QnV0IHRoZW4gSSByZWFsaXplZAorICAgICAgICB0aGF0IG91ciB0cmFkaXRpb24gd2hlbiBhZGRp
bmcgbmV3IGxvd2VyaW5ncyB3YXMgdG8gYWxzbyBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgc3RyZW5n
dGgKKyAgICAgICAgcmVkdWN0aW9ucy4gU28gdGhlbiBJIHdyb3RlIHRoZSBNdWwtPlNobCBzdHJl
bmd0aCByZWR1Y3Rpb24uIEJ1dCB0aGF0IHJlbWluZGVkIG1lIHRoYXQgSSBuZWVkZWQKKyAgICAg
ICAgdG8gY2Fub25pY2FsaXplIGJldHdlZW4gQWRkKHgsIHgpIGFuZCBTaGwoeCwgMSkuIEkgZGVj
aWRlZCB0aGF0IGl0IHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciB0bworICAgICAgICB1c2UgU2hs
KHgsIDEpLCBzaW5jZSB0aGF0IG9ubHkgaGFzIG9uZSB1c2Ugb2YgeC4gQnV0IHRoYXQgbWVhbnMg
dGhhdCB3ZSBzaG91bGQgY29tcGlsZQorICAgICAgICBTaGwoeCwgMSkgdG8gQWRkIHgsIHggaW4g
dGhlIGJhY2tlbmQsIHNpbmNlIHRoYXQncyB3aGF0IFg4NiB3YW50cy4gV2hpbGUgZG9pbmcgdGhh
dCwgSSBhbG1vc3QKKyAgICAgICAgaW50cm9kdWNlZCBhIGJ1ZyB3aGVyZSBTaGwoTG9hZCh4KSwg
MSkgd291bGQgY2F1c2UgdGhlIGNvbXBpbGVyIHRvIGVpdGhlciBjcmFzaCBvciBnZW5lcmF0ZSBi
YWQKKyAgICAgICAgY29kZS4gVGhhdCdzIGJlY2F1c2UgSSB3YXMgdXNpbmcgQWRkKHgsIHgpIHRv
IGhhbmRsZSBTaGwoeCwgMSksIHNvIHdlJ2QgZW5kIHVwIHdpdGgKKyAgICAgICAgQWRkKExvYWQo
eCksIExvYWQoeCkpIC0gaS5lLiB3ZSB3b3VsZCB0cnkgdG8gZHVwbGljYXRlIHRoZSBMb2FkLgor
CisgICAgICAgIFRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciBhbHJlYWR5IGRlZmVuZHMgYWdhaW5z
dCB0aGlzLCBhbmQgdGhlIG9ubHkgcmVhc29uIHdoeSBJIHdvdWxkIGhhdmUKKyAgICAgICAgY3Jl
YXRlZCB0aGUgYnVnIHdhcyBieSB1c2luZyB0aGUgQWRkIGhlbHBlciB3aGVuIGNvbXBpbGluZyBh
IFNobC4gU3RpbGwsIHRoaXMgd2FzIHNvIGNsb3NlIHRvCisgICAgICAgIGEgYmFkIGJ1ZyB0aGF0
IEkgYWRkZWQgYSB0b24gb2YgbmV3IHRlc3RzIHRoYXQgY292ZXIgdGhlIE9wKHgsIHgpIHdoZXJl
IHggPSBMb2FkIGNhc2UuCisKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpDb21waWxhdGlvbik6CisgICAgICAgICogYjMvQjND
b21waWxhdGlvbi5oOgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OmNvZGUpOgorICAg
ICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJW
YWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjptdWxD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJpdEFuZENvbnN0YW50
KToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2
NFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjptdWxDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKiBiMy9C
M0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjptdWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKiBiMy9CM0Nv
bnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgor
ICAgICAgICAqIGIzL0IzR2VuZXJhdGUuaDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUdlbmVyaWNDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OnN1YkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpt
dWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0QW5kQ29uc3RhbnQpOgor
ICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXM6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFJldHVybkNvbnN0NjQpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdEFkZEFyZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkQXJncyk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0QWRkQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRMb2Fk
VHdpY2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFyZyk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TXVsQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsQXJnSW1tKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RNdWxJbW1BcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFy
Z3MzMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTG9hZFR3aWNlKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTdWJBcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkFyZ3MpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNobEFyZ0ltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2hs
QXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNobEFyZ3MzMik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0U1NockFyZ0ltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U1NockFyZzMyKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RTU2hyQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RaU2hyQXJnSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RaU2hyQXJnMzIpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFpTaHJBcmdzMzIpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJpY1Rl
c3RDb21wYXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDb21wYXJlTG9hZCk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0Q29tcGFyZUltcGwpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwog
MjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIGFkZCBhIEZJWE1FIHJlZmVyZW5jaW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTExMjguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywx
MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotQ29tcGlsYXRpb246OkNv
bXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jKQorQ29tcGlsYXRpb246OkNvbXBpbGF0
aW9uKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBD
Q2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0gICAgZ2VuZXJhdGUocHJvYywgaml0KTsKKyAgICBnZW5l
cmF0ZShwcm9jLCBqaXQsIG9wdExldmVsKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0s
IGppdCwgbnVsbHB0cik7CiAKICAgICBtX2NvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21waWxhdGlvbi5oCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21waWxhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGNs
YXNzIENvbXBpbGF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGlj
OgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJlJik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25l
ZCBvcHRMZXZlbCA9IDEpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVS
ZWYuY29kZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDEzIEBAIFZhbHVl
KiBDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHUKICAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5hc0ludDMyKCkpOwogfQog
CitWYWx1ZSogQ29uc3QzMlZhbHVlOjptdWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4o
KSwgbV92YWx1ZSAqIG90aGVyLT5hc0ludDMyKCkpOworfQorCiBWYWx1ZSogQ29uc3QzMlZhbHVl
OjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKIHsK
ICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYs
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNvbnN0YW50KFBy
b2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIG11bENv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFs
dWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiAr
NjEsMTMgQEAgVmFsdWUqIENvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdQogICAgIHJl
dHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFz
SW50NjQoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdDY0VmFsdWU6Om11bENvbnN0YW50KFByb2NlZHVy
ZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0
VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICogb3RoZXItPmFzSW50NjQoKSk7Cit9CisKIFZhbHVl
KiBDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90
aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMTkyMjkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1
cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYWRkQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSog
c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogbXVsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKICAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDE5
MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMyBAQCBWYWx1ZSogQ29uc3REb3VibGVWYWx1
ZTo6c3ViQ29uc3RhbnQoUHJvCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+
KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCitWYWx1ZSogQ29u
c3REb3VibGVWYWx1ZTo6bXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSAqIG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKwogVHJpU3RhdGUgQ29uc3REb3VibGVW
YWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhl
ci0+aGFzRG91YmxlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcg
QEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMy
X3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogbXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTYgKzQxLDE2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi12b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIENDYWxsSGVscGVycyYgaml0LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdT
Y29wZSB0aW1pbmdTY29wZSgiZ2VuZXJhdGUiKTsKIAogICAgIEFpcjo6Q29kZSBjb2RlKHByb2Nl
ZHVyZSk7Ci0gICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIGdlbmVyYXRl
VG9BaXIocHJvY2VkdXJlLCBjb2RlLCBvcHRMZXZlbCk7CiAgICAgQWlyOjpnZW5lcmF0ZShjb2Rl
LCBqaXQpOwogfQogCi12b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFp
cjo6Q29kZSYgY29kZSkKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
QWlyOjpDb2RlJiBjb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0
aW1pbmdTY29wZSgiZ2VuZXJhdGVUb0FpciIpOwogICAgIApAQCAtNjUsMTEgKzY1LDEzIEBAIHZv
aWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgZGF0YUxvZygi
SW5pdGlhbCBCMzpcbiIpOwogICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CiAgICAgfQotCi0g
ICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKICAgICAKLSAgICAvLyBGSVhNRTogQWRkIG1v
cmUgb3B0aW1pemF0aW9ucyBoZXJlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA1MDcKKyAgICBpZiAob3B0TGV2ZWwgPj0gMSkgeworICAgICAgICBy
ZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFk
ZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0KIAogICAgIG1vdmVDb25zdGFudHMo
cHJvY2VkdXJlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShy
ZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAgbmFtZXNwYWNlIEFpciB7IGNsYXNz
IENvZGU7IH0KIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBp
bi1wbGFjZSwgYW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKIC8vIGlu
dGVybmFsbHkgY29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0
aGF0LgotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhl
bHBlcnMmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0Nh
bGxIZWxwZXJzJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogLy8gVGhpcyB0YWtlcyBhIEIz
OjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIu
IFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcg
QWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRoYXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVy
cyBpbnRvIHRoZQogLy8gQjM6OlByb2NlZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQg
dGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2ZXMgdGhlIEFpcjo6Q29kZS4KLXZvaWQgZ2VuZXJhdGVU
b0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1
cmUmLCBBaXI6OkNvZGUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIE5vdGUgdGhhdCBu
byBrbm93biBhcmNoaXRlY3R1cmUgaGFzIGEgdGhyZWUtb3BlcmFuZCBmb3JtIG9mIGJpbmFyeSBv
cGVyYXRpb25zIHRoYXQgYWxzbworICAgICAgICAvLyBOb3RlIHRoYXQgbm8gZXh0YW50IGFyY2hp
dGVjdHVyZSBoYXMgYSB0aHJlZS1vcGVyYW5kIGZvcm0gb2YgYmluYXJ5IG9wZXJhdGlvbnMgdGhh
dCBhbHNvCiAgICAgICAgIC8vIGxvYWQgZnJvbSBtZW1vcnkuIElmIHN1Y2ggYW4gYWJvbWluYXRp
b24gZGlkIGV4aXN0LCB3ZSB3b3VsZCBoYW5kbGUgaXQgc29tZXdoZXJlIGFyb3VuZAogICAgICAg
ICAvLyBoZXJlLgogCkBAIC04ODMsNyArODgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgY29tcGFyaXNvbiBiZXR3
ZWVuIHRtcHMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyeUNvbXBhcmUod2lkdGgsIHRtcFBy
b21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y29tcGFyZSh3aWR0aCwgcmVsQ29uZCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdo
dCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBEb3VibGUgY29tcGFyaXNvbnMg
Y2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHNtYXJ0LgpAQCAtMTIzMyw2ICsxMjMzLDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIE11
bDogeworICAgICAgICAgICAgYXBwZW5kQmluT3A8TXVsMzIsIE11bDY0LCBBaXI6Ok9vcHMsIENv
bW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+
Y2hpbGQoMSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2Fz
ZSBCaXRBbmQ6IHsKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBBbmQ2NCwgQWlyOjpP
b3BzLCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1f
dmFsdWUtPmNoaWxkKDEpKTsKQEAgLTEyNTIsNiArMTI1OCwxNSBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQzMigxKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9u
IG1ha2VzIHNlbnNlIG9uIFg4Ni4gSSBkb24ndCBrbm93IGlmIGl0IG1ha2VzIHNlbnNlIGFueXdo
ZXJlIGVsc2UuCisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGls
ZCgwKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICBvcGNvZGVGb3JUeXBlKEFkZDMyLCBBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgdG1wKG1fdmFsdWUpLCB0
bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgYXBwZW5kU2hpZnQ8THNoaWZ0MzIsIExzaGlmdDY0Piht
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNl
U3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQodmFsdWUsIHZhbHVlKQorICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBTaGwodmFsdWUsIDEpCisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdXNlZnVs
IGNhbm9uaWNhbGl6YXRpb24uIEl0J3Mgbm90IG1lYW50IHRvIGJlIGEgc3RyZW5ndGggcmVkdWN0
aW9uLgorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxk
KDEpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICBTaGws
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFs
dWUtPm9yaWdpbigpLCAxKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwgemVybykKICAgICAgICAg
ICAgIC8vIEludG8gYW4gSWRlbnRpdHkuCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KDApKSB7CkBAIC0xODYsNiArMTk3LDU5IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgTXVsOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0
YXRpdml0eSgpOworCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bChjb25zdGFudDEsIGNv
bnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICogY29uc3RhbnQy
CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCktPm11bENv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7CisgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0lu
dCgpOworCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDApCisgICAg
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IGRvIHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBl
eGFtcGxlLCAtMSAqIDAKKyAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVy
ZW50IHJlc3VsdHMuCisgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCAxKQorICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogdmFsdWUKKyAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1
ZSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIGxv
ZzIoY29uc3RhbnQpKQorICAgICAgICAgICAgICAgIGlmIChoYXNPbmVCaXRTZXQoZmFjdG9yKSkg
eworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFzdExv
ZzIoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZhY3RvcikpOworICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hsLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBzaGlmdEFtb3VudCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBkb3VibGUgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzRG91YmxlKCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKKyAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgQml0
QW5kOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQs
MTEgQEAgVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYQogICAgIHJldHVy
biBudWxscHRyOwogfQogCitWYWx1ZSogVmFsdWU6Om11bENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogVmFsdWUqIFZhbHVlOjpi
aXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjI5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMyw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSog
YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFs
IFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAg
IHZpcnR1YWwgVmFsdWUqIG11bENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29u
c3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
IG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBuYW1lc3Bh
Y2UgewogCiBWTSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQ
cm9jZWR1cmUmIHByb2NlZHVyZSkKK3N0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGls
ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQogewotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPigqdm0sIHByb2NlZHVyZSk7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KCp2bSwgcHJvY2VkdXJlLCBvcHRM
ZXZlbCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
QEAgLTEzMiw2ICsxMzIsMTggQEAgdm9pZCB0ZXN0UmV0dXJuQ29uc3Q2NChpbnQ2NF90IHZhbHVl
KQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYykgPT0gdmFsdWUpOwogfQog
Cit2b2lkIHRlc3RBZGRBcmcoaW50IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgdmFsdWUsIHZhbHVlKSk7CisKKyAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludD4ocHJvYywgYSkgPT0gYSArIGEpOworfQorCiB2b2lkIHRlc3RBZGRBcmdzKGlu
dCBhLCBpbnQgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTE5Miw2ICsyMDQsMTMyIEBA
IHZvaWQgdGVzdEFkZEFyZ3MzMihpbnQgYSwgaW50IGIpCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKIH0KIAordm9pZCB0ZXN0QWRkTG9hZFR3aWNl
KCkKK3sKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVuc2lnbmVkIG9wdExldmVsKSB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgICAgICBpbnQzMl90IHZhbHVlID0gNDI7CisgICAgICAgIFZhbHVlKiBsb2FkID0g
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgJnZhbHVlKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250
cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbG9hZCwgbG9h
ZCkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgb3B0TGV2ZWwpOworICAg
ICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUpID09IDQyICogMik7CisgICAgfTsKKwor
ICAgIHRlc3QoMCk7CisgICAgdGVzdCgxKTsKK30KKwordm9pZCB0ZXN0TXVsQXJnKGludCBhKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVl
LCB2YWx1ZSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09IGEg
KiBhKTsKK30KKwordm9pZCB0ZXN0TXVsQXJncyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9j
LCBhLCBiKSA9PSBhICogYik7Cit9CisKK3ZvaWQgdGVzdE11bEFyZ0ltbShpbnQgYSwgaW50IGIp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYikpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhKSA9PSBh
ICogYik7Cit9CisKK3ZvaWQgdGVzdE11bEltbUFyZyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsK
KworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBiKSA9PSBhICogYik7Cit9CisK
K3ZvaWQgdGVzdE11bEFyZ3MzMihpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIE11bCwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKiBi
KTsKK30KKwordm9pZCB0ZXN0TXVsTG9hZFR3aWNlKCkKK3sKKyAgICBhdXRvIHRlc3QgPSBbJl0g
KHVuc2lnbmVkIG9wdExldmVsKSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBpbnQzMl90IHZhbHVl
ID0gNDI7CisgICAgICAgIFZhbHVlKiBsb2FkID0gcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZhbHVlKSk7
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgTXVsLCBPcmlnaW4oKSwgbG9hZCwgbG9hZCkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYywgb3B0TGV2ZWwpOworICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4o
KmNvZGUpID09IDQyICogNDIpOworICAgIH07CisKKyAgICB0ZXN0KDApOworICAgIHRlc3QoMSk7
Cit9CisKK3ZvaWQgdGVzdFN1YkFyZyhpbnQgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYywgYSkpOworfQorCiB2b2lkIHRlc3RTdWJBcmdzKGludCBh
LCBpbnQgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTEwMTEsNiArMTE0OSwyMCBAQCB2
b2lkIHRlc3RTaGxBcmdJbW0oaW50NjRfdCBhLCBpbnQ2NF90IGIpCiAgICAgQ0hFQ0soY29tcGls
ZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhKSA9PSAoYSA8PCBiKSk7CiB9CiAKK3ZvaWQgdGVzdFNo
bEFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTaGwsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSkgPT0gKGEgPDwgYSkpOworfQorCiB2b2lkIHRlc3RT
aGxBcmdzMzIoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBA
IC0xMTAzLDYgKzEyNTUsMjAgQEAgdm9pZCB0ZXN0U1NockFyZ0ltbShpbnQ2NF90IGEsIGludDY0
X3QgYgogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSkgPT0gKGEgPj4g
YikpOwogfQogCit2b2lkIHRlc3RTU2hyQXJnMzIoaW50MzJfdCBhKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFs
dWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCB2YWx1ZSwgdmFs
dWUpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSkgPT0gKGEg
Pj4gYSkpOworfQorCiB2b2lkIHRlc3RTU2hyQXJnczMyKGludDMyX3QgYSwgaW50MzJfdCBiKQog
ewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTE5NSw2ICsxMzYxLDIwIEBAIHZvaWQgdGVzdFpT
aHJBcmdJbW0odWludDY0X3QgYSwgdWludDY0X3QKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPHVp
bnQ2NF90Pihwcm9jLCBhKSA9PSAoYSA+PiBiKSk7CiB9CiAKK3ZvaWQgdGVzdFpTaHJBcmczMih1
aW50MzJfdCBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFpTaHIsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48dWludDMyX3Q+KHByb2MsIGEpID09IChhID4+IGEpKTsKK30KKwogdm9pZCB0ZXN0WlNockFy
Z3MzMih1aW50MzJfdCBhLCB1aW50MzJfdCBiKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAt
MjUwMCwxMiArMjY4MCwxNCBAQCB2b2lkIGdlbmVyaWNUZXN0Q29tcGFyZSgKICAgICAgICAgUHJv
Y2VkdXJlIHByb2M7CiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CiAKKyAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpOwor
ICAgICAgICBWYWx1ZSogcmlnaHRWYWx1ZSA9IHJpZ2h0RnVuY3Rvcihyb290LCBwcm9jKTsKKyAg
ICAgICAgCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLAotICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIHBy
b2MsIG9wY29kZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdodEZ1bmN0
b3Iocm9vdCwgcHJvYykpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdodFZhbHVlKSwKICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
KTsKIAogICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbGVmdCwgcmlnaHQp
ID09IHJlc3VsdCk7CkBAIC0yNTE4LDEwICsyNzAwLDEyIEBAIHZvaWQgZ2VuZXJpY1Rlc3RDb21w
YXJlKAogICAgICAgICBCYXNpY0Jsb2NrKiB0aGVuQ2FzZSA9IHByb2MuYWRkQmxvY2soKTsKICAg
ICAgICAgQmFzaWNCbG9jayogZWxzZUNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CiAKKyAgICAgICAg
VmFsdWUqIGxlZnRWYWx1ZSA9IGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpOworICAgICAgICBWYWx1
ZSogcmlnaHRWYWx1ZSA9IHJpZ2h0RnVuY3Rvcihyb290LCBwcm9jKTsKKwogICAgICAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3Jp
Z2luKCksCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAg
ICAgIHByb2MsIG9wY29kZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdo
dEZ1bmN0b3Iocm9vdCwgcHJvYykpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBvcGNvZGUsIE9yaWdpbigpLCBsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpLAogICAgICAg
ICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwgRnJlcXVlbnRlZEJsb2NrKGVsc2VDYXNl
KSk7CiAKICAgICAgICAgLy8gV2UgdXNlIGEgcGF0Y2hwb2ludCBvbiB0aGUgdGhlbiBjYXNlIHRv
IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24ndCBnZXQgaWYtY29udmVydGVkLgpAQCAtMjYzOSw2ICsy
ODIzLDIyIEBAIHZvaWQgdGVzdENvbXBhcmVMb2FkKEIzOjpPcGNvZGUgb3Bjb2RlLCAKICAgICAg
ICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAmc2xvdCkpOwogICAgICAgICB9LAogICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKwor
ICAgIC8vIFRlc3QgYWRkci10by1hZGRyLCB3aXRoIHRoZSBzYW1lIGFkZHIuCisgICAgc2xvdCA9
IGxlZnQ7CisgICAgVmFsdWUqIHZhbHVlOworICAgIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAg
ICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHBy
b2MpIHsKKyAgICAgICAgICAgIHZhbHVlID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksICZzbG90KSk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayosIFByb2NlZHVyZSYpIHsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgbGVmdCwgbW9kZWxDb21wYXJlKG9wY29k
ZSwgbW9kZWxMb2FkPFQ+KGxlZnQpLCBtb2RlbExvYWQ8VD4obGVmdCkpKTsKIH0KIAogdm9pZCB0
ZXN0Q29tcGFyZUltcGwoQjM6Ok9wY29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmlnaHQpCkBA
IC0yODY1LDYgKzMwNjUsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVO
KHRlc3RSZXR1cm5Db25zdDY0KDUpKTsKICAgICBSVU4odGVzdFJldHVybkNvbnN0NjQoLTQyKSk7
CiAKKyAgICBSVU4odGVzdEFkZEFyZygxMTEpKTsKICAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMSkp
OwogICAgIFJVTih0ZXN0QWRkQXJncygxLCAyKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdJbW0oMSwg
MikpOwpAQCAtMjg3NSw3ICszMDc2LDI1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikK
ICAgICBSVU4odGVzdEFkZEltbUFyZygxLCAwKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwg
MSkpOwogICAgIFJVTih0ZXN0QWRkQXJnczMyKDEsIDIpKTsKKyAgICBSVU4odGVzdEFkZExvYWRU
d2ljZSgpKTsKKworICAgIFJVTih0ZXN0TXVsQXJnKDUpKTsKKyAgICBSVU4odGVzdE11bEFyZ3Mo
MSwgMSkpOworICAgIFJVTih0ZXN0TXVsQXJncygxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxBcmdz
KDMsIDMpKTsKKyAgICBSVU4odGVzdE11bEFyZ0ltbSgxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxB
cmdJbW0oMCwgMikpOworICAgIFJVTih0ZXN0TXVsQXJnSW1tKDEsIDApKTsKKyAgICBSVU4odGVz
dE11bEFyZ0ltbSgzLCAzKSk7CisgICAgUlVOKHRlc3RNdWxJbW1BcmcoMSwgMikpOworICAgIFJV
Tih0ZXN0TXVsSW1tQXJnKDAsIDIpKTsKKyAgICBSVU4odGVzdE11bEltbUFyZygxLCAwKSk7Cisg
ICAgUlVOKHRlc3RNdWxJbW1BcmcoMywgMykpOworICAgIFJVTih0ZXN0TXVsQXJnczMyKDEsIDEp
KTsKKyAgICBSVU4odGVzdE11bEFyZ3MzMigxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxMb2FkVHdp
Y2UoKSk7CiAKKyAgICBSVU4odGVzdFN1YkFyZygyNCkpOwogICAgIFJVTih0ZXN0U3ViQXJncygx
LCAxKSk7CiAgICAgUlVOKHRlc3RTdWJBcmdzKDEsIDIpKTsKICAgICBSVU4odGVzdFN1YkFyZ3Mo
MTMsIC00MikpOwpAQCAtMzA4Miw2ICszMzAxLDcgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmls
dGVyKQogICAgIFJVTih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMCkpOwogICAg
IFJVTih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0
U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgNjMpKTsKKyAgICBSVU4odGVzdFNobEFyZzMy
KDIpKTsKICAgICBSVU4odGVzdFNobEFyZ3MzMigxLCAwKSk7CiAgICAgUlVOKHRlc3RTaGxBcmdz
MzIoMSwgMSkpOwogICAgIFJVTih0ZXN0U2hsQXJnczMyKDEsIDYyKSk7CkBAIC0zMTIzLDYgKzMz
NDMsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTU2hyQXJn
SW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0U1NockFyZ0ltbSgweGZm
ZmZmZmZmZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFNTaHJBcmdJbW0oMHhmZmZmZmZmZmZm
ZmZmZmZmLCA2MykpOworICAgIFJVTih0ZXN0U1NockFyZzMyKDMyKSk7CiAgICAgUlVOKHRlc3RT
U2hyQXJnczMyKDEsIDApKTsKICAgICBSVU4odGVzdFNTaHJBcmdzMzIoMSwgMSkpOwogICAgIFJV
Tih0ZXN0U1NockFyZ3MzMigxLCA2MikpOwpAQCAtMzE2NCw2ICszMzg1LDcgQEAgdm9pZCBydW4o
Y29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbSgweGZmZmZmZmZmZmZm
ZmZmZmYsIDApKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0oMHhmZmZmZmZmZmZmZmZmZmZmLCAx
KSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgNjMpKTsKKyAg
ICBSVU4odGVzdFpTaHJBcmczMigzMikpOwogICAgIFJVTih0ZXN0WlNockFyZ3MzMigxLCAwKSk7
CiAgICAgUlVOKHRlc3RaU2hyQXJnczMyKDEsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdzMzIo
MSwgNjIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTYgQEAg
TmVnMzIgVUQ6RwogTmVnNjQgVUQ6RwogICAgIFRtcAogCitNdWwzMiBVOkcsIFVEOkcKKyAgICBU
bXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNdWwzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBU
bXAsIFRtcAorCitNdWw2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorCiBMZWEgVUE6RywgRDpH
CiAgICAgQWRkciwgVG1wCiAKQEAgLTE1NywxMCArMTY3LDYgQEAgWG9yNjQgVTpHLCBVRDpHCiAg
ICAgVG1wLCBBZGRyCiAgICAgSW1tLCBUbXAKIAotTXVsMzIgVTpHLCBVRDpHCi0gICAgVG1wLCBU
bXAKLSAgICBBZGRyLCBUbXAKLQogIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBm
dWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVu
ZGluZyBvbgogIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMg
aXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKICMgTW92
ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0
aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265270</attachid>
            <date>2015-11-10 22:06:44 -0800</date>
            <delta_ts>2015-11-10 22:33:02 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>111181</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNSBA
QAorMjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggQ2hpbGxEaXYKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaXMgYWJvdXQgYSBsb3QgbW9yZSB0aGFuIENoaWxsRGl2LiBJIHBpY2tlZCB0aGF0IGFzIHRo
ZSBuZXh0IHRoaW5nIHRvIGxvd2VyCisgICAgICAgIGJlY2F1c2UgSSBrbmV3IHRoYXQgaXQgd291
bGQgZm9yY2UgbWUgdG8gY29tZSB1cCB3aXRoIGEgc2Vuc2libGUgaWRpb20gZm9yIGRvaW5nCisg
ICAgICAgIHN0ZXB3aXNlIGxvd2VyaW5ncyB0aGF0IHJlcXVpcmUgYnJlYWtpbmcgYmFzaWMgYmxv
Y2tzLiBUaGUgaWRlYSBpcyB0aGF0IHlvdSB3YW50IHRvCisgICAgICAgIHdyaXRlIGEgbG9vcCB0
aGF0IGl0ZXJhdGVzIGZvcndhcmQgb3ZlciB0aGUgcHJvZ3JhbSwgd2hpY2ggdHVybnMgc29tZSBv
cGVyYXRpb25zIHRoYXQKKyAgICAgICAgY3VycmVudGx5IGFyZSBqdXN0IHNpbmdsZSBWYWx1ZXMg
aW50byBhbiBlbnRpcmUgbGl0dGxlIHN1Yi1DRkdzLiBUaGF0IHJlcXVpcmVzIHNwbGl0dGluZwor
ICAgICAgICB0aGUgYmxvY2sgdGhhdCBjb250YWluZWQgdGhlIG9yaWdpbmFsIFZhbHVlLiBUaGF0
J3MgdHJpY2t5IGlmIHlvdSB0aGVuIHdhbnQgdG8ga2VlcAorICAgICAgICBpdGVyYXRpbmc6IHRo
ZSBpbmRleCBvZiB0aGUgVmFsdWUgeW91IHdlcmUgbGFzdCBsb29raW5nIGF0IGhhcyBub3cgY2hh
bmdlZCBhbmQgeW91cgorICAgICAgICBJbnNlcnRpb25TZXRzIGFyZSBub3cgaW52YWxpZC4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYW4gaWRpb20gdGhhdCBoYW5kbGVzIHRoaXMuIEl0J3Mg
QmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0QmVmb3JlKCkuIFRoZQorICAgICAgICBpZGVhIGlzIHRo
YXQgaXQgdXNlcyB0aGUgY3VycmVudCBibG9jayBiZWZvcmUgdGhlIHNwbGl0IGFzIHRoZSBjb250
aW51YXRpb24gYWZ0ZXIgdGhlCisgICAgICAgIHNwbGl0LiBXaGVuIHlvdSBjYWxsIHNwbGl0QmVm
b3JlKCksIHlvdSBwYXNzIGl0IHlvdXIgbG9vcCBpbmRleCBhbmQgeW91ciBJbnNlcnRpb25TZXQK
KyAgICAgICAgKGlmIGFwcGxpY2FibGUpLiBJdCBtYWtlcyBzdXJlIHRoYXQgaXQgY2hhbmdlcyB0
aG9zZSBhdXhpbGlhcnkgdGhpbmdzIGluIHN1Y2ggYSB3YXkgdGhhdAorICAgICAgICB5b3UgY2Fu
IGtlZXAgbG9vcGluZy4KKworICAgICAgICBUaGlzIHVuY292ZXJlZCBzb21lIGJ1Z3MsIHNpbmNl
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB3ZSdyZSBjb21waWxpbmcgY3Jvc3MgZWRnZXMu
CisKKyAgICAgICAgQmVjYXVzZSBDaGlsbERpdiBpcyByZWFsbHkgYSBkaXZpc2lvbiwgSSBhbHNv
IGhhZCB0byB3cml0ZSBhIGJ1bmNoIG9mIGNvZGUgdG8gc3VwcG9ydAorICAgICAgICB0aGUgb3Jk
aW5hcnkgQjMgRGl2LiBXaGlsZSBkb2luZyB0aGF0LCBJIHJlYWxpemVkIHRoYXQgdGhlcmUgd2Fz
IGFzeW1tZXRyeSB0byB0aGF0CisgICAgICAgIGNvbnN0bmVzcyBvZiB0aGUgVmFsdWUgY29uc3Rh
bnQgZm9sZGluZyBtZXRob2RzLCBzbyBJIGZpeGVkIHRoYXQgYXMgd2VsbC4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjptdWwzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjp4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6eDg2RGl2MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bmVnMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bXVsNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6eDg2Q29udmVydFRvUXVhZFdvcmQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4ODZEaXY2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgICogYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZsX3IpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZxX3IpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OmNtcGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNkcSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y2RxcSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6ZnN0cHMpOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6cmVwbGFjZUxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6YXBwZW5kSW50
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVwbGFjZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6dXBkYXRlUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
QjM6OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5oOgorICAg
ICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJh
c2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2Nr
OjpwcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpmcmVxdWVuY3kp
OgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZXBsYWNlTGFzdFdpdGhOZXcpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3Vj
Y2Vzc29ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjp1cGRhdGVQcmVk
ZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAg
ICAqIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIz
OjpCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6
QjM6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpCMzo6QmxvY2tJ
bnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChKU0M6OkIzOjpCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkJsb2NrSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkIzOjppc1JlcHJlc2Vu
dGFibGVBcyk6CisgICAgICAgIChKU0M6OkIzOjpjaGlsbERpdik6CisgICAgICAgICogYjMvQjND
b25zdDMyVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdDMyVmFsdWU6OmJpdE9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZh
bHVlOjpiaXRYb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnNo
bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6c1NockNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
Q29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMy
VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1
ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dCk6CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0
NjRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkaXZDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmJpdFhvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c2hsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6
OkNvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDY0VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZh
bHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1
ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpn
cmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFi
b3ZlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50KToK
KyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKiBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjpyZXBsYWNlU3VjY2Vzc29yKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAgICogYjMv
QjNDb250cm9sVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6Ymxv
Y2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6ZnJlcXVlbmN5
KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlv
blNldDo6aW5zZXJ0SW50Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0
OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOgorICAgICAgICAqIGIz
L0IzTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omxvd2VyTWFjcm9z
KToKKyAgICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2Vy
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmFkZEJvb2xDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnJl
c2V0VmFsdWVPd25lcnMpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OnRha2VCeXByb2R1Y3RzKToKKyAgICAgICAgKiBiMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBi
My9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphZGRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiaXRBbmRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Yml0WG9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnNobENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzU2hyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnpTaHJDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bm90
RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc1RoYW5Db25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6CisgICAgICAgICogYjMvQjNW
YWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNVcnNoaWZ0NjRWYWxpZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmlzWDg2RGl2SGVscGVyVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpp
c1g4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMlZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
aXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmlzWDg2RGl2MzJWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzWDg2RGl2NjRWYWxp
ZCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNpbXBsaWZ5Q0ZH
KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2VHdpY2UpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2NjQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhEaXYpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhNb2QpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OmJ1aWxkQmluYXJ5STMyKToKKwogMjAxNS0xMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBaXIgc2hvdWxkIGFsbG9jYXRlIHJlZ2lzdGVycwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MjI5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDEwIEBACiAJCTBGMzM4RTE0MUJGMDI3
NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5
LmNwcCAqLzsgfTsKIAkJMEYzMzhFMTUxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA5MUJG
MDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi87IH07CiAJCTBGMzM4RTE2MUJGMDI3NkMw
MDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXlJbmxpbmVzLmggKi87IH07CisJCTBGMzM4RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cCAqLzsgfTsKKwkJMEYzMzhFMUMxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25T
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4
RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MzM4RTFEMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhG
IC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggKi87
IH07CiAJCTBGMzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUw
MDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLzsgfTsKIAkJMEYzNEIxNEExNkQ0MjAxMzAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IH07
CiAJCTBGMzhCMDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMEYxN0NGMDc3
RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi87IH07CkBAIC0yMzQzLDYgKzIzNDcs
MTAgQEAKIAkJMEYzMzhFMDgxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUtleS5jcHA7IHBhdGggPSBi
My9CM1ZhbHVlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMDkx
QkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNWYWx1ZUtleS5oOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtl
eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUtleUlu
bGluZXMuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmxvY2tJbnNl
cnRpb25TZXQuY3BwOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmxvY2tJ
bnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMTkxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJN
YWNyb3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlck1h
Y3Jvcy5jcHA7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzMzhFMUExQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlck1hY3Jvcy5oOyBwYXRoID0g
YjMvQjNMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0
NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNl
S2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRF
bnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NDIsNiArNDQ1
MCw4IEBACiAJCQkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICov
LAogCQkJCTBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmgg
Ki8sCiAJCQkJMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmgg
Ki8sCisJCQkJMEYzMzhFMTcxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQu
Y3BwICovLAorCQkJCTBGMzM4RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9u
U2V0LmggKi8sCiAJCQkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlz
dC5oICovLAogCQkJCTBGMzM4REY3MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuY3Bw
ICovLAogCQkJCTBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCAqLywK
QEAgLTQ0ODMsNiArNDQ5Myw4IEBACiAJCQkJMEZFQzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIz
SW5zZXJ0aW9uU2V0LmNwcCAqLywKIAkJCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJ
bnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODVCNjFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXRJbmxpbmVzLmggKi8sCisJCQkJMEYzMzhFMTkxQkYyODZFQTAwMTNDODhGIC8qIEIz
TG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xv
d2VyTWFjcm9zLmggKi8sCiAJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5jcHAgKi8sCiAJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fp
ci5oICovLAogCQkJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNw
cCAqLywKQEAgLTY2ODAsNiArNjY5Miw3IEBACiAJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1M0ExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDQxMUJF
NTg0Q0EwMDYyQTYyOSAvKiBCM1RpbWluZ1Njb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjc3OSw2ICs2NzkyLDcgQEAKIAkJCQlDMjIzOUQxOTE2MjYyQkREMDA1
QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE4RDE0
MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICov
LAorCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAx
ODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFC
RDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCkBAIC04MzI0LDYgKzgz
MzgsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVi
dWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMUQxQkYyODZFQTAw
MTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRDREREQx
OTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg0OTYsNiArODUxMSw3IEBACiAJCQkJMEZFQTBBMUUx
NzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292
ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTA5MTcwNTEzREIwMEJCNzIyQyAvKiBG
VExDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMUIxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
QTBBMjcxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIy
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsyNDcsMzAgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5pbXVsbF9pMzJyKHNyYywgaW1tLm1fdmFsdWUsIGRlc3QpOwogICAg
IH0KIAorICAgIHZvaWQgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmNkcSgpOworICAgIH0KKworICAgIHZvaWQgeDg2Q29udmVydFRvRG91Ymxl
V29yZDMyKFJlZ2lzdGVySUQgZWF4LCBSZWdpc3RlcklEIGVkeCkKKyAgICB7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoZWF4LCBlYXggPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGVkeCwgZWR4ID09IFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAgICAgeDg2Q29u
dmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXYzMihSZWdpc3Rl
cklEIGRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuaWRpdmxfcihkZW5v
bWluYXRvcik7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXYzMihSZWdpc3RlcklEIGVheCwgUmVn
aXN0ZXJJRCBlZHgsIFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGVheCwgZWF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChlZHgsIGVkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7CisgICAgICAgIHg4NkRpdjMy
KGRlbm9taW5hdG9yKTsKKyAgICB9CisKICAgICB2b2lkIG5lZzMyKFJlZ2lzdGVySUQgc3JjRGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ2xfcihzcmNEZXN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDYgKzM4
NiwzMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7
CiAgICAgfQogICAgIAorICAgIHZvaWQgeDg2Q29udmVydFRvUXVhZFdvcmQ2NCgpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5jcW8oKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkNvbnZlcnRU
b1F1YWRXb3JkNjQoUmVnaXN0ZXJJRCByYXgsIFJlZ2lzdGVySUQgcmR4KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChyYXgsIHJheCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXJzOjplZHgpOworICAgICAgICB4
ODZDb252ZXJ0VG9RdWFkV29yZDY0KCk7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXY2NChSZWdp
c3RlcklEIGRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuaWRpdnFfcihk
ZW5vbWluYXRvcik7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXY2NChSZWdpc3RlcklEIHJheCwg
UmVnaXN0ZXJJRCByZHgsIFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBB
U1NFUlRfVU5VU0VEKHJheCwgcmF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChyZHgsIHJkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7CisgICAgICAgIHg4NkRp
djY0KGRlbm9taW5hdG9yKTsKKyAgICB9CisKICAgICB2b2lkIG5lZzY0KFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3FfcihkZXN0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24g
MTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDYgKzk2MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9JRElWLCBkc3QpOwog
ICAgIH0KIAorI2lmIENQVShYODZfNjQpCisgICAgdm9pZCBpZGl2cV9yKFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBH
Uk9VUDNfT1BfSURJViwgZHN0KTsKKyAgICB9CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKKwogICAg
IC8vIENvbXBhcmlzb25zOgogCiAgICAgdm9pZCBjbXBsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKQEAgLTEyOTQsNiArMTMwMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9DRFEpOwogICAgIH0KIAorI2lmIENQVShYODZfNjQpCisgICAg
dm9pZCBjcW8oKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQ0RR
KTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZvaWQgZnN0cHMoaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0VTQ0FQRV9E
OSwgRVNDQVBFX0Q5X0ZTVFBfc2luZ2xlUmVhbCwgYmFzZSwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxOTIyOTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0jaW5j
bHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIs
NiArNTQsMjkgQEAgdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQogICAgIG1f
dmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZUxhc3Qo
UHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogdmFsdWUpCit7CisgICAgcHJvYy5kZWxldGVWYWx1ZShs
YXN0KCkpOworICAgIGxhc3QoKSA9IHZhbHVlOworfQorCitWYWx1ZSogQmFzaWNCbG9jazo6YXBw
ZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUs
IGludDY0X3QgdmFsdWUpCit7CisgICAgVmFsdWUqIHJlc3VsdCA9IHByb2MuYWRkSW50Q29uc3Rh
bnQob3JpZ2luLCB0eXBlLCB2YWx1ZSk7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVmFsdWUqIEJhc2ljQmxvY2s6OmFwcGVuZEludENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gYXBwZW5kSW50Q29uc3RhbnQocHJvYywgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZhbHVl
LT50eXBlKCksIHZhbHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlU3VjY2Vzc29y
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIHJldHVybiBsYXN0KCkt
PmFzPENvbnRyb2xWYWx1ZT4oKS0+cmVwbGFjZVN1Y2Nlc3Nvcihmcm9tLCB0byk7Cit9CisKIGJv
b2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAg
cmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7CkBAIC02Nyw2ICs5MiwxMSBA
QCBib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpCiAgICAgcmV0dXJuIEIz
OjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOwogfQogCit2b2lkIEJhc2ljQmxv
Y2s6OnVwZGF0ZVByZWRlY2Vzc29yc0FmdGVyKCkKK3sKKyAgICBCMzo6dXBkYXRlUHJlZGVjZXNz
b3JzQWZ0ZXIodGhpcyk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5MjI5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTEgKzI5LDE0IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIz
RnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitjbGFzcyBCbG9j
a0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNsYXNzIFByb2NlZHVyZTsKIGNs
YXNzIFZhbHVlOwpAQCAtNjgsMTAgKzcxLDE3IEBAIHB1YmxpYzoKICAgICBWYWx1ZUxpc3QmIHZh
bHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFwcGVuZChWYWx1ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwbGFjZUxhc3Qo
UHJvY2VkdXJlJiwgVmFsdWUqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVy
ZSYsIEFyZ3VtZW50cy4uLik7CiAKKyAgICBWYWx1ZSogYXBwZW5kSW50Q29uc3RhbnQoUHJvY2Vk
dXJlJiwgT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYXBwZW5kSW50
Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSk7Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgVmFsdWVUeXBlKiByZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJlJiwgQXJndW1l
bnRzLi4uKTsKKwogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKICAgICBjb25z
dCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAg
RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwpAQCAtODMsNiArOTMs
OCBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNz
b3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0
IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0
OwogCisgICAgYm9vbCByZXBsYWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxv
Y2sqIHRvKTsKKwogICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQogICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KICAg
ICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzW2luZGV4XTsgfQpAQCAtOTQsMTIgKzEwNiwxNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CiAgICAgYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCisgICAgLy8gVXBkYXRl
IHByZWRlY2Vzc29ycyBzdGFydGluZyB3aXRoIHRoZSBzdWNjZXNzb3JzIG9mIHRoaXMgYmxvY2su
CisgICAgdm9pZCB1cGRhdGVQcmVkZWNlc3NvcnNBZnRlcigpOworCiAgICAgZG91YmxlIGZyZXF1
ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZy
aWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTQgQEAgVmFsdWVU
eXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
VmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQg
PSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICByZXBsYWNlTGFz
dChwcm9jZWR1cmUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5lIHVu
c2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAogewogICAgIHJldHVybiBs
YXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDE5MjI5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSwyMCBAQCBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2ljQmxvY2s+Cit2b2lkIHVwZGF0ZVByZWRlY2Vzc29yc0FmdGVyKEJhc2ljQmxvY2sqIHJv
b3QpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7CisgICAgd29ya2xp
c3QuYXBwZW5kKHJvb3QpOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChhZGRQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKSkKKyAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29yKTsKKyAgICAgICAgfQorICAgIH0KK30K
KwogLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhh
dCBhcmVuJ3QgcmVhY2hhYmxlLgogdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5h
bWUgRGVsZXRlRnVuY3Rvcj4KIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoCkBAIC04MiwxNCArOTYs
NyBAQCB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KAogICAgICAgICAgICAgYmxvY2stPnByZWRlY2Vz
c29ycygpLnJlc2l6ZSgwKTsKICAgICB9CiAKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OwotICAgIHdvcmtsaXN0LnB1c2go
YmxvY2tzWzBdLmdldCgpKTsKLSAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5z
dWNjZXNzb3JCbG9ja3MoKSkgewotICAgICAgICAgICAgYWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29y
LCBibG9jayk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHN1Y2Nlc3Nvcik7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgdXBkYXRlUHJlZGVjZXNzb3JzQWZ0ZXIoYmxvY2tzWzBdLmdldCgpKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKCFibG9ja3NbaV0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
bG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChQcm9j
ZWR1cmUgJnByb2MpCisgICAgOiBtX3Byb2MocHJvYykKK3sKK30KKworQmxvY2tJbnNlcnRpb25T
ZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFw
cGVuZChXVEY6Om1vdmUoaW5zZXJ0aW9uKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFY
LCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAg
ICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURjo6bW92ZShibG9jaykpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0
QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1
cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1
ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKAorICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYg
dmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kp
Cit7CisgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOworCisgICAgLy8g
Q3JlYXRlIGEgbmV3IGJsb2NrIHRoYXQgd2lsbCBnbyBqdXN0IGJlZm9yZSAnYmxvY2snLCBhbmQg
bWFrZSBpdCBjb250YWluIGV2ZXJ5dGhpbmcgcHJpb3IKKyAgICAvLyB0byAndmFsdWVJbmRleCcu
CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gaW5zZXJ0QmVmb3JlKGJsb2NrLCBmcmVxdWVuY3kp
OworICAgIHJlc3VsdC0+bV92YWx1ZXMucmVzaXplKHZhbHVlSW5kZXggKyAxKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB2YWx1ZUluZGV4OyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmFsdWVz
W2ldID0gYmxvY2stPm1fdmFsdWVzW2ldOworCisgICAgLy8gTWFrZSB0aGUgbmV3IGJsb2NrIGp1
bXAgdG8gJ2Jsb2NrJy4KKyAgICByZXN1bHQtPm1fdmFsdWVzW3ZhbHVlSW5kZXhdID0KKyAgICAg
ICAgbV9wcm9jLmFkZDxDb250cm9sVmFsdWU+KEp1bXAsIHZhbHVlLT5vcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGJsb2NrKSk7CisKKyAgICAvLyBJZiB3ZSBoYWQgaW5zZXJ0ZWQgdGhpbmdzIGlu
dG8gJ2Jsb2NrJyBiZWZvcmUgdGhpcywgZXhlY3V0ZSB0aG9zZSBpbnNlcnRpb25zIG5vdy4KKyAg
ICBpZiAoaW5zZXJ0aW9uU2V0KQorICAgICAgICBpbnNlcnRpb25TZXQtPmV4ZWN1dGUocmVzdWx0
KTsKKworICAgIC8vIFJlbW92ZSBldmVyeXRoaW5nIHByaW9yIHRvICd2YWx1ZUluZGV4JyBmcm9t
ICdibG9jaycsIHNpbmNlIHRob3NlIHRoaW5ncyBhcmUgbm93IGluIHRoZQorICAgIC8vIG5ldyBi
bG9jay4KKyAgICBibG9jay0+bV92YWx1ZXMucmVtb3ZlKDAsIHZhbHVlSW5kZXgpOworCisgICAg
Ly8gVGhpcyBpcyBiZWluZyB1c2VkIGluIGEgZm9yd2FyZCBsb29wIG92ZXIgJ2Jsb2NrJy4gVXBk
YXRlIHRoZSBpbmRleCBvZiB0aGUgbG9vcCBzbyB0aGF0CisgICAgLy8gaXQgY2FuIGNvbnRpbnVl
IHRvIHRoZSBuZXh0IGJsb2NrLgorICAgIHZhbHVlSW5kZXggPSAwOworCisgICAgLy8gRml4dXAg
dGhlIHByZWRlY2Vzc29ycyBvZiAnYmxvY2snLiBUaGV5IG5vdyBtdXN0IGp1bXAgdG8gdGhlIG5l
dyBibG9jay4KKyAgICByZXN1bHQtPnByZWRlY2Vzc29ycygpID0gV1RGOjptb3ZlKGJsb2NrLT5w
cmVkZWNlc3NvcnMoKSk7CisgICAgYmxvY2stPmFkZFByZWRlY2Vzc29yKHJlc3VsdCk7CisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IHJlc3VsdC0+cHJlZGVjZXNzb3JzKCkpCisg
ICAgICAgIHByZWRlY2Vzc29yLT5yZXBsYWNlU3VjY2Vzc29yKGJsb2NrLCByZXN1bHQpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgp
Cit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGlu
IGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgIC8vIHJ1bm5p
bmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNv
cnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNv
cnQuCisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVu
ZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRp
b25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBz
dHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJs
b2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRj
aGluZygKKyAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRy
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgIH0pOwor
ICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5k
aWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Js
b2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBCM0Jsb2NrSW5zZXJ0aW9uU2V0X2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1
ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlv
bjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0
aW9uU2V0KFByb2NlZHVyZSYpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAg
IHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYpOworCisgICAgLy8gSW5zZXJ0IGEgbmV3IGJs
b2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJs
b2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhl
IGZyZXF1ZW5jeQorICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1
c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKKyAgICAv
LyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJh
c2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gQSBo
ZWxwZXIgdG8gc3BsaXQgYSBibG9jayB3aGVuIGZvcndhcmQgaXRlcmF0aW5nIG92ZXIgaXQuIEl0
IGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gaG9sZAorICAgIC8vIGV2ZXJ5dGhpbmcgYmVmb3JlIHRo
ZSBpbnN0cnVjdGlvbiBhdCB2YWx1ZUluZGV4LiBUaGUgY3VycmVudCBibG9jayBpcyBsZWZ0IHdp
dGgKKyAgICAvLyBldmVyeXRoaW5nIGF0IGFuZCBhZnRlciB2YWx1ZUluZGV4LiBJZiB0aGUgb3B0
aW9uYWwgSW5zZXJ0aW9uU2V0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGdldAorICAgIC8vIGV4ZWN1
dGVkIG9uIHRoZSBuZXdseSBjcmVhdGVkIGJsb2NrIC0gdGhpcyBtYWtlcyBzZW5zZSBpZiB5b3Ug
aGFkIHByZXZpb3VzbHkgaW5zZXJ0ZWQKKyAgICAvLyB0aGluZ3MgaW50byB0aGUgb3JpZ2luYWwg
YmxvY2ssIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGJsb2NrIHdpbGwgYmUgaW5kZXhlZCBpZGVu
dGljYWxseQorICAgIC8vIHRvIGhvbGQgdGhpcyBibG9jayB3YXMgaW5kZXhlZCBmb3IgYWxsIHZh
bHVlcyBwcmlvciB0byB2YWx1ZUluZGV4LiBBZnRlciB0aGlzIHJ1bnMsIGl0CisgICAgLy8gc2V0
cyB2YWx1ZUluZGV4IHRvIHplcm8uIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBtZXRob2Qg
Zm9yIHRoaW5ncyBsaWtlOgorICAgIC8vCisgICAgLy8gZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4
ID0gMDsgdmFsdWVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgIC8v
ICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisgICAgLy8gICAgIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gRm9vKSB7CisgICAgLy8gICAgICAgICBCYXNpY0Jsb2NrKiBw
cmVkZWNlc3NvciA9CisgICAgLy8gICAgICAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5zcGxp
dEZvcndhcmQoYmxvY2ssIHZhbHVlSW5kZXgsICZtX2luc2VydGlvblNldCk7CisgICAgLy8gICAg
ICAgICAuLi4gLy8gTm93IHlvdSBjYW4gYXBwZW5kIHRvIHByZWRlY2Vzc29yLCBpbnNlcnQgbmV3
IGJsb2NrcyBiZWZvcmUgJ2Jsb2NrJywgYW5kCisgICAgLy8gICAgICAgICAuLi4gLy8geW91IGNh
biB1c2UgbV9pbnNlcnRpb25TZXQgdG8gaW5zZXJ0IG1vcmUgdGhpbmcgYmVmb3JlICd2YWx1ZScu
CisgICAgLy8gICAgICAgICBwcmVkZWNlc3Nvci0+dXBkYXRlUHJlZGVjZXNzb3JzQWZ0ZXIoKTsK
KyAgICAvLyAgICAgfQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgaG93IHVzdWFsbHkg
dGhpcyBpZGlvbSBlbmRzIGluIGEgYWxsIHRvIHVwZGF0ZVByZWRlY2Vzc29yc0FmdHRlcigpLCB3
aGljaCBlbnN1cmVzCisgICAgLy8gdGhhdCB0aGUgcHJlZGVjZXNzb3JzIGludm9sdmVkIGluIGFu
eSBvZiB0aGUgbmV3IGNvbnRyb2wgZmxvdyB0aGF0IHlvdSd2ZSBjcmVhdGVkIGFyZSB1cAorICAg
IC8vIHRvIGRhdGUuCisgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAorICAgICAgICBCYXNp
Y0Jsb2NrKiwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxscHRyLAor
ICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgYm9vbCBleGVjdXRl
KCk7CisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgVmVjdG9yPEJsb2Nr
SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2NrSW5zZXJ0
aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9u
IDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw2ICs5NCwyNCBAQCBpbmxpbmUgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhk
b3VibGUgdmFsCiAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzSW1wbDxSZXN1bHRUeXBlLCBk
b3VibGUsIGludDY0X3Q+KHZhbHVlKTsKIH0KIAoraW5saW5lIGludDMyX3QgY2hpbGxEaXYoaW50
MzJfdCBudW0sIGludDMyX3QgZGVuKQoreworICAgIGlmICghZGVuKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoZGVuID09IC0xICYmIG51bSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptaW4oKSkKKyAgICAgICAgcmV0dXJuIG51bTsKKyAgICByZXR1cm4gbnVtIC8gZGVuOwor
fQorCitpbmxpbmUgaW50NjRfdCBjaGlsbERpdihpbnQ2NF90IG51bSwgaW50NjRfdCBkZW4pCit7
CisgICAgaWYgKCFkZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkZW4gPT0gLTEgJiYg
bnVtID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKQorICAgICAgICByZXR1
cm4gbnVtOworICAgIHJldHVybiBudW0gLyBkZW47Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTI2ICs0NywxMzMgQEAgVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2Vk
dQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsg
b3RoZXIpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUm
IHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmFkZENvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVy
biBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgb3RoZXItPmFzSW50
MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJu
IHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQz
MigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVlOjpkaXZDb25z
dGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBp
ZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgY2hpbGxEaXYobV92YWx1ZSwgb3Ro
ZXItPmFzSW50MzIoKSkpOworfQorCitWYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFu
dChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAo
IW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAmIG90aGVyLT5hc0ludDMy
KCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0T3JDb25z
dGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSB8IG90aGVyLT5hc0lu
dDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdFhv
ckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIF4gb3RoZXIt
PmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnNobENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6c2hs
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPDwgKG90aGVy
LT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpzU2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZh
bHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUg
Pj4gKG90aGVyLT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjp6
U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSog
Q29uc3QzMlZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCks
IHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+PiAo
b3RoZXItPmFzSW50MzIoKSAmIDMxKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpl
cXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVy
LT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4g
dHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29u
c3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRl
IENvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJp
U3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7
CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwg
b3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlclRo
YW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omdy
ZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICgh
b3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJl
dHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRl
IENvbnN0MzJWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJp
U3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1p
eGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzSW50
MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyRXF1YWxD
b25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFz
SW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0
YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJW
YWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMy
VmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAg
IHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkgPiBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMy
VmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Qz
MlZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAg
ICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fdmFsdWUpIDwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Qz
MlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUg
Q29uc3QzMlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1
ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0KIAotVHJp
U3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJl
dHVybiBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyNSArNDIsMjYgQEAgcHVi
bGljOgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25z
dCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQo
UHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0
T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBUcmlTdGF0ZSBlcXVh
bENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbm90
RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRl
IGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlT
dGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQo
UHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1
ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHpTaHJD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93RXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0
ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nywx
MjYgKzQ3LDEzMyBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1CiAg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBzdGF0
aWNfY2FzdDxpbnQ2NF90PihvdGhlcikpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3Zh
bHVlICsgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OnN1YkNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0
NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFs
dWUgLSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6Yml0QW5k
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29u
c3Q2NFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgY2hp
bGxEaXYobV92YWx1ZSwgb3RoZXItPmFzSW50NjQoKSkpOworfQorCitWYWx1ZSogQ29uc3Q2NFZh
bHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSAmIG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRPckNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSB8IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRY
b3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBD
b25zdDY0VmFsdWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigp
LCBtX3ZhbHVlIF4gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6
OnNobENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUq
IENvbnN0NjRWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgPDwgKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwogfQogCi1WYWx1ZSogQ29uc3Q2
NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0
CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4o
b3JpZ2luKCksIG1fdmFsdWUgPj4gKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwogfQogCi1WYWx1
ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
NjRWYWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYzKSkpOwogfQogCi1UcmlTdGF0
ZSBDb25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3Rh
dGUgQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QK
IHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQ2NCgpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAg
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0g
b3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc1RoYW5D
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Omxlc3NU
aGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIt
Pmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0
cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0
NjRWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0
ZSBDb25zdDY0VmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50NjQo
KSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPD0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZh
bHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAK
LVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV92YWx1ZSkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3RoZXItPmFzSW50NjQoKSkpOwogfQog
Ci1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fdmFsdWUpIDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKIH0K
IAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4obV92YWx1ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0lu
dDY0KCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwyNSArNDIsMjYgQEAgcHVibGljOgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVy
ZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBp
bnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1
ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1
cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSog
elNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dF
cXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50
KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1No
ckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQo
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhh
bkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFi
b3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAg
IFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw1NiArNDcsNjMgQEAgVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0
YW50KFBybwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSArIHN0YXRpY19jYXN0PGRvdWJsZT4ob3RoZXIpKTsKIH0KIAotVmFsdWUqIENvbnN0
RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBj
b25zdAorVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJs
ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3RE
b3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAK
LVZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZh
bHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91
YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KFZh
bHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC8gb3RoZXItPmFzRG91
YmxlKCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPT0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
Ojpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91
YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0
ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7CiB9
CiAKLVRyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkp
CiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3Zh
bHVlIDwgb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
OjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0
RG91YmxlVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRU
cmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVyLT5hc0RvdWJsZSgp
KTsKIH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc0VxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0Rv
dWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3Rh
dGUobV92YWx1ZSA8PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91
YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0
YXRlIENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3ICs0
MCwxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQogCi0gICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYgcHJvYykgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50
MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3Vi
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJv
Y2VkdXJlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZh
bHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBs
ZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNp
b24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMjIgQEAgQ29udHJvbFZhbHVlOjp+Q29udHJv
bFZhbHVlKCkKIHsKIH0KIAotdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb0p1bXAoY29uc3Qg
RnJlcXVlbnRlZEJsb2NrJiBkZXN0aW5hdGlvbikKK2Jvb2wgQ29udHJvbFZhbHVlOjpyZXBsYWNl
U3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIGJvb2wg
cmVzdWx0ID0gZmFsc2U7CisgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3NvciA6IG1f
c3VjY2Vzc29ycykgeworICAgICAgICBpZiAoc3VjY2Vzc29yLmJsb2NrKCkgPT0gZnJvbSkgewor
ICAgICAgICAgICAgc3VjY2Vzc29yLmJsb2NrKCkgPSB0bzsKKyAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisKKyAgICAgICAgICAgIC8vIEtlZXAgbG9vcGluZyBiZWNhdXNlIGl0J3MgdmFsaWQg
Zm9yIGEgc3VjY2Vzc29yIHRvIGJlIG1lbnRpb25lZCBtdWx0aXBsZSB0aW1lcywKKyAgICAgICAg
ICAgIC8vIGxpa2UgaWYgbXVsdGlwbGUgc3dpdGNoIGNhc2VzIGhhdmUgdGhlIHNhbWUgdGFyZ2V0
LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ29udHJv
bFZhbHVlOjpjb252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogewogICAgIHVu
c2lnbmVkIGluZGV4ID0gdGhpcy0+aW5kZXgoKTsKICAgICBPcmlnaW4gb3JpZ2luID0gdGhpcy0+
b3JpZ2luKCk7CkBAIC00NCw3ICs1OSw3IEBAIHZvaWQgQ29udHJvbFZhbHVlOjpjb252ZXJ0VG9K
dW1wKGNvbnN0IEYKIAogICAgIHRoaXMtPkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpOwog
Ci0gICAgbmV3ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgZGVzdGlu
YXRpb24pOworICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKGluZGV4LCBKdW1wLCBvcmlnaW4s
IEZyZXF1ZW50ZWRCbG9jayhkZXN0aW5hdGlvbikpOwogCiAgICAgdGhpcy0+b3duZXIgPSBvd25l
cjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShy
ZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsg
fQogICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7
IH0KIAorICAgIGJvb2wgcmVwbGFjZVN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0byk7CisKICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRha2VuKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUoKSA9PSBKdW1wIHx8IG9wY29kZSgpID09IEJyYW5j
aCk7CkBAIC04NSw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN1Y2Nlc3Nvcigx
KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbnZlcnRUb0p1bXAoY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGRlc3Rp
bmF0aW9uKTsKIAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1l
dGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93ZXJN
YWNyb3MuaCIKICNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKICNpbmNsdWRlICJCM01vdmVDb25z
dGFudHMuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgpAQCAtNjYsNiArNjcsOCBAQCB2b2lk
IGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIGRhdGFMb2cocHJv
Y2VkdXJlKTsKICAgICB9CiAKKyAgICBsb3dlck1hY3Jvcyhwcm9jZWR1cmUpOworCiAgICAgcmVk
dWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKICAgICAKICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0
aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVy
biBtX2Jsb2NrOyB9CiAgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1
cm4gbV9mcmVxdWVuY3k7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyYgZnJlcXVlbmN5KCkgeyByZXR1
cm4gbV9mcmVxdWVuY3k7IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5z
ZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDIyIEBACiAjaWYgRU5B
QkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0J1YmJsZVNvcnQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK1Zh
bHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBpbnNlcnRW
YWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuYWRkSW50Q29uc3RhbnQob3JpZ2luLCB0eXBlLCB2YWx1
ZSkpOworfQorCitWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnRDb25zdGFudChzaXplX3Qg
aW5kZXgsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGlu
c2VydEludENvbnN0YW50KGluZGV4LCBsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5
cGUoKSwgdmFsdWUpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2Nr
KiBibG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2Vy
dGlvbnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
c2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIK
ICNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC02Miw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZSogaW5zZXJ0KHNpemVfdCBpbmRleCwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cyk7CiAKKyAgICBWYWx1ZSogaW5zZXJ0SW50Q29uc3RhbnQo
c2l6ZV90IGluZGV4LCBPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlKiBp
bnNlcnRJbnRDb25zdGFudChzaXplX3QgaW5kZXgsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3Qg
dmFsdWUpOworCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJN
YWNyb3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIz
Q29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TG93ZXJNYWNyb3MgeworcHVibGljOgorICAgIExvd2VyTWFjcm9zKFByb2NlZHVyZSYgcHJvYykK
KyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHBy
b2MpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
YykgeworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgcHJvY2Vzc0N1
cnJlbnRCbG9jaygpOworICAgICAgICB9CisgICAgICAgIG1fY2hhbmdlZCB8PSBtX2Jsb2NrSW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgaWYgKG1fY2hhbmdlZCkKKyAgICAgICAgICAg
IG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzQ3VycmVudEJsb2NrKCkKKyAg
ICB7CisgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7
ICsrbV9pbmRleCkgeworICAgICAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0KG1faW5kZXgp
OworICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBDaGlsbERpdjogeworICAgICAgICAgICAgICAgIC8vIEFSTSBzdXBwb3J0cyB0aGlzIGlu
c3RydWN0aW9uIG5hdGl2ZWx5LgorICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGltcGxlbWVudCAicmVzID0gQ2hpbGxEaXYobnVt
LCBkZW4pIiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gICAgIGlmIChkZW4gKyAxIDw9X3Vuc2lnbmVkIDEpIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIGlmICghZGVuKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0g
MDsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICAgICBpZiAobnVtID09
IC0yMTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0gbnVt
OworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAg
ICAgIC8vICAgICByZXMgPSBudW0gLyBkZXY7CisgICAgICAgICAgICAgICAgLy8gZG9uZToKKwor
ICAgICAgICAgICAgICAgIFZhbHVlKiBudW0gPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogb25lID0KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
SW50Q29uc3RhbnQobV9pbmRleCwgbV92YWx1ZSwgMSk7CisgICAgICAgICAgICAgICAgVmFsdWUq
IGlzRGVuT0sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBBYm92ZSwgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgZGVuLCBvbmUpLAorICAgICAgICAgICAgICAgICAgICBvbmUpOworCisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmVmb3JlID0KKyAgICAgICAgICAgICAgICAgICAgbV9ibG9j
a0luc2VydGlvblNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9pbmRleCwgJm1faW5zZXJ0aW9u
U2V0KTsKKworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5vcm1hbERpdkNhc2UgPSBtX2Js
b2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzaGFkeURlbkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9y
ZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB6ZXJvRGVuQ2FzZSA9IG1f
YmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIG5lZzFEZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZv
cmUobV9ibG9jayk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogaW50TWluQ2FzZSA9IG1f
YmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworCisgICAgICAgICAgICAg
ICAgYmVmb3JlLT5yZXBsYWNlTGFzdFdpdGhOZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9yaWdpbigpLCBpc0Rlbk9LLAorICAg
ICAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobm9ybWFsRGl2Q2FzZSwgRnJlcXVlbmN5
Q2xhc3M6Ok5vcm1hbCksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhzaGFk
eURlbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICAgICAgICAgICAgICBVcHNp
bG9uVmFsdWUqIG5vcm1hbFJlc3VsdCA9IG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxVcHNpbG9u
VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIG1fdmFsdWUtPm9yaWdpbigpLAor
ICAgICAgICAgICAgICAgICAgICBub3JtYWxEaXZDYXNlLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRGl2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbnVtLCBkZW4pKTsKKyAgICAgICAgICAgICAgICBu
b3JtYWxEaXZDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLCBKdW1wLCBtX3ZhbHVlLT5vcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKG1fYmxv
Y2spKTsKKworICAgICAgICAgICAgICAgIHNoYWR5RGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgQnJhbmNoLCBtX3ZhbHVlLT5vcmln
aW4oKSwgZGVuLAorICAgICAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobmVnMURlbkNh
c2UsIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpLAorICAgICAgICAgICAgICAgICAgICBGcmVxdWVu
dGVkQmxvY2soemVyb0RlbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICAgICAg
ICAgICAgICBVcHNpbG9uVmFsdWUqIHplcm9SZXN1bHQgPSB6ZXJvRGVuQ2FzZS0+YXBwZW5kTmV3
PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgICAgIHplcm9EZW5DYXNlLT5hcHBlbmRJbnRDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUsIDApKTsKKyAgICAgICAgICAgICAgICB6ZXJvRGVuQ2FzZS0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgSnVtcCwg
bV92YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAgICAgICAg
ICAgICAgICBpbnQ2NF90IGJhZE51bWVyYXRvckNvbnN0OworICAgICAgICAgICAgICAgIHN3aXRj
aCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJhZE51bWVyYXRvckNvbnN0
ID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogYmFkTnVt
ZXJhdG9yID0KKyAgICAgICAgICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVuZEludENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZSwgYmFkTnVtZXJhdG9yQ29uc3QpOworCisgICAgICAgICAgICAg
ICAgbmVnMURlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICBtX3Byb2MsIEJyYW5jaCwgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIG5lZzFEZW5DYXNlLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLCBFcXVhbCwgbV92YWx1ZS0+b3JpZ2luKCksIG51bSwgYmFkTnVtZXJhdG9yKSwK
KyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGludE1pbkNhc2UsIEZyZXF1ZW5j
eUNsYXNzOjpSYXJlKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKG5vcm1h
bERpdkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpKTsKKworICAgICAgICAgICAgICAgIFVw
c2lsb25WYWx1ZSogaW50TWluUmVzdWx0ID0gaW50TWluQ2FzZS0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2luKCksIGJh
ZE51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgaW50TWluQ2FzZS0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgSnVtcCwgbV92YWx1ZS0+b3Jp
Z2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1
ZSogcGhpID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleCwgUGhpLCBtX3ZhbHVlLT50eXBlKCksIG1fdmFsdWUtPm9yaWdpbigpKTsKKyAg
ICAgICAgICAgICAgICBub3JtYWxSZXN1bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAgICAg
IHplcm9SZXN1bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAgICAgIGludE1pblJlc3VsdC0+
c2V0UGhpKHBoaSk7CisKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50
aXR5KHBoaSk7CisgICAgICAgICAgICAgICAgYmVmb3JlLT51cGRhdGVQcmVkZWNlc3NvcnNBZnRl
cigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IFN3aXRjaC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTExMTUKKworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOworICAgIH0KKyAgICAKKyAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKKyAgICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9u
U2V0OworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWUqIG1fdmFsdWU7CisgICAg
Ym9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OworfTsKKworYm9vbCBsb3dlck1hY3Jvc0ltcGwoUHJv
Y2VkdXJlJiBwcm9jKQoreworICAgIExvd2VyTWFjcm9zIGxvd2VyTWFjcm9zKHByb2MpOworICAg
IHJldHVybiBsb3dlck1hY3Jvcy5ydW4oKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK2Jvb2wgbG93ZXJNYWNyb3MoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShwcm9jLCAibG93ZXJNYWNyb3MiKTsKKyAgICBib29sIHJlc3VsdCA9IGxvd2Vy
TWFjcm9zSW1wbChwcm9jKTsKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbG93ZXJNYWNyb3NJbXBsKHByb2MpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93ZXJNYWNyb3NfaAorI2RlZmluZSBCM0xv
d2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIExvd2VycyBoaWdoLWxldmVsIG9w
ZXJhdGlvbnMgdGhhdCBpdCdzIGVhc2llciB0byBkZWFsIHdpdGggb25jZSB0aGV5IGFyZSBicm9r
ZW4gdXAuIEN1cnJlbnRseQorLy8gdGhpcyBpbmNsdWRlcyBTd2l0Y2ggYW5kIENoaWxsRGl2Lgor
Citib29sIGxvd2VyTWFjcm9zKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyTWFjcm9z
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJl
dmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMzLDYgKzEyMzMsNDAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRGl2OiB7CisgICAgICAg
ICAgICBpZiAoaXNJbnQobV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIFRtcCBl
YXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAgICAgICAgIFRtcCBlZHggPSBU
bXAoWDg2UmVnaXN0ZXJzOjplZHgpOworCisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgY29u
dmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBkaXY7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvRG91YmxlV29yZDMyOworICAgICAgICAgICAgICAgICAgICBkaXYgPSBYODZEaXYz
MjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2
NDoKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRU
b1F1YWRXb3JkNjQ7CisgICAgICAgICAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOworICAg
ICAgICAgICAgICAgIGFwcGVuZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBlYXgsIHRtcChtX3ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBkb3VibGVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDk5MQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNh
c2UgQml0QW5kOiB7CiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQsIEFpcjo6
T29wcywgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBt
X3ZhbHVlLT5jaGlsZCgxKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAko
cmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsK
ICAgICBBZGQsCiAgICAgU3ViLAogICAgIE11bCwKLSAgICBEaXYsCisgICAgRGl2LCAvLyBBbGwg
YmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlz
IGZvciAtMl4zMS8tMSBhbmQgeC8wLgogCiAgICAgLy8gSW50ZWdlciBtYXRoLgogICAgIENoaWxs
RGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MjI5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDIyICs1NSwyNyBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2Nr
KGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmFsdWUqIFByb2NlZHVyZTo6YWRk
SW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorVmFsdWUqIFByb2NlZHVyZTo6
YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQog
ewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSW50MzI6Ci0gICAgICAgIHJldHVybiBh
ZGQ8Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4odmFsdWUpKTsKICAgICBjYXNlIEludDY0OgotICAgICAgICByZXR1cm4gYWRkPENvbnN0
NjRWYWx1ZT4oT3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDY0VmFs
dWU+KG9yaWdpbiwgdmFsdWUpOwogICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1cm4gYWRk
PENvbnN0RG91YmxlVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBhZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQogCi1WYWx1
ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUpCitWYWx1ZSog
UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90IHZhbHVl
KQoreworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtl
VmFsdWUtPnR5cGUoKSwgdmFsdWUpOworfQorCitWYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29u
c3RhbnQoT3JpZ2luIG9yaWdpbiwgVHJpU3RhdGUgdHJpU3RhdGUpCiB7CiAgICAgaW50MzJfdCB2
YWx1ZSA9IDA7CiAgICAgc3dpdGNoICh0cmlTdGF0ZSkgewpAQCAtODQsNyArODksNyBAQCBWYWx1
ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIHJldHVybiBhZGRJbnRDb25zdGFudChJbnQzMiwgdmFsdWUpOwor
ICAgIHJldHVybiBhZGRJbnRDb25zdGFudChvcmlnaW4sIEludDMyLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAjaW5jbHVkZSAi
QjNUeXBlLmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAg
LTQwLDYgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBC
YXNpY0Jsb2NrOworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBPcGFxdWVCeXByb2R1
Y3RzOwogY2xhc3MgVmFsdWU7CiAKQEAgLTU2LDEwICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFs
dWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKIAotICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChU
eXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2luLCBU
eXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUqLCBp
bnQ2NF90IHZhbHVlKTsKIAogICAgIC8vIFJldHVybnMgbnVsbCBmb3IgTWl4ZWRUcmlTdGF0ZS4K
LSAgICBWYWx1ZSogYWRkQm9vbENvbnN0YW50KFRyaVN0YXRlKTsKKyAgICBWYWx1ZSogYWRkQm9v
bENvbnN0YW50KE9yaWdpbiwgVHJpU3RhdGUpOwogCiAgICAgdm9pZCByZXNldFZhbHVlT3duZXJz
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwpAQCAtMjE2LDYgKzIxOSw4IEBAIHB1
YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gdGFrZUJ5cHJvZHVj
dHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9ieXByb2R1Y3RzKTsgfQogCiBwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKKyAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOwogICAgIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODYsNiArMTg2LDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgIGNhc2UgRGl2OgorICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMg
dXNlcyBDaGlsbERpdiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZSBydWxlcyBm
b3IgRGl2CisgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBpdCBoYXMgY29ybmVy
IGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAorICAgICAgICAgICAg
Ly8gbGlrZXMuCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxk
KDApLT5kaXZDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAg
ICBicmVhazsKKwogICAgICAgICBjYXNlIEJpdEFuZDoKICAgICAgICAgICAgIGhhbmRsZUNvbW11
dGF0aXZpdHkoKTsKIApAQCAtMzE4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZVgsIHZhbHVlWCkKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogemVyby1jb25zdGFudC4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9
PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUtPnR5cGUoKSwgMCkpOworICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUs
IDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDQ2LDcg
KzQ1Niw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGNvbnN0
MSwgY29uc3QyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29uc3QyCiAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV92YWx1ZS0+
Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOb3RFcXVhbDoK
QEAgLTQ3Myw3ICs0ODUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBO
b3RFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3Qx
ICE9IGNvbnN0MgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAg
ICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ub3RFcXVhbENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3Zh
bHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTGVz
c1RoYW46CkBAIC00ODEsNDIgKzQ5NSw1OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk1OAogCiAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQo
MSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDApLT5sZXNzVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIExlc3NFcXVhbDoKICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xD
b25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR3JlYXRlckVxdWFsOgogICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9v
bENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyRXF1YWxDb25zdGFudChtX3ZhbHVl
LT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAor
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBYm92ZToKICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJv
b2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVDb25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCktPmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJlbG93OgogICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDApLT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KS0+YmVsb3dDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5j
aGlsZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+
YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUt
PmNoaWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAg
ICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEJyYW5jaDogewpAQCAtNTUzLDcgKzU4Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAoZWxzZSkKICAgICAgICAgICAgIGlm
ICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT50
YWtlbigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAg
ICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkpOworICAgICAgICAg
ICAgICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkuYmxvY2soKSk7
CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTU2Miw3ICs1OTIsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBKdW1wKHRoZW4pCiAgICAgICAgICAgICBpZiAodHJpU3RhdGUg
PT0gVHJ1ZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5ub3RUYWtlbigpLmJs
b2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAgICAgIGJyYW5j
aC0+Y29udmVydFRvSnVtcChicmFuY2gtPnRha2VuKCkpOworICAgICAgICAgICAgICAgIGJyYW5j
aC0+Y29udmVydFRvSnVtcChicmFuY2gtPnRha2VuKCkuYmxvY2soKSk7CiAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTYzMSw2ICs2NjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2ltcGxpZnlD
RkcoKQogICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
IkJlZm9yZSBzaW1wbGlmeUNGRzpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX3Byb2MpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHRocmVlIGVhc3kgc2ltcGxp
ZmljYXRpb24gcnVsZXM6CiAgICAgICAgIC8vCiAgICAgICAgIC8vIDEpIElmIGEgc3VjY2Vzc29y
IGlzIGEgYmxvY2sgdGhhdCBqdXN0IGp1bXBzIHRvIGFub3RoZXIgYmxvY2ssIHRoZW4ganVtcCBk
aXJlY3RseSB0bwpAQCAtNjUxLDYgKzY4Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGl0ZXJh
dGlvbnMgbmVlZGVkIHRvIGtpbGwgYSBsb3Qgb2YgY29kZS4KIAogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBibG9jayAiLCAqYmxvY2ssICI6XG4iKTsK
KwogICAgICAgICAgICAgY2hlY2tQcmVkZWNlc3NvclZhbGlkaXR5KCk7CiAKICAgICAgICAgICAg
IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBzdWNjZXNzb3Jz
LgpAQCAtNjY0LDcgKzcwMiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAmJiBz
dWNjZXNzb3ItPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVtcCkgewogICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3IgPSBzdWNjZXNzb3ItPnN1Y2Nlc3NvckJsb2NrKDAp
OwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3VjY2Vzc29yICE9IHN1Y2Nlc3Nvcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5yZXBsYWNlUHJlZGVjZXNzb3Io
c3VjY2Vzc29yLCBibG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBw
b2ludGVyRHVtcChzdWNjZXNzb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IHdpdGggIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChuZXdTdWNjZXNz
b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBk
byBub3QgZG8gcmVwbGFjZVByZWRlY2Vzc29yKCkgYmVjYXVzZSB0aGUgYmxvY2sgd2UncmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXBwaW5nIHdpbGwgc3RpbGwgaGF2ZSBuZXdTdWNj
ZXNzb3IgYXMgaXRzIHN1Y2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N1Y2Nl
c3Nvci0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yID0gbmV3U3VjY2Vzc29yOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
Q0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjc5LDE0ICs3MjUsMTggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIWVmZmVjdHMubXVzdEV4ZWN1dGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBBbGwgb2YgdGhlIHN1Y2Nlc3NvcnMgbXVzdCBiZSB0aGUg
c2FtZS4KICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxTYW1lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGZpcnN0U3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nl
c3NvcigwKTsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogZmlyc3RTdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yQmxvY2soMCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soaSkgIT0gZmlyc3RTdWNj
ZXNzb3IuYmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNj
ZXNzb3JCbG9jayhpKSAhPSBmaXJzdFN1Y2Nlc3NvcikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFNhbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBpZiAoYWxsU2FtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhbmdpbmcgIiwgcG9pbnRlckR1bXAoYmxv
Y2spLCAiJ3MgdGVybWluYWwgdG8gYSBKdW1wLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPmNvbnZlcnRUb0p1bXAoZmlyc3RTdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNzE5
LDYgKzc2OSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhh
dCBwcmVkZWNlc3NvcnMgb2YgYmxvY2sncyBuZXcgc3VjY2Vzc29ycyBrbm93IHdoYXQncyB1cC4K
ICAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29yQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdWNjZXNz
b3ItPnJlcGxhY2VQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2VkICIsIHBvaW50ZXJEdW1wKGJsb2Nr
KSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIlxuIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZENGRyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw4ICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7Ci0gICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6
IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1
ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKGNoaWxkLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5z
KGNoaWxkKSwgKCJBdCAiLCAqdmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKGNoaWxkKSkpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFz
aFNldDxCYXNpY0Jsb2NrKj4+IGFsbFByZWRlY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDkyICsxMjQsOTcgQEAg
VmFsdWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbgogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikg
Y29uc3QKK1ZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
KSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OnN1YkNv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6c3ViQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1WYWx1ZSogVmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikg
Y29uc3QKK1ZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
KSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmJpdE9y
Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRBbmRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVl
OjpzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmJp
dFhvckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUmLCBjb25z
dCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1
ZTo6elNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6
c1NockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqKSBj
b25zdAorVmFsdWUqIFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
KSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6ZXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QK
K1RyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsK
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFu
Q29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQo
Y29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1U
cmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0
ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpsZXNzRXF1YWxDb25z
dGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoY29u
c3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlT
dGF0ZSBWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUg
VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQo
VmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUq
KSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1
ZTo6YmVsb3dDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YmVsb3dDb25z
dGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9
CiAKLVRyaVN0YXRlIFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJp
U3RhdGUgVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpiZWxvd0VxdWFs
Q29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwy
NSArMTExLDI2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIFZhbHVlKiBuZWdDb25zdGFu
dChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQcm9j
ZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25z
dGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUq
IHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVh
bCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBzaGxDb25zdGFudChQcm9j
ZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHNTaHJDb25z
dGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUq
IHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1
cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OyAvLyBUaGlzIGNob29zZXMgQ2hpbGxEaXYg
c2VtYW50aWNzIGZvciBpbnRlZ2Vycy4KKyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRBbmRDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFs
dWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHNobENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc1NockNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVh
bCBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Q7CiAgICAgCi0gICAgdmlydHVhbCBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1YWxDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3JlYXRlckVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGFi
b3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGJl
bG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGFi
b3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3Rh
dGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBU
cmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmly
dHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7
CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1YWxDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3Jl
YXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7CiAKICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBjb21wYXJp
c29uIHRoZW4gdGhpcyByZXR1cm5zIHRoZSBpbnZlcnRlZCBmb3JtIG9mIHRoYXQgY29tcGFyaXNv
biwgaWYKICAgICAvLyBwb3NzaWJsZS4gSXQgY2FuIGJlIGltcG9zc2libGUgZm9yIGRvdWJsZSBj
b21wYXJpc29ucywgd2hlcmUgZm9yIGV4YW1wbGUgTGVzc1RoYW4gYW5kCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NTksNiArMjg1OSwx
MDggQEAgdm9pZCB0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndQogICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jKSA9PSBmdW5jdGlvbldpdGhIZWxsYURvdWJsZUFy
Z3VtZW50cygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYpKTsKIH0KIAordm9p
ZCB0ZXN0Q2hpbGxEaXYoaW50IG51bSwgaW50IGRlbiwgaW50IHJlcykKK3sKKyAgICAvLyBUZXN0
IG5vbi1jb25zdGFudC4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisg
ICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBudW0sIGRlbikgPT0gcmVzKTsK
KyAgICB9CisKKyAgICAvLyBUZXN0IGNvbnN0YW50LgorICAgIHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbnVt
KSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgZGVuKSkpOworICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpID09IHJlcyk7CisgICAgfQorfQorCit2b2lkIHRlc3RDaGlsbERpdlR3aWNlKGlu
dCBudW0xLCBpbnQgZGVuMSwgaW50IG51bTIsIGludCBkZW4yLCBpbnQgcmVzKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwKKyAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKSkpKSk7Cisg
ICAgCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIG51bTEsIGRlbjEsIG51bTIs
IGRlbjIpID09IHJlcyk7Cit9CisKK3ZvaWQgdGVzdENoaWxsRGl2NjQoaW50NjRfdCBudW0sIGlu
dDY0X3QgZGVuLCBpbnQ2NF90IHJlcykKK3sKKyAgICBpZiAoIWlzNjRCaXQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gVGVzdCBub24tY29uc3RhbnQuCisgICAgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpKTsKKyAgICAgICAgCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4o
cHJvYywgbnVtLCBkZW4pID09IHJlcyk7CisgICAgfQorCisgICAgLy8gVGVzdCBjb25zdGFudC4K
KyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBDaGls
bERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG51bSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGRlbikpKTsKKyAgICAgICAgCisgICAg
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYykgPT0gcmVzKTsKKyAgICB9Cit9
CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMzMzcsNiArMzQz
OSwyNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RDYWxsU2lt
cGxlRG91YmxlKDEsIDIpKTsKICAgICBSVU4odGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYURvdWJs
ZUFyZ3VtZW50cygpKTsKIAorICAgIFJVTih0ZXN0Q2hpbGxEaXYoNCwgMiwgMikpOworICAgIFJV
Tih0ZXN0Q2hpbGxEaXYoMSwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoMCwgMCwgMCkp
OworICAgIFJVTih0ZXN0Q2hpbGxEaXYoMSwgLTEsIC0xKSk7CisgICAgUlVOKHRlc3RDaGlsbERp
digtMjE0NzQ4MzY0NyAtIDEsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2KC0yMTQ3NDgz
NjQ3IC0gMSwgMSwgLTIxNDc0ODM2NDcgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigtMjE0
NzQ4MzY0NyAtIDEsIC0xLCAtMjE0NzQ4MzY0NyAtIDEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2
KC0yMTQ3NDgzNjQ3IC0gMSwgMiwgLTEwNzM3NDE4MjQpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2
NjQoNCwgMiwgMikpOworICAgIFJVTih0ZXN0Q2hpbGxEaXY2NCgxLCAwLCAwKSk7CisgICAgUlVO
KHRlc3RDaGlsbERpdjY0KDAsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoMSwgLTEs
IC0xKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAx
LCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwg
LSAxLCAxLCAtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMSkpOworICAgIFJVTih0ZXN0Q2hpbGxE
aXY2NCgtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMSwgLTEsIC05MjIzMzcyMDM2ODU0Nzc1ODA3
bGwgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwg
LSAxLCAyLCAtNDYxMTY4NjAxODQyNzM4NzkwNCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXZUd2lj
ZSg0LCAyLCA2LCAyLCA1KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdlR3aWNlKDQsIDAsIDYsIDIs
IDMpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2VHdpY2UoNCwgMiwgNiwgMCwgMikpOworCiAgICAg
aWYgKHRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2Fs
bEhlbHBlcnMmIAogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAg
ICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgYmxvY2tMYWJlbHNbYmxv
Y2tdID0gaml0LmxhYmVsKCk7CiAgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkg
ewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2Vu
ZXJhdGUoaml0LCBjb250ZXh0KTsKQEAgLTE0MCw4ICsxNDEsNiBAQCB2b2lkIGdlbmVyYXRlKENv
ZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRl
eHQpOwotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCi0gICAgICAgICAgICBqdW1w
ID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwogICAgICAgICBzd2l0Y2ggKGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCkpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgQVNTRVJUKCFq
dW1wLmlzU2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDM2
IEBAIGlubGluZSBib29sIGlzVXJzaGlmdDY0VmFsaWQoY29uc3QgSW5zdCYKICAgICByZXR1cm4g
aXNTaGlmdFZhbGlkKGluc3QpOwogfQogCitpbmxpbmUgYm9vbCBpc1g4NkRpdkhlbHBlclZhbGlk
KGNvbnN0IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBy
ZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgJiYg
aW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBpc1g4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMlZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVy
VmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzWDg2Q29udmVydFRvUXVhZFdvcmQ2NFZh
bGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVyVmFsaWQo
aW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzWDg2RGl2MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0
KQoreworICAgIHJldHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOworfQorCitpbmxpbmUg
Ym9vbCBpc1g4NkRpdjY0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNY
ODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBj
b3B5KQpAQCAtOTYsNiArOTYsMjIgQEAgTmVnMzIgVUQ6RwogTmVnNjQgVUQ6RwogICAgIFRtcAog
CitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitYODZDb252
ZXJ0VG9Eb3VibGVXb3JkMzIgVTpHLCBEOkcKKyAgICBUbXAqLCBUbXAqCisKK1g4NkNvbnZlcnRU
b1F1YWRXb3JkNjQgVTpHLCBEOkcKKyAgICBUbXAqLCBUbXAqCisKK1g4NkRpdjMyIFVEOkcsIFVE
OkcsIFU6RworICAgIFRtcCosIFRtcCosIFRtcAorCitYODZEaXY2NCBVRDpHLCBVRDpHLCBVOkcK
KyAgICBUbXAqLCBUbXAqLCBUbXAKKwogTGVhIFVBOkcsIEQ6RwogICAgIEFkZHIsIFRtcAogCkBA
IC0xNTcsMTAgKzE3Myw2IEBAIFhvcjY0IFU6RywgVUQ6RwogICAgIFRtcCwgQWRkcgogICAgIElt
bSwgVG1wCiAKLU11bDMyIFU6RywgVUQ6RwotICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wCi0K
ICMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3
aGljaCBpcyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KICMgdGhlIHBsYXRm
b3JtLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQg
bWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCiAjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RP
SCwgb3VyIE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUo
KSIgdGhhdCBiYXNpY2FsbHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U2ltcGxpZnlDRkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU2ltcGxpZnlDRkcuY3BwCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsOSBAQCBib29sIHNpbXBsaWZ5Q0ZHKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBw
b2ludGVyRHVtcChzdWNjZXNzb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IHdpdGggIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChuZXdTdWNjZXNz
b3IpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld1N1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKHN1Y2Nlc3NvciwgYmxvY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBkbyByZXBs
YWNlUHJlZGVjZXNzb3IoKSBiZWNhdXNlIHRoZSBibG9jayB3ZSdyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc2tpcHBpbmcgd2lsbCBzdGlsbCBoYXZlIG5ld1N1Y2Nlc3NvciBhcyBpdHMg
c3VjY2Vzc29yLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5hZGRQcmVk
ZWNlc3NvcihibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3IgPSBuZXdT
dWNjZXNzb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtMTEyLDYgKzExNCw3IEBAIGJvb2wgc2ltcGxpZnlDRkcoQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDaGFuZ2luZyAi
LCBwb2ludGVyRHVtcChibG9jayksICIncyB0ZXJtaW5hbCB0byBhIEp1bXAuXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkgPSBJbnN0KEp1bXAsIGJsb2NrLT5sYXN0
KCkub3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCku
cmVzaXplKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKVsw
XS5mcmVxdWVuY3koKSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJh
c2ljQmxvY2s+KTsKICAgICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBl
eGVjdXRpb25Db3VudCk7CiAgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sq
IGJlZm9yZSwgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRl
KCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOTks
OCArMzM5OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3By
KCkpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKLSAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuaWRpdmxfcihvcDJHUFIpOworICAgICAgICBtX2ppdC54ODZDb252ZXJ0VG9Eb3Vi
bGVXb3JkMzIoKTsKKyAgICAgICAgbV9qaXQueDg2RGl2MzIob3AyR1BSKTsKICAgICAgICAgICAg
IAogICAgICAgICBpZiAob3AyVGVtcEdQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAg
dW5sb2NrKG9wMlRlbXBHUFIpOwpAQCAtMzU1NSw4ICszNTU1LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShv
cDFHcHIsIGVheC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoZGl2aXNvciksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxl
cigpLmNkcSgpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMy
KCk7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2RGl2MzIoc2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkg
ewogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNh
dmVHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6WmVybywgZWR4LmdwcigpKSk7CkBAIC0zNjQ2LDggKzM2NDYsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgZWF4LmdwcigpKTsKLSAgICAgICAgbV9qaXQu
YXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Iob3Ay
R1BSKTsKKyAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAg
IG1faml0Lng4NkRpdjMyKG9wMkdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKG9wMlRl
bXBHUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82
NC5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDggKzg1OCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBKdW1wIGRlbm9taW5h
dG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKC0xKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIx
NDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKLSAgICBt
X2Fzc2VtYmxlci5jZHEoKTsKLSAgICBtX2Fzc2VtYmxlci5pZGl2bF9yKHJlZ1QyKTsKKyAgICB4
ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICB4ODZEaXYzMihyZWdUMik7CiAgICAgSnVt
cCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDMs
IFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMTkyMjkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIzLDggKzYyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlv
biogY3VycmUKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JO
b3ROZWcxLmxpbmsodGhpcyk7Ci0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJs
ZXIuaWRpdmxfcihlY3gpOworICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIHg4
NkRpdjMyKGVjeCk7CiAgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhp
cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlv
bkNvbXBpbGVyLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2Myw4ICs3NjMs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gWDg2UmVn
aXN0ZXJzOjplYXgpOwogICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgWDg2UmVnaXN0
ZXJzOjplY3gpOwogICAgICAgICAgICAgaWYgKG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlNE
aXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01vZCkgewotICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNkcSgpOwotICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3Io
WDg2UmVnaXN0ZXJzOjplY3gpOworICAgICAgICAgICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMigpOworICAgICAgICAgICAgICAgIHg4NkRpdjMyKFg4NlJlZ2lzdGVyczo6ZWN4KTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IFdBU01PcEV4
cHJlc3Npb25JMzI6OlVEaXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1vZCk7CiAg
ICAgICAgICAgICAgICAgeG9yMzIoWDg2UmVnaXN0ZXJzOjplZHgsIFg4NlJlZ2lzdGVyczo6ZWR4
KTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTExLTEwICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBh
IHByb2dyYW0gd2l0aCBDaGlsbERpdgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUxMTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTmVlZGVkIHRvIGJlZWYgdXAgc29tZSBjb21waWxlciBhbGdvcml0aG1z
LiBBbGwgb2YgdGhlIGhhcmRlbmluZyB3YXMgYWJvdXQgbWFraW5nIHRoZW0KKyAgICAgICAgd29y
ayB3aXRoIG9iamVjdHMgdGhhdCBoYXZlIG1vdmUgc2VtYW50aWNzIGJ1dCBub3QgY29weSBzZW1h
bnRpY3MuIFRoaXMgYXJpc2VzIGluIEIzCisgICAgICAgIGJhc2ljIGJsb2NrIGluc2VydGlvbiBz
ZXRzLgorCisgICAgICAgICogd3RmL0J1YmJsZVNvcnQuaDoKKyAgICAgICAgKFdURjo6YnViYmxl
U29ydCk6CisgICAgICAgICogd3RmL0luc2VydGlvbi5oOgorICAgICAgICAoV1RGOjpJbnNlcnRp
b246Okluc2VydGlvbik6CisgICAgICAgIChXVEY6Okluc2VydGlvbjo6aW5kZXgpOgorICAgICAg
ICAoV1RGOjpJbnNlcnRpb246OmVsZW1lbnQpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246Om9w
ZXJhdG9yPCk6CisgICAgICAgIChXVEY6OmV4ZWN1dGVJbnNlcnRpb25zKToKKwogMjAxNS0xMS0x
MCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVXNlIENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVOVVMKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0J1YmJsZVNvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CdWJibGVTb3J0
LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9XVEYvd3RmL0J1YmJsZVNvcnQuaAkod29y
a2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCB2b2lkIGJ1YmJsZVNvcnQoSXRlcmF0b3JUeXBl
IGJlZ2luLCBJdGVyCiB7CiAgICAgYnViYmxlU29ydCgKICAgICAgICAgYmVnaW4sIGVuZCwKLSAg
ICAgICAgW10gKHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46OnZh
bHVlX3R5cGUgbGVmdCwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRz
PEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUgcmlnaHQpIC0+IGJvb2wgeworICAgICAgICBbXSAo
Y29uc3QgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3JUeXBlPjo6dmFsdWVf
dHlwZSYgbGVmdCwKKyAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJh
aXRzPEl0ZXJhdG9yVHlwZT46OnZhbHVlX3R5cGUmIHJpZ2h0KSAtPiBib29sIHsKICAgICAgICAg
ICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7CiAgICAgICAgIH0pOwogfQpJbmRleDogU291cmNlL1dU
Ri93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9u
LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNz
IEluc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5z
ZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBVJiYgZWxlbWVudCkKICAgICAgICAgOiBt
X2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICAgICAsIG1f
ZWxlbWVudChzdGQ6OmZvcndhcmQ8VT4oZWxlbWVudCkpCiAgICAgewogICAgIH0KICAgICAKICAg
ICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgVCBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgY29uc3QgVCYgZWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIFQmIGVsZW1lbnQoKSB7IHJldHVybiBtX2Vs
ZW1lbnQ7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnNlcnRpb24mIG90aGVy
KSBjb25zdAogICAgIHsKQEAgLTY2LDggKzY4LDggQEAgdm9pZCBleGVjdXRlSW5zZXJ0aW9ucyhU
YXJnZXRWZWN0b3JUeXBlJgogICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNb
aW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAgICAg
c2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKLSAgICAgICAgICAgIHRh
cmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOwotICAgICAgICB0YXJnZXRbZmlyc3RJ
bmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAg
ICAgICB0YXJnZXRbaV0gPSBXVEY6Om1vdmUodGFyZ2V0W2kgLSBpbmRleE9mZnNldF0pOworICAg
ICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBXVEY6Om1vdmUoaW5zZXJ0aW9uc1tpbmRleEluSW5z
ZXJ0aW9uc10uZWxlbWVudCgpKTsKICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKICAg
ICB9CiAgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265271</attachid>
            <date>2015-11-10 22:33:02 -0800</date>
            <delta_ts>2015-11-10 23:21:23 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>111183</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNSBA
QAorMjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHdpdGggQ2hpbGxEaXYKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaXMgYWJvdXQgYSBsb3QgbW9yZSB0aGFuIENoaWxsRGl2LiBJIHBpY2tlZCB0aGF0IGFzIHRo
ZSBuZXh0IHRoaW5nIHRvIGxvd2VyCisgICAgICAgIGJlY2F1c2UgSSBrbmV3IHRoYXQgaXQgd291
bGQgZm9yY2UgbWUgdG8gY29tZSB1cCB3aXRoIGEgc2Vuc2libGUgaWRpb20gZm9yIGRvaW5nCisg
ICAgICAgIHN0ZXB3aXNlIGxvd2VyaW5ncyB0aGF0IHJlcXVpcmUgYnJlYWtpbmcgYmFzaWMgYmxv
Y2tzLiBUaGUgaWRlYSBpcyB0aGF0IHlvdSB3YW50IHRvCisgICAgICAgIHdyaXRlIGEgbG9vcCB0
aGF0IGl0ZXJhdGVzIGZvcndhcmQgb3ZlciB0aGUgcHJvZ3JhbSwgd2hpY2ggdHVybnMgc29tZSBv
cGVyYXRpb25zIHRoYXQKKyAgICAgICAgY3VycmVudGx5IGFyZSBqdXN0IHNpbmdsZSBWYWx1ZXMg
aW50byBhbiBlbnRpcmUgbGl0dGxlIHN1Yi1DRkdzLiBUaGF0IHJlcXVpcmVzIHNwbGl0dGluZwor
ICAgICAgICB0aGUgYmxvY2sgdGhhdCBjb250YWluZWQgdGhlIG9yaWdpbmFsIFZhbHVlLiBUaGF0
J3MgdHJpY2t5IGlmIHlvdSB0aGVuIHdhbnQgdG8ga2VlcAorICAgICAgICBpdGVyYXRpbmc6IHRo
ZSBpbmRleCBvZiB0aGUgVmFsdWUgeW91IHdlcmUgbGFzdCBsb29raW5nIGF0IGhhcyBub3cgY2hh
bmdlZCBhbmQgeW91cgorICAgICAgICBJbnNlcnRpb25TZXRzIGFyZSBub3cgaW52YWxpZC4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYW4gaWRpb20gdGhhdCBoYW5kbGVzIHRoaXMuIEl0J3Mg
QmxvY2tJbnNlcnRpb25TZXQ6OnNwbGl0QmVmb3JlKCkuIFRoZQorICAgICAgICBpZGVhIGlzIHRo
YXQgaXQgdXNlcyB0aGUgY3VycmVudCBibG9jayBiZWZvcmUgdGhlIHNwbGl0IGFzIHRoZSBjb250
aW51YXRpb24gYWZ0ZXIgdGhlCisgICAgICAgIHNwbGl0LiBXaGVuIHlvdSBjYWxsIHNwbGl0QmVm
b3JlKCksIHlvdSBwYXNzIGl0IHlvdXIgbG9vcCBpbmRleCBhbmQgeW91ciBJbnNlcnRpb25TZXQK
KyAgICAgICAgKGlmIGFwcGxpY2FibGUpLiBJdCBtYWtlcyBzdXJlIHRoYXQgaXQgY2hhbmdlcyB0
aG9zZSBhdXhpbGlhcnkgdGhpbmdzIGluIHN1Y2ggYSB3YXkgdGhhdAorICAgICAgICB5b3UgY2Fu
IGtlZXAgbG9vcGluZy4KKworICAgICAgICBUaGlzIHVuY292ZXJlZCBzb21lIGJ1Z3MsIHNpbmNl
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB3ZSdyZSBjb21waWxpbmcgY3Jvc3MgZWRnZXMu
CisKKyAgICAgICAgQmVjYXVzZSBDaGlsbERpdiBpcyByZWFsbHkgYSBkaXZpc2lvbiwgSSBhbHNv
IGhhZCB0byB3cml0ZSBhIGJ1bmNoIG9mIGNvZGUgdG8gc3VwcG9ydAorICAgICAgICB0aGUgb3Jk
aW5hcnkgQjMgRGl2LiBXaGlsZSBkb2luZyB0aGF0LCBJIHJlYWxpemVkIHRoYXQgdGhlcmUgd2Fz
IGFzeW1tZXRyeSB0byB0aGF0CisgICAgICAgIGNvbnN0bmVzcyBvZiB0aGUgVmFsdWUgY29uc3Rh
bnQgZm9sZGluZyBtZXRob2RzLCBzbyBJIGZpeGVkIHRoYXQgYXMgd2VsbC4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjptdWwzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjp4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6eDg2RGl2MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bmVnMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bXVsNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6eDg2Q29udmVydFRvUXVhZFdvcmQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4ODZEaXY2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgICogYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZsX3IpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlkaXZxX3IpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OmNtcGxfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmNkcSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y2RxcSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6ZnN0cHMpOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6cmVwbGFjZUxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6YXBwZW5kSW50
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVwbGFjZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6dXBkYXRlUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
QjM6OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5oOgorICAg
ICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJh
c2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2Nr
OjpwcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpmcmVxdWVuY3kp
OgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZXBsYWNlTGFzdFdpdGhOZXcpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3Vj
Y2Vzc29ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjp1cGRhdGVQcmVk
ZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAg
ICAqIGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkIz
OjpCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6
QjM6OkJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpCMzo6QmxvY2tJ
bnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChKU0M6OkIzOjpCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6QjM6OkJsb2NrSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkIzOjppc1JlcHJlc2Vu
dGFibGVBcyk6CisgICAgICAgIChKU0M6OkIzOjpjaGlsbERpdik6CisgICAgICAgICogYjMvQjND
b25zdDMyVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdDMyVmFsdWU6OmJpdE9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZh
bHVlOjpiaXRYb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OnNo
bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6c1NockNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6elNockNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
Q29uc3QzMlZhbHVlOjpsZXNzVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMy
VmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1
ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6YmVsb3dD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmFib3ZlRXF1YWxDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dCk6CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0
NjRWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkaXZDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIz
OjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmJpdFhvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c2hsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6
OkNvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDY0VmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZh
bHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1
ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpn
cmVhdGVyRXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmFi
b3ZlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YWJvdmVFcXVhbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6YmVsb3dFcXVhbENvbnN0YW50KToK
KyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpncmVhdGVyVGhhbkNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Omxlc3NFcXVhbENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKiBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjpyZXBsYWNlU3VjY2Vzc29yKToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAgICogYjMv
QjNDb250cm9sVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6Ymxv
Y2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6ZnJlcXVlbmN5
KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1bXApOgorICAg
ICAgICAqIGIzL0IzSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlv
blNldDo6aW5zZXJ0SW50Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6SW5zZXJ0aW9uU2V0
OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOgorICAgICAgICAqIGIz
L0IzTG93ZXJNYWNyb3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omxvd2VyTWFjcm9z
KToKKyAgICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2Vy
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OmFkZEJvb2xDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnJl
c2V0VmFsdWVPd25lcnMpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OnRha2VCeXByb2R1Y3RzKToKKyAgICAgICAgKiBiMy9CM1JlZHVj
ZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBi
My9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphZGRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiaXRBbmRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0T3JDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Yml0WG9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnNobENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzU2hyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnpTaHJDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bm90
RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc1RoYW5Db25zdGFu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjphYm92ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpiZWxvd0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmJlbG93RXF1YWxDb25zdGFudCk6CisgICAgICAgICogYjMvQjNW
YWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNVcnNoaWZ0NjRWYWxpZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmlzWDg2RGl2SGVscGVyVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpp
c1g4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMlZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
aXNYODZDb252ZXJ0VG9Eb3VibGVXb3JkNjRWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmlzWDg2RGl2MzJWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzWDg2RGl2NjRWYWxp
ZCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNpbXBsaWZ5Q0ZH
KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2VHdpY2UpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoaWxsRGl2NjQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhEaXYpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhNb2QpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIHdhc20vV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OmJ1aWxkQmluYXJ5STMyKToKKwogMjAxNS0xMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBaXIgc2hvdWxkIGFsbG9jYXRlIHJlZ2lzdGVycwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MjI5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDEwIEBACiAJCTBGMzM4RTE0MUJGMDI3
NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA4MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5
LmNwcCAqLzsgfTsKIAkJMEYzMzhFMTUxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA5MUJG
MDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggKi87IH07CiAJCTBGMzM4RTE2MUJGMDI3NkMw
MDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXlJbmxpbmVzLmggKi87IH07CisJCTBGMzM4RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cCAqLzsgfTsKKwkJMEYzMzhFMUMxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25T
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4
RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBG
MzM4RTFEMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4
RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLzsgfTsKKwkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhG
IC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggKi87
IH07CiAJCTBGMzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUw
MDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLzsgfTsKIAkJMEYzNEIxNEExNkQ0MjAxMzAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IH07
CiAJCTBGMzhCMDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMEYxN0NGMDc3
RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi87IH07CkBAIC0yMzQzLDYgKzIzNDcs
MTAgQEAKIAkJMEYzMzhFMDgxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUtleS5jcHA7IHBhdGggPSBi
My9CM1ZhbHVlS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMDkx
QkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNWYWx1ZUtleS5oOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtl
eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUtleUlu
bGluZXMuaDsgcGF0aCA9IGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzM4RTE3MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmxvY2tJbnNl
cnRpb25TZXQuY3BwOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlvblNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzM4RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmxvY2tJ
bnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL0IzQmxvY2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMTkxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJN
YWNyb3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlck1h
Y3Jvcy5jcHA7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzMzhFMUExQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlck1hY3Jvcy5oOyBwYXRoID0g
YjMvQjNMb3dlck1hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0
NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNl
S2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRF
bnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NDIsNiArNDQ1
MCw4IEBACiAJCQkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICov
LAogCQkJCTBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmgg
Ki8sCiAJCQkJMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmgg
Ki8sCisJCQkJMEYzMzhFMTcxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQu
Y3BwICovLAorCQkJCTBGMzM4RTE4MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9u
U2V0LmggKi8sCiAJCQkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlz
dC5oICovLAogCQkJCTBGMzM4REY3MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuY3Bw
ICovLAogCQkJCTBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCAqLywK
QEAgLTQ0ODMsNiArNDQ5Myw4IEBACiAJCQkJMEZFQzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIz
SW5zZXJ0aW9uU2V0LmNwcCAqLywKIAkJCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJ
bnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRkVDODVCNjFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXRJbmxpbmVzLmggKi8sCisJCQkJMEYzMzhFMTkxQkYyODZFQTAwMTNDODhGIC8qIEIz
TG93ZXJNYWNyb3MuY3BwICovLAorCQkJCTBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xv
d2VyTWFjcm9zLmggKi8sCiAJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5jcHAgKi8sCiAJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fp
ci5oICovLAogCQkJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNw
cCAqLywKQEAgLTY2ODAsNiArNjY5Miw3IEBACiAJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1M0ExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDU3MDQxMUJF
NTg0Q0EwMDYyQTYyOSAvKiBCM1RpbWluZ1Njb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjc3OSw2ICs2NzkyLDcgQEAKIAkJCQlDMjIzOUQxOTE2MjYyQkREMDA1
QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE4RDE0
MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICov
LAorCQkJCTBGMzM4RTFDMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAx
ODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyQjFC
RDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCkBAIC04MzI0LDYgKzgz
MzgsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVi
dWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMUQxQkYyODZFQTAw
MTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRDREREQx
OTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg0OTYsNiArODUxMSw3IEBACiAJCQkJMEZFQTBBMUUx
NzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292
ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTA5MTcwNTEzREIwMEJCNzIyQyAvKiBG
VExDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMzhFMUIxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
QTBBMjcxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxOTIy
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsyNDcsMzAgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5pbXVsbF9pMzJyKHNyYywgaW1tLm1fdmFsdWUsIGRlc3QpOwogICAg
IH0KIAorICAgIHZvaWQgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmNkcSgpOworICAgIH0KKworICAgIHZvaWQgeDg2Q29udmVydFRvRG91Ymxl
V29yZDMyKFJlZ2lzdGVySUQgZWF4LCBSZWdpc3RlcklEIGVkeCkKKyAgICB7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoZWF4LCBlYXggPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGVkeCwgZWR4ID09IFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAgICAgeDg2Q29u
dmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXYzMihSZWdpc3Rl
cklEIGRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuaWRpdmxfcihkZW5v
bWluYXRvcik7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXYzMihSZWdpc3RlcklEIGVheCwgUmVn
aXN0ZXJJRCBlZHgsIFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGVheCwgZWF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChlZHgsIGVkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7CisgICAgICAgIHg4NkRpdjMy
KGRlbm9taW5hdG9yKTsKKyAgICB9CisKICAgICB2b2lkIG5lZzMyKFJlZ2lzdGVySUQgc3JjRGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ2xfcihzcmNEZXN0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDYgKzM4
NiwzMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7
CiAgICAgfQogICAgIAorICAgIHZvaWQgeDg2Q29udmVydFRvUXVhZFdvcmQ2NCgpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5jcW8oKTsKKyAgICB9CisKKyAgICB2b2lkIHg4NkNvbnZlcnRU
b1F1YWRXb3JkNjQoUmVnaXN0ZXJJRCByYXgsIFJlZ2lzdGVySUQgcmR4KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChyYXgsIHJheCA9PSBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQocmR4LCByZHggPT0gWDg2UmVnaXN0ZXJzOjplZHgpOworICAgICAgICB4
ODZDb252ZXJ0VG9RdWFkV29yZDY0KCk7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXY2NChSZWdp
c3RlcklEIGRlbm9taW5hdG9yKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuaWRpdnFfcihk
ZW5vbWluYXRvcik7CisgICAgfQorCisgICAgdm9pZCB4ODZEaXY2NChSZWdpc3RlcklEIHJheCwg
UmVnaXN0ZXJJRCByZHgsIFJlZ2lzdGVySUQgZGVub21pbmF0b3IpCisgICAgeworICAgICAgICBB
U1NFUlRfVU5VU0VEKHJheCwgcmF4ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChyZHgsIHJkeCA9PSBYODZSZWdpc3RlcnM6OmVkeCk7CisgICAgICAgIHg4NkRp
djY0KGRlbm9taW5hdG9yKTsKKyAgICB9CisKICAgICB2b2lkIG5lZzY0KFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3FfcihkZXN0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24g
MTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDYgKzk2MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdST1VQM19PUF9JRElWLCBkc3QpOwog
ICAgIH0KIAorI2lmIENQVShYODZfNjQpCisgICAgdm9pZCBpZGl2cV9yKFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAzX0V2LCBH
Uk9VUDNfT1BfSURJViwgZHN0KTsKKyAgICB9CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKKwogICAg
IC8vIENvbXBhcmlzb25zOgogCiAgICAgdm9pZCBjbXBsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKQEAgLTEyOTQsNiArMTMwMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZUJ5dGVPcChPUF9DRFEpOwogICAgIH0KIAorI2lmIENQVShYODZfNjQpCisgICAg
dm9pZCBjcW8oKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfQ0RR
KTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZvaWQgZnN0cHMoaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0VTQ0FQRV9E
OSwgRVNDQVBFX0Q5X0ZTVFBfc2luZ2xlUmVhbCwgYmFzZSwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxOTIyOTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0jaW5j
bHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIs
NiArNTQsMjkgQEAgdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQogICAgIG1f
dmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiB9CiAKK3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZUxhc3Qo
UHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogdmFsdWUpCit7CisgICAgcHJvYy5kZWxldGVWYWx1ZShs
YXN0KCkpOworICAgIGxhc3QoKSA9IHZhbHVlOworfQorCitWYWx1ZSogQmFzaWNCbG9jazo6YXBw
ZW5kSW50Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2luLCBUeXBlIHR5cGUs
IGludDY0X3QgdmFsdWUpCit7CisgICAgVmFsdWUqIHJlc3VsdCA9IHByb2MuYWRkSW50Q29uc3Rh
bnQob3JpZ2luLCB0eXBlLCB2YWx1ZSk7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVmFsdWUqIEJhc2ljQmxvY2s6OmFwcGVuZEludENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gYXBwZW5kSW50Q29uc3RhbnQocHJvYywgbGlrZVZhbHVlLT5vcmlnaW4oKSwgbGlrZVZhbHVl
LT50eXBlKCksIHZhbHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlU3VjY2Vzc29y
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIHJldHVybiBsYXN0KCkt
PmFzPENvbnRyb2xWYWx1ZT4oKS0+cmVwbGFjZVN1Y2Nlc3Nvcihmcm9tLCB0byk7Cit9CisKIGJv
b2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAg
cmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7CkBAIC02Nyw2ICs5MiwxMSBA
QCBib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpCiAgICAgcmV0dXJuIEIz
OjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOwogfQogCit2b2lkIEJhc2ljQmxv
Y2s6OnVwZGF0ZVByZWRlY2Vzc29yc0FmdGVyKCkKK3sKKyAgICBCMzo6dXBkYXRlUHJlZGVjZXNz
b3JzQWZ0ZXIodGhpcyk7Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5MjI5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTEgKzI5LDE0IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIz
RnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitjbGFzcyBCbG9j
a0luc2VydGlvblNldDsKIGNsYXNzIEluc2VydGlvblNldDsKIGNsYXNzIFByb2NlZHVyZTsKIGNs
YXNzIFZhbHVlOwpAQCAtNjgsMTAgKzcxLDE3IEBAIHB1YmxpYzoKICAgICBWYWx1ZUxpc3QmIHZh
bHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFwcGVuZChWYWx1ZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwbGFjZUxhc3Qo
UHJvY2VkdXJlJiwgVmFsdWUqKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVy
ZSYsIEFyZ3VtZW50cy4uLik7CiAKKyAgICBWYWx1ZSogYXBwZW5kSW50Q29uc3RhbnQoUHJvY2Vk
dXJlJiwgT3JpZ2luLCBUeXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYXBwZW5kSW50
Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIGxpa2VWYWx1ZSwgaW50NjRfdCB2YWx1ZSk7Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgVmFsdWVUeXBlKiByZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJlJiwgQXJndW1l
bnRzLi4uKTsKKwogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKICAgICBjb25z
dCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAg
RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwpAQCAtODMsNiArOTMs
OCBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNz
b3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0
IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0
OwogCisgICAgYm9vbCByZXBsYWNlU3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxv
Y2sqIHRvKTsKKwogICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQogICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KICAg
ICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzW2luZGV4XTsgfQpAQCAtOTQsMTIgKzEwNiwxNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CiAgICAgYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogCisgICAgLy8gVXBkYXRl
IHByZWRlY2Vzc29ycyBzdGFydGluZyB3aXRoIHRoZSBzdWNjZXNzb3JzIG9mIHRoaXMgYmxvY2su
CisgICAgdm9pZCB1cGRhdGVQcmVkZWNlc3NvcnNBZnRlcigpOworCiAgICAgZG91YmxlIGZyZXF1
ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZy
aWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTQgQEAgVmFsdWVU
eXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
VmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjpyZXBsYWNlTGFzdFdpdGhOZXcoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQg
PSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICByZXBsYWNlTGFz
dChwcm9jZWR1cmUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5lIHVu
c2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAogewogICAgIHJldHVybiBs
YXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDE5MjI5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSwyMCBAQCBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2ljQmxvY2s+Cit2b2lkIHVwZGF0ZVByZWRlY2Vzc29yc0FmdGVyKEJhc2ljQmxvY2sqIHJv
b3QpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7CisgICAgd29ya2xp
c3QuYXBwZW5kKHJvb3QpOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChhZGRQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKSkKKyAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29yKTsKKyAgICAgICAgfQorICAgIH0KK30K
KwogLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhh
dCBhcmVuJ3QgcmVhY2hhYmxlLgogdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5h
bWUgRGVsZXRlRnVuY3Rvcj4KIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoCkBAIC04MiwxNCArOTYs
NyBAQCB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KAogICAgICAgICAgICAgYmxvY2stPnByZWRlY2Vz
c29ycygpLnJlc2l6ZSgwKTsKICAgICB9CiAKLSAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OwotICAgIHdvcmtsaXN0LnB1c2go
YmxvY2tzWzBdLmdldCgpKTsKLSAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5z
dWNjZXNzb3JCbG9ja3MoKSkgewotICAgICAgICAgICAgYWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29y
LCBibG9jayk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHN1Y2Nlc3Nvcik7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgdXBkYXRlUHJlZGVjZXNzb3JzQWZ0ZXIoYmxvY2tzWzBdLmdldCgpKTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKCFibG9ja3NbaV0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
bG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChQcm9j
ZWR1cmUgJnByb2MpCisgICAgOiBtX3Byb2MocHJvYykKK3sKK30KKworQmxvY2tJbnNlcnRpb25T
ZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnQoQmxvY2tJbnNlcnRpb24mJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFw
cGVuZChXVEY6Om1vdmUoaW5zZXJ0aW9uKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKFVJTlRfTUFY
LCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAg
ICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIFdURjo6bW92ZShibG9jaykpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0
QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1
cm4gaW5zZXJ0KGJlZm9yZS0+aW5kZXgoKSwgZnJlcXVlbmN5ID09IGZyZXF1ZW5jeSA/IGZyZXF1
ZW5jeSA6IGJlZm9yZS0+ZnJlcXVlbmN5KCkpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2Vy
dGlvblNldDo6c3BsaXRGb3J3YXJkKAorICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCYg
dmFsdWVJbmRleCwgSW5zZXJ0aW9uU2V0KiBpbnNlcnRpb25TZXQsIGRvdWJsZSBmcmVxdWVuY3kp
Cit7CisgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOworCisgICAgLy8g
Q3JlYXRlIGEgbmV3IGJsb2NrIHRoYXQgd2lsbCBnbyBqdXN0IGJlZm9yZSAnYmxvY2snLCBhbmQg
bWFrZSBpdCBjb250YWluIGV2ZXJ5dGhpbmcgcHJpb3IKKyAgICAvLyB0byAndmFsdWVJbmRleCcu
CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gaW5zZXJ0QmVmb3JlKGJsb2NrLCBmcmVxdWVuY3kp
OworICAgIHJlc3VsdC0+bV92YWx1ZXMucmVzaXplKHZhbHVlSW5kZXggKyAxKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB2YWx1ZUluZGV4OyBpLS07KQorICAgICAgICByZXN1bHQtPm1fdmFsdWVz
W2ldID0gYmxvY2stPm1fdmFsdWVzW2ldOworCisgICAgLy8gTWFrZSB0aGUgbmV3IGJsb2NrIGp1
bXAgdG8gJ2Jsb2NrJy4KKyAgICByZXN1bHQtPm1fdmFsdWVzW3ZhbHVlSW5kZXhdID0KKyAgICAg
ICAgbV9wcm9jLmFkZDxDb250cm9sVmFsdWU+KEp1bXAsIHZhbHVlLT5vcmlnaW4oKSwgRnJlcXVl
bnRlZEJsb2NrKGJsb2NrKSk7CisKKyAgICAvLyBJZiB3ZSBoYWQgaW5zZXJ0ZWQgdGhpbmdzIGlu
dG8gJ2Jsb2NrJyBiZWZvcmUgdGhpcywgZXhlY3V0ZSB0aG9zZSBpbnNlcnRpb25zIG5vdy4KKyAg
ICBpZiAoaW5zZXJ0aW9uU2V0KQorICAgICAgICBpbnNlcnRpb25TZXQtPmV4ZWN1dGUocmVzdWx0
KTsKKworICAgIC8vIFJlbW92ZSBldmVyeXRoaW5nIHByaW9yIHRvICd2YWx1ZUluZGV4JyBmcm9t
ICdibG9jaycsIHNpbmNlIHRob3NlIHRoaW5ncyBhcmUgbm93IGluIHRoZQorICAgIC8vIG5ldyBi
bG9jay4KKyAgICBibG9jay0+bV92YWx1ZXMucmVtb3ZlKDAsIHZhbHVlSW5kZXgpOworCisgICAg
Ly8gVGhpcyBpcyBiZWluZyB1c2VkIGluIGEgZm9yd2FyZCBsb29wIG92ZXIgJ2Jsb2NrJy4gVXBk
YXRlIHRoZSBpbmRleCBvZiB0aGUgbG9vcCBzbyB0aGF0CisgICAgLy8gaXQgY2FuIGNvbnRpbnVl
IHRvIHRoZSBuZXh0IGJsb2NrLgorICAgIHZhbHVlSW5kZXggPSAwOworCisgICAgLy8gRml4dXAg
dGhlIHByZWRlY2Vzc29ycyBvZiAnYmxvY2snLiBUaGV5IG5vdyBtdXN0IGp1bXAgdG8gdGhlIG5l
dyBibG9jay4KKyAgICByZXN1bHQtPnByZWRlY2Vzc29ycygpID0gV1RGOjptb3ZlKGJsb2NrLT5w
cmVkZWNlc3NvcnMoKSk7CisgICAgYmxvY2stPmFkZFByZWRlY2Vzc29yKHJlc3VsdCk7CisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IHJlc3VsdC0+cHJlZGVjZXNzb3JzKCkpCisg
ICAgICAgIHByZWRlY2Vzc29yLT5yZXBsYWNlU3VjY2Vzc29yKGJsb2NrLCByZXN1bHQpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgp
Cit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGlu
IGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8gc29ydCB0aGVtIGJlZm9yZQorICAgIC8vIHJ1bm5p
bmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4gV2Ugc3Ryb25nbHkgcHJlZmVyIGEgc3RhYmxlIHNv
cnQgYW5kIHdlIHdhbnQgaXQgdG8gYmUKKyAgICAvLyBmYXN0LCBzbyB3ZSB1c2UgYnViYmxlIHNv
cnQuCisgICAgYnViYmxlU29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVu
ZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fcHJvYy5tX2Jsb2NrcywgbV9pbnNlcnRp
b25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBz
dHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJs
b2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIG1fcHJvYy5tX2Jsb2Nrcy5yZW1vdmVBbGxNYXRj
aGluZygKKyAgICAgICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4mIGJsb2NrUHRy
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAhYmxvY2tQdHI7CisgICAgICAgIH0pOwor
ICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5k
aWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9jLm1fYmxvY2tzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3Byb2MubV9ibG9ja3NbaV0tPm1faW5kZXggPSBpOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Js
b2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBCM0Jsb2NrSW5zZXJ0aW9uU2V0X2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1
ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBCbG9ja0luc2VydGlv
bjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0
aW9uU2V0KFByb2NlZHVyZSYpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAg
IHZvaWQgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uJiYpOworCisgICAgLy8gSW5zZXJ0IGEgbmV3IGJs
b2NrIGF0IGEgZ2l2ZW4gaW5kZXguCisgICAgQmFzaWNCbG9jayogaW5zZXJ0KHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICAvLyBJbnNlcnRzIGEgbmV3IGJs
b2NrIGJlZm9yZSB0aGUgZ2l2ZW4gYmxvY2suIFVzdWFsbHkgeW91IHdpbGwgbm90IHBhc3MgdGhl
IGZyZXF1ZW5jeQorICAgIC8vIGFyZ3VtZW50LiBQYXNzaW5nIFBOYU4gY2F1c2VzIHVzIHRvIGp1
c3QgdXNlIHRoZSBmcmVxdWVuY3kgb2YgdGhlICdiZWZvcmUnIGJsb2NrLiBUaGF0J3MKKyAgICAv
LyB1c3VhbGx5IHdoYXQgeW91IHdhbnQuCisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJh
c2ljQmxvY2sqIGJlZm9yZSwgZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgLy8gQSBo
ZWxwZXIgdG8gc3BsaXQgYSBibG9jayB3aGVuIGZvcndhcmQgaXRlcmF0aW5nIG92ZXIgaXQuIEl0
IGNyZWF0ZXMgYSBuZXcgYmxvY2sgdG8gaG9sZAorICAgIC8vIGV2ZXJ5dGhpbmcgYmVmb3JlIHRo
ZSBpbnN0cnVjdGlvbiBhdCB2YWx1ZUluZGV4LiBUaGUgY3VycmVudCBibG9jayBpcyBsZWZ0IHdp
dGgKKyAgICAvLyBldmVyeXRoaW5nIGF0IGFuZCBhZnRlciB2YWx1ZUluZGV4LiBJZiB0aGUgb3B0
aW9uYWwgSW5zZXJ0aW9uU2V0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGdldAorICAgIC8vIGV4ZWN1
dGVkIG9uIHRoZSBuZXdseSBjcmVhdGVkIGJsb2NrIC0gdGhpcyBtYWtlcyBzZW5zZSBpZiB5b3Ug
aGFkIHByZXZpb3VzbHkgaW5zZXJ0ZWQKKyAgICAvLyB0aGluZ3MgaW50byB0aGUgb3JpZ2luYWwg
YmxvY2ssIHNpbmNlIHRoZSBuZXdseSBjcmVhdGVkIGJsb2NrIHdpbGwgYmUgaW5kZXhlZCBpZGVu
dGljYWxseQorICAgIC8vIHRvIGhvbGQgdGhpcyBibG9jayB3YXMgaW5kZXhlZCBmb3IgYWxsIHZh
bHVlcyBwcmlvciB0byB2YWx1ZUluZGV4LiBBZnRlciB0aGlzIHJ1bnMsIGl0CisgICAgLy8gc2V0
cyB2YWx1ZUluZGV4IHRvIHplcm8uIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBtZXRob2Qg
Zm9yIHRoaW5ncyBsaWtlOgorICAgIC8vCisgICAgLy8gZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4
ID0gMDsgdmFsdWVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgeworICAgIC8v
ICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CisgICAgLy8gICAgIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gRm9vKSB7CisgICAgLy8gICAgICAgICBCYXNpY0Jsb2NrKiBw
cmVkZWNlc3NvciA9CisgICAgLy8gICAgICAgICAgICAgbV9ibG9ja0luc2VydGlvblNldC5zcGxp
dEZvcndhcmQoYmxvY2ssIHZhbHVlSW5kZXgsICZtX2luc2VydGlvblNldCk7CisgICAgLy8gICAg
ICAgICAuLi4gLy8gTm93IHlvdSBjYW4gYXBwZW5kIHRvIHByZWRlY2Vzc29yLCBpbnNlcnQgbmV3
IGJsb2NrcyBiZWZvcmUgJ2Jsb2NrJywgYW5kCisgICAgLy8gICAgICAgICAuLi4gLy8geW91IGNh
biB1c2UgbV9pbnNlcnRpb25TZXQgdG8gaW5zZXJ0IG1vcmUgdGhpbmcgYmVmb3JlICd2YWx1ZScu
CisgICAgLy8gICAgICAgICBwcmVkZWNlc3Nvci0+dXBkYXRlUHJlZGVjZXNzb3JzQWZ0ZXIoKTsK
KyAgICAvLyAgICAgfQorICAgIC8vIH0KKyAgICAvLworICAgIC8vIE5vdGUgaG93IHVzdWFsbHkg
dGhpcyBpZGlvbSBlbmRzIGluIGEgYWxsIHRvIHVwZGF0ZVByZWRlY2Vzc29yc0FmdHRlcigpLCB3
aGljaCBlbnN1cmVzCisgICAgLy8gdGhhdCB0aGUgcHJlZGVjZXNzb3JzIGludm9sdmVkIGluIGFu
eSBvZiB0aGUgbmV3IGNvbnRyb2wgZmxvdyB0aGF0IHlvdSd2ZSBjcmVhdGVkIGFyZSB1cAorICAg
IC8vIHRvIGRhdGUuCisgICAgQmFzaWNCbG9jayogc3BsaXRGb3J3YXJkKAorICAgICAgICBCYXNp
Y0Jsb2NrKiwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIEluc2VydGlvblNldCogPSBudWxscHRyLAor
ICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgYm9vbCBleGVjdXRl
KCk7CisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgVmVjdG9yPEJsb2Nr
SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2NrSW5zZXJ0
aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9u
IDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw2ICs5NCwyNCBAQCBpbmxpbmUgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhk
b3VibGUgdmFsCiAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzSW1wbDxSZXN1bHRUeXBlLCBk
b3VibGUsIGludDY0X3Q+KHZhbHVlKTsKIH0KIAoraW5saW5lIGludDMyX3QgY2hpbGxEaXYoaW50
MzJfdCBudW0sIGludDMyX3QgZGVuKQoreworICAgIGlmICghZGVuKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoZGVuID09IC0xICYmIG51bSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptaW4oKSkKKyAgICAgICAgcmV0dXJuIG51bTsKKyAgICByZXR1cm4gbnVtIC8gZGVuOwor
fQorCitpbmxpbmUgaW50NjRfdCBjaGlsbERpdihpbnQ2NF90IG51bSwgaW50NjRfdCBkZW4pCit7
CisgICAgaWYgKCFkZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkZW4gPT0gLTEgJiYg
bnVtID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKQorICAgICAgICByZXR1
cm4gbnVtOworICAgIHJldHVybiBudW0gLyBkZW47Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTI2ICs0NywxMzMgQEAgVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2Vk
dQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsg
b3RoZXIpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUm
IHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmFkZENvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVy
biBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgb3RoZXItPmFzSW50
MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJu
IHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQz
MigpKTsKIH0KIAotVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZhbHVlOjpkaXZDb25z
dGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBp
ZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgY2hpbGxEaXYobV92YWx1ZSwgb3Ro
ZXItPmFzSW50MzIoKSkpOworfQorCitWYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRBbmRDb25zdGFu
dChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAo
IW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAmIG90aGVyLT5hc0ludDMy
KCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6Yml0T3JDb25z
dGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSB8IG90aGVyLT5hc0lu
dDMyKCkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpiaXRYb3JDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdFhv
ckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIF4gb3RoZXIt
PmFzSW50MzIoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDMyVmFsdWU6OnNobENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0MzJWYWx1ZTo6c2hs
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPDwgKG90aGVy
LT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjpzU2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29uc3QzMlZh
bHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUg
Pj4gKG90aGVyLT5hc0ludDMyKCkgJiAzMSkpOwogfQogCi1WYWx1ZSogQ29uc3QzMlZhbHVlOjp6
U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSog
Q29uc3QzMlZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCks
IHN0YXRpY19jYXN0PGludDMyX3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlKSA+PiAo
b3RoZXItPmFzSW50MzIoKSAmIDMxKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMyVmFsdWU6OmVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpl
cXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVy
LT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4g
dHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAotVHJpU3RhdGUgQ29u
c3QzMlZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRl
IENvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJp
U3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7
CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlIDwg
b3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlclRo
YW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMyVmFsdWU6Omdy
ZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICgh
b3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJl
dHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRl
IENvbnN0MzJWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJp
U3RhdGUgQ29uc3QzMlZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1p
eGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPD0gb3RoZXItPmFzSW50
MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpncmVhdGVyRXF1YWxD
b25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFz
SW50MzIoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0
YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0MzJW
YWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDMy
VmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlm
ICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAg
IHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZSkgPiBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4ob3RoZXItPmFzSW50MzIoKSkpOwogfQogCi1UcmlTdGF0ZSBDb25zdDMy
VmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Qz
MlZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyLT5oYXNJbnQzMigpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAg
ICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fdmFsdWUpIDwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Qz
MlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUg
Q29uc3QzMlZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1
ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG90aGVyLT5hc0ludDMyKCkpKTsKIH0KIAotVHJp
U3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAorVHJpU3RhdGUgQ29uc3QzMlZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCiAgICAgICAgIHJl
dHVybiBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyNSArNDIsMjYgQEAgcHVi
bGljOgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25z
dCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQo
UHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYml0
T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogelNockNvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBUcmlTdGF0ZSBlcXVh
bENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbm90
RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRl
IGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlT
dGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50KFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQo
UHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1
ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1NockNvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHpTaHJD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGxl
c3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25zdGFudChjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGJlbG93RXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0
ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nywx
MjYgKzQ3LDEzMyBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1CiAg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBzdGF0
aWNfY2FzdDxpbnQ2NF90PihvdGhlcikpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3Zh
bHVlICsgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6OnN1YkNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0
NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFs
dWUgLSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAotVmFsdWUqIENvbnN0NjRWYWx1ZTo6Yml0QW5k
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CitWYWx1ZSogQ29u
c3Q2NFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgY2hp
bGxEaXYobV92YWx1ZSwgb3RoZXItPmFzSW50NjQoKSkpOworfQorCitWYWx1ZSogQ29uc3Q2NFZh
bHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSAmIG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRPckNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUqIENvbnN0
NjRWYWx1ZTo6Yml0T3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92
YWx1ZSB8IG90aGVyLT5hc0ludDY0KCkpOwogfQogCi1WYWx1ZSogQ29uc3Q2NFZhbHVlOjpiaXRY
b3JDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBD
b25zdDY0VmFsdWU6OmJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigp
LCBtX3ZhbHVlIF4gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVZhbHVlKiBDb25zdDY0VmFsdWU6
OnNobENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAorVmFsdWUq
IENvbnN0NjRWYWx1ZTo6c2hsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgPDwgKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwogfQogCi1WYWx1ZSogQ29uc3Q2
NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0
CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4o
b3JpZ2luKCksIG1fdmFsdWUgPj4gKG90aGVyLT5hc0ludDMyKCkgJiA2MykpOwogfQogCi1WYWx1
ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0CitWYWx1ZSogQ29uc3Q2NFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
NjRWYWx1ZT4ob3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtX3ZhbHVlKSA+PiAob3RoZXItPmFzSW50MzIoKSAmIDYzKSkpOwogfQogCi1UcmlTdGF0
ZSBDb25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3Rh
dGUgQ29uc3Q2NFZhbHVlOjplcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QK
IHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA9PSBvdGhlci0+YXNJbnQ2NCgpKTsK
IH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3QKK1RyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudChjb25zdCBW
YWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAg
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgIT0g
b3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc1RoYW5D
b25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6Omxlc3NU
aGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIt
Pmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0
cmlTdGF0ZShtX3ZhbHVlIDwgb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0
NjRWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CitUcmlTdGF0
ZSBDb25zdDY0VmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3ZhbHVlID4gb3RoZXItPmFzSW50NjQo
KSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUq
IG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpsZXNzRXF1YWxDb25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPD0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6Z3Jl
YXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZh
bHVlOjpncmVhdGVyRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7
CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFsdWUgPj0gb3RoZXItPmFzSW50NjQoKSk7CiB9CiAK
LVRyaVN0YXRlIENvbnN0NjRWYWx1ZTo6YWJvdmVDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0
CitUcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVy
KSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAgICAgIHJldHVybiBN
aXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bV92YWx1ZSkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3RoZXItPmFzSW50NjQoKSkpOwogfQog
Ci1UcmlTdGF0ZSBDb25zdDY0VmFsdWU6OmJlbG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25z
dAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0NvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQogICAgICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fdmFsdWUpIDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0ludDY0KCkpKTsKIH0K
IAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCiAgICAg
ICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4obV92YWx1ZSkgPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG90aGVyLT5hc0lu
dDY0KCkpKTsKIH0KIAotVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3Q2NFZhbHVlOjpiZWxvd0VxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDY0KCkpCiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwyNSArNDIsMjYgQEAgcHVibGljOgogCiAgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVy
ZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBp
bnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3ViQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1
ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzaGxDb25zdGFudChQcm9jZWR1
cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFZhbHVlKiBzU2hyQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSog
elNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFRyaVN0YXRlIGxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgbGVzc0VxdWFsQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBncmVhdGVyRXF1YWxDb25zdGFudChW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBUcmlTdGF0ZSBiZWxvd0NvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYWJvdmVFcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgYmVsb3dF
cXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50
KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc2hsQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc1No
ckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQo
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBsZXNzVGhh
bkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3Rh
dGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBhYm92ZUNvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgYmVsb3dDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIGFi
b3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAg
IFRyaVN0YXRlIGJlbG93RXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw1NiArNDcsNjMgQEAgVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0
YW50KFBybwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSArIHN0YXRpY19jYXN0PGRvdWJsZT4ob3RoZXIpKTsKIH0KIAotVmFsdWUqIENvbnN0
RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBj
b25zdAorVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJs
ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3RE
b3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAK
LVZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZh
bHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91
YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KFZh
bHVlKiBvdGhlcikgY29uc3QKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpkaXZDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90
aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC8gb3RoZXItPmFzRG91
YmxlKCkpOworfQorCitUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkK
ICAgICAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiAgICAgcmV0dXJuIHRyaVN0YXRlKG1fdmFs
dWUgPT0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
Ojpub3RFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0RG91
YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewog
ICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0
ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7CiB9
CiAKLVRyaVN0YXRlIENvbnN0RG91YmxlVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQoVmFsdWUqIG90
aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc1RoYW5Db25zdGFudChj
b25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkp
CiAgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogICAgIHJldHVybiB0cmlTdGF0ZShtX3Zh
bHVlIDwgb3RoZXItPmFzRG91YmxlKCkpOwogfQogCi1UcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVl
OjpncmVhdGVyVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0YXRlIENvbnN0
RG91YmxlVmFsdWU6OmdyZWF0ZXJUaGFuQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dAogewogICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRU
cmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3RhdGUobV92YWx1ZSA+IG90aGVyLT5hc0RvdWJsZSgp
KTsKIH0KIAotVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoVmFs
dWUqIG90aGVyKSBjb25zdAorVHJpU3RhdGUgQ29uc3REb3VibGVWYWx1ZTo6bGVzc0VxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0Rv
dWJsZSgpKQogICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKICAgICByZXR1cm4gdHJpU3Rh
dGUobV92YWx1ZSA8PSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKLVRyaVN0YXRlIENvbnN0RG91
YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKK1RyaVN0
YXRlIENvbnN0RG91YmxlVmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKICAgICAgICAgcmV0
dXJuIE1peGVkVHJpU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3ICs0
MCwxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQogCi0gICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYgcHJvYykgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50
MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2Nl
ZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKLSAgICBWYWx1ZSogc3Vi
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSogb3RoZXIp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQo
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJv
Y2VkdXJlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZh
bHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChjb25z
dCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29u
c3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBUcmlTdGF0ZSBs
ZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
VHJpU3RhdGUgZ3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFRyaVN0YXRlIGxlc3NFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVHJpU3RhdGUgZ3JlYXRlckVxdWFsQ29uc3RhbnQoY29u
c3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNp
b24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMjIgQEAgQ29udHJvbFZhbHVlOjp+Q29udHJv
bFZhbHVlKCkKIHsKIH0KIAotdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb0p1bXAoY29uc3Qg
RnJlcXVlbnRlZEJsb2NrJiBkZXN0aW5hdGlvbikKK2Jvb2wgQ29udHJvbFZhbHVlOjpyZXBsYWNl
U3VjY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIGJvb2wg
cmVzdWx0ID0gZmFsc2U7CisgICAgZm9yIChGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3NvciA6IG1f
c3VjY2Vzc29ycykgeworICAgICAgICBpZiAoc3VjY2Vzc29yLmJsb2NrKCkgPT0gZnJvbSkgewor
ICAgICAgICAgICAgc3VjY2Vzc29yLmJsb2NrKCkgPSB0bzsKKyAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisKKyAgICAgICAgICAgIC8vIEtlZXAgbG9vcGluZyBiZWNhdXNlIGl0J3MgdmFsaWQg
Zm9yIGEgc3VjY2Vzc29yIHRvIGJlIG1lbnRpb25lZCBtdWx0aXBsZSB0aW1lcywKKyAgICAgICAg
ICAgIC8vIGxpa2UgaWYgbXVsdGlwbGUgc3dpdGNoIGNhc2VzIGhhdmUgdGhlIHNhbWUgdGFyZ2V0
LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ29udHJv
bFZhbHVlOjpjb252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogewogICAgIHVu
c2lnbmVkIGluZGV4ID0gdGhpcy0+aW5kZXgoKTsKICAgICBPcmlnaW4gb3JpZ2luID0gdGhpcy0+
b3JpZ2luKCk7CkBAIC00NCw3ICs1OSw3IEBAIHZvaWQgQ29udHJvbFZhbHVlOjpjb252ZXJ0VG9K
dW1wKGNvbnN0IEYKIAogICAgIHRoaXMtPkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpOwog
Ci0gICAgbmV3ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgZGVzdGlu
YXRpb24pOworICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKGluZGV4LCBKdW1wLCBvcmlnaW4s
IEZyZXF1ZW50ZWRCbG9jayhkZXN0aW5hdGlvbikpOwogCiAgICAgdGhpcy0+b3duZXIgPSBvd25l
cjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShy
ZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsg
fQogICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7
IH0KIAorICAgIGJvb2wgcmVwbGFjZVN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0byk7CisKICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRha2VuKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUoKSA9PSBKdW1wIHx8IG9wY29kZSgpID09IEJyYW5j
aCk7CkBAIC04NSw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN1Y2Nlc3Nvcigx
KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbnZlcnRUb0p1bXAoY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGRlc3Rp
bmF0aW9uKTsKIAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1l
dGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93ZXJN
YWNyb3MuaCIKICNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKICNpbmNsdWRlICJCM01vdmVDb25z
dGFudHMuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgpAQCAtNjYsNiArNjcsOCBAQCB2b2lk
IGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsCiAgICAgICAgIGRhdGFMb2cocHJv
Y2VkdXJlKTsKICAgICB9CiAKKyAgICBsb3dlck1hY3Jvcyhwcm9jZWR1cmUpOworCiAgICAgcmVk
dWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKICAgICAKICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0
aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVy
biBtX2Jsb2NrOyB9CiAgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1
cm4gbV9mcmVxdWVuY3k7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyYgZnJlcXVlbmN5KCkgeyByZXR1
cm4gbV9mcmVxdWVuY3k7IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5z
ZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDIyIEBACiAjaWYgRU5B
QkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0J1YmJsZVNvcnQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK1Zh
bHVlKiBJbnNlcnRpb25TZXQ6Omluc2VydEludENvbnN0YW50KHNpemVfdCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBpbnNlcnRW
YWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuYWRkSW50Q29uc3RhbnQob3JpZ2luLCB0eXBlLCB2YWx1
ZSkpOworfQorCitWYWx1ZSogSW5zZXJ0aW9uU2V0OjppbnNlcnRJbnRDb25zdGFudChzaXplX3Qg
aW5kZXgsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGlu
c2VydEludENvbnN0YW50KGluZGV4LCBsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtlVmFsdWUtPnR5
cGUoKSwgdmFsdWUpOworfQorCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2Nr
KiBibG9jaykKIHsKICAgICBidWJibGVTb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2Vy
dGlvbnMuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
c2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFC
TEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIK
ICNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC02Miw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZSogaW5zZXJ0KHNpemVfdCBpbmRleCwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cyk7CiAKKyAgICBWYWx1ZSogaW5zZXJ0SW50Q29uc3RhbnQo
c2l6ZV90IGluZGV4LCBPcmlnaW4sIFR5cGUsIGludDY0X3QgdmFsdWUpOworICAgIFZhbHVlKiBp
bnNlcnRJbnRDb25zdGFudChzaXplX3QgaW5kZXgsIFZhbHVlKiBsaWtlVmFsdWUsIGludDY0X3Qg
dmFsdWUpOworCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJN
YWNyb3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIz
Q29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TG93ZXJNYWNyb3MgeworcHVibGljOgorICAgIExvd2VyTWFjcm9zKFByb2NlZHVyZSYgcHJvYykK
KyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHBy
b2MpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
YykgeworICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgICAgICAgICAgcHJvY2Vzc0N1
cnJlbnRCbG9jaygpOworICAgICAgICB9CisgICAgICAgIG1fY2hhbmdlZCB8PSBtX2Jsb2NrSW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgaWYgKG1fY2hhbmdlZCkKKyAgICAgICAgICAg
IG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzQ3VycmVudEJsb2NrKCkKKyAg
ICB7CisgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7
ICsrbV9pbmRleCkgeworICAgICAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0KG1faW5kZXgp
OworICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBDaGlsbERpdjogeworICAgICAgICAgICAgICAgIC8vIEFSTSBzdXBwb3J0cyB0aGlzIGlu
c3RydWN0aW9uIG5hdGl2ZWx5LgorICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGltcGxlbWVudCAicmVzID0gQ2hpbGxEaXYobnVt
LCBkZW4pIiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gICAgIGlmIChkZW4gKyAxIDw9X3Vuc2lnbmVkIDEpIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIGlmICghZGVuKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0g
MDsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgICAgICBpZiAobnVtID09
IC0yMTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0gbnVt
OworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAg
ICAgIC8vICAgICByZXMgPSBudW0gLyBkZXY7CisgICAgICAgICAgICAgICAgLy8gZG9uZToKKwor
ICAgICAgICAgICAgICAgIFZhbHVlKiBudW0gPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogb25lID0KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
SW50Q29uc3RhbnQobV9pbmRleCwgbV92YWx1ZSwgMSk7CisgICAgICAgICAgICAgICAgVmFsdWUq
IGlzRGVuT0sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBBYm92ZSwgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgZGVuLCBvbmUpLAorICAgICAgICAgICAgICAgICAgICBvbmUpOworCisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmVmb3JlID0KKyAgICAgICAgICAgICAgICAgICAgbV9ibG9j
a0luc2VydGlvblNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9pbmRleCwgJm1faW5zZXJ0aW9u
U2V0KTsKKworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5vcm1hbERpdkNhc2UgPSBtX2Js
b2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzaGFkeURlbkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9y
ZShtX2Jsb2NrKTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB6ZXJvRGVuQ2FzZSA9IG1f
YmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIG5lZzFEZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZv
cmUobV9ibG9jayk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogaW50TWluQ2FzZSA9IG1f
YmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOworCisgICAgICAgICAgICAg
ICAgYmVmb3JlLT5yZXBsYWNlTGFzdFdpdGhOZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLCBCcmFuY2gsIG1fdmFsdWUtPm9yaWdpbigpLCBpc0Rlbk9LLAorICAg
ICAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobm9ybWFsRGl2Q2FzZSwgRnJlcXVlbmN5
Q2xhc3M6Ok5vcm1hbCksCisgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhzaGFk
eURlbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICAgICAgICAgICAgICBVcHNp
bG9uVmFsdWUqIG5vcm1hbFJlc3VsdCA9IG5vcm1hbERpdkNhc2UtPmFwcGVuZE5ldzxVcHNpbG9u
VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIG1fdmFsdWUtPm9yaWdpbigpLAor
ICAgICAgICAgICAgICAgICAgICBub3JtYWxEaXZDYXNlLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRGl2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbnVtLCBkZW4pKTsKKyAgICAgICAgICAgICAgICBu
b3JtYWxEaXZDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLCBKdW1wLCBtX3ZhbHVlLT5vcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKG1fYmxv
Y2spKTsKKworICAgICAgICAgICAgICAgIHNoYWR5RGVuQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgQnJhbmNoLCBtX3ZhbHVlLT5vcmln
aW4oKSwgZGVuLAorICAgICAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxvY2sobmVnMURlbkNh
c2UsIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpLAorICAgICAgICAgICAgICAgICAgICBGcmVxdWVu
dGVkQmxvY2soemVyb0RlbkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSk7CisKKyAgICAgICAg
ICAgICAgICBVcHNpbG9uVmFsdWUqIHplcm9SZXN1bHQgPSB6ZXJvRGVuQ2FzZS0+YXBwZW5kTmV3
PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgICAgIHplcm9EZW5DYXNlLT5hcHBlbmRJbnRDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUsIDApKTsKKyAgICAgICAgICAgICAgICB6ZXJvRGVuQ2FzZS0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgSnVtcCwg
bV92YWx1ZS0+b3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAgICAgICAg
ICAgICAgICBpbnQ2NF90IGJhZE51bWVyYXRvckNvbnN0OworICAgICAgICAgICAgICAgIHN3aXRj
aCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJhZE51bWVyYXRvckNvbnN0
ID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogYmFkTnVt
ZXJhdG9yID0KKyAgICAgICAgICAgICAgICAgICAgbmVnMURlbkNhc2UtPmFwcGVuZEludENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZSwgYmFkTnVtZXJhdG9yQ29uc3QpOworCisgICAgICAgICAgICAg
ICAgbmVnMURlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICBtX3Byb2MsIEJyYW5jaCwgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgIG5lZzFEZW5DYXNlLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLCBFcXVhbCwgbV92YWx1ZS0+b3JpZ2luKCksIG51bSwgYmFkTnVtZXJhdG9yKSwK
KyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGludE1pbkNhc2UsIEZyZXF1ZW5j
eUNsYXNzOjpSYXJlKSwKKyAgICAgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKG5vcm1h
bERpdkNhc2UsIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpKTsKKworICAgICAgICAgICAgICAgIFVw
c2lsb25WYWx1ZSogaW50TWluUmVzdWx0ID0gaW50TWluQ2FzZS0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgbV92YWx1ZS0+b3JpZ2luKCksIGJh
ZE51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgaW50TWluQ2FzZS0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgSnVtcCwgbV92YWx1ZS0+b3Jp
Z2luKCksIEZyZXF1ZW50ZWRCbG9jayhtX2Jsb2NrKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1
ZSogcGhpID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleCwgUGhpLCBtX3ZhbHVlLT50eXBlKCksIG1fdmFsdWUtPm9yaWdpbigpKTsKKyAg
ICAgICAgICAgICAgICBub3JtYWxSZXN1bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAgICAg
IHplcm9SZXN1bHQtPnNldFBoaShwaGkpOworICAgICAgICAgICAgICAgIGludE1pblJlc3VsdC0+
c2V0UGhpKHBoaSk7CisKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50
aXR5KHBoaSk7CisgICAgICAgICAgICAgICAgYmVmb3JlLT51cGRhdGVQcmVkZWNlc3NvcnNBZnRl
cigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IFN3aXRjaC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTExMTUKKworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOworICAgIH0KKyAgICAKKyAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKKyAgICBCbG9ja0luc2VydGlvblNldCBtX2Jsb2NrSW5zZXJ0aW9u
U2V0OworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWUqIG1fdmFsdWU7CisgICAg
Ym9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OworfTsKKworYm9vbCBsb3dlck1hY3Jvc0ltcGwoUHJv
Y2VkdXJlJiBwcm9jKQoreworICAgIExvd2VyTWFjcm9zIGxvd2VyTWFjcm9zKHByb2MpOworICAg
IHJldHVybiBsb3dlck1hY3Jvcy5ydW4oKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK2Jvb2wgbG93ZXJNYWNyb3MoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShwcm9jLCAibG93ZXJNYWNyb3MiKTsKKyAgICBib29sIHJlc3VsdCA9IGxvd2Vy
TWFjcm9zSW1wbChwcm9jKTsKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbG93ZXJNYWNyb3NJbXBsKHByb2MpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93ZXJNYWNyb3NfaAorI2RlZmluZSBCM0xv
d2VyTWFjcm9zX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIExvd2VycyBoaWdoLWxldmVsIG9w
ZXJhdGlvbnMgdGhhdCBpdCdzIGVhc2llciB0byBkZWFsIHdpdGggb25jZSB0aGV5IGFyZSBicm9r
ZW4gdXAuIEN1cnJlbnRseQorLy8gdGhpcyBpbmNsdWRlcyBTd2l0Y2ggYW5kIENoaWxsRGl2Lgor
Citib29sIGxvd2VyTWFjcm9zKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyTWFjcm9z
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJl
dmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMzLDYgKzEyMzMsNDAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRGl2OiB7CisgICAgICAg
ICAgICBpZiAoaXNJbnQobV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIFRtcCBl
YXggPSBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAgICAgICAgIFRtcCBlZHggPSBU
bXAoWDg2UmVnaXN0ZXJzOjplZHgpOworCisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgY29u
dmVydFRvRG91YmxlV29yZDsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBkaXY7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvRG91YmxlV29yZDMyOworICAgICAgICAgICAgICAgICAgICBkaXYgPSBYODZEaXYz
MjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ2
NDoKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRU
b1F1YWRXb3JkNjQ7CisgICAgICAgICAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobV92YWx1ZS0+Y2hpbGQoMCkpLCBlYXgpOworICAg
ICAgICAgICAgICAgIGFwcGVuZChjb252ZXJ0VG9Eb3VibGVXb3JkLCBlYXgsIGVkeCk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBlYXgsIHRtcChtX3ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBkb3VibGVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDk5MQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNh
c2UgQml0QW5kOiB7CiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQsIEFpcjo6
T29wcywgQ29tbXV0YXRpdmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBt
X3ZhbHVlLT5jaGlsZCgxKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAko
cmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsK
ICAgICBBZGQsCiAgICAgU3ViLAogICAgIE11bCwKLSAgICBEaXYsCisgICAgRGl2LCAvLyBBbGwg
YmV0cyBhcmUgb2ZmIGFzIHRvIHdoYXQgd2lsbCBoYXBwZW4gd2hlbiB5b3UgZXhlY3V0ZSB0aGlz
IGZvciAtMl4zMS8tMSBhbmQgeC8wLgogCiAgICAgLy8gSW50ZWdlciBtYXRoLgogICAgIENoaWxs
RGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MjI5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDIyICs1NSwyNyBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2Nr
KGRvdWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmFsdWUqIFByb2NlZHVyZTo6YWRk
SW50Q29uc3RhbnQoVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQorVmFsdWUqIFByb2NlZHVyZTo6
YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlwZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQog
ewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSW50MzI6Ci0gICAgICAgIHJldHVybiBh
ZGQ8Q29uc3QzMlZhbHVlPihPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4odmFsdWUpKTsKICAgICBjYXNlIEludDY0OgotICAgICAgICByZXR1cm4gYWRkPENvbnN0
NjRWYWx1ZT4oT3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGFkZDxDb25zdDY0VmFs
dWU+KG9yaWdpbiwgdmFsdWUpOwogICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1cm4gYWRk
PENvbnN0RG91YmxlVmFsdWU+KE9yaWdpbigpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBhZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQogCi1WYWx1
ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhdGUgdHJpU3RhdGUpCitWYWx1ZSog
UHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChWYWx1ZSogbGlrZVZhbHVlLCBpbnQ2NF90IHZhbHVl
KQoreworICAgIHJldHVybiBhZGRJbnRDb25zdGFudChsaWtlVmFsdWUtPm9yaWdpbigpLCBsaWtl
VmFsdWUtPnR5cGUoKSwgdmFsdWUpOworfQorCitWYWx1ZSogUHJvY2VkdXJlOjphZGRCb29sQ29u
c3RhbnQoT3JpZ2luIG9yaWdpbiwgVHJpU3RhdGUgdHJpU3RhdGUpCiB7CiAgICAgaW50MzJfdCB2
YWx1ZSA9IDA7CiAgICAgc3dpdGNoICh0cmlTdGF0ZSkgewpAQCAtODQsNyArODksNyBAQCBWYWx1
ZSogUHJvY2VkdXJlOjphZGRCb29sQ29uc3RhbnQoVHJpU3RhCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIHJldHVybiBhZGRJbnRDb25zdGFudChJbnQzMiwgdmFsdWUpOwor
ICAgIHJldHVybiBhZGRJbnRDb25zdGFudChvcmlnaW4sIEludDMyLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAjaW5jbHVkZSAi
QjNUeXBlLmgiCiAjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAg
LTQwLDYgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFzcyBC
YXNpY0Jsb2NrOworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBPcGFxdWVCeXByb2R1
Y3RzOwogY2xhc3MgVmFsdWU7CiAKQEAgLTU2LDEwICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFs
dWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKIAotICAgIFZhbHVlKiBhZGRJbnRDb25zdGFudChU
eXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoT3JpZ2luLCBU
eXBlLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBWYWx1ZSogYWRkSW50Q29uc3RhbnQoVmFsdWUqLCBp
bnQ2NF90IHZhbHVlKTsKIAogICAgIC8vIFJldHVybnMgbnVsbCBmb3IgTWl4ZWRUcmlTdGF0ZS4K
LSAgICBWYWx1ZSogYWRkQm9vbENvbnN0YW50KFRyaVN0YXRlKTsKKyAgICBWYWx1ZSogYWRkQm9v
bENvbnN0YW50KE9yaWdpbiwgVHJpU3RhdGUpOwogCiAgICAgdm9pZCByZXNldFZhbHVlT3duZXJz
KCk7CiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwpAQCAtMjE2LDYgKzIxOSw4IEBAIHB1
YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gdGFrZUJ5cHJvZHVj
dHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9ieXByb2R1Y3RzKTsgfQogCiBwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKKyAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOwogICAgIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODYsNiArMTg2LDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgIGNhc2UgRGl2OgorICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMg
dXNlcyBDaGlsbERpdiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZSBydWxlcyBm
b3IgRGl2CisgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBpdCBoYXMgY29ybmVy
IGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAorICAgICAgICAgICAg
Ly8gbGlrZXMuCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxk
KDApLT5kaXZDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAg
ICBicmVhazsKKwogICAgICAgICBjYXNlIEJpdEFuZDoKICAgICAgICAgICAgIGhhbmRsZUNvbW11
dGF0aXZpdHkoKTsKIApAQCAtMzE4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZVgsIHZhbHVlWCkKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogemVyby1jb25zdGFudC4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9
PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUtPnR5cGUoKSwgMCkpOworICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUs
IDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDQ2LDcg
KzQ1Niw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGNvbnN0
MSwgY29uc3QyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29uc3QyCiAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmVxdWFsQ29uc3RhbnQobV92YWx1ZS0+
Y2hpbGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOb3RFcXVhbDoK
QEAgLTQ3Myw3ICs0ODUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBO
b3RFcXVhbChjb25zdDEsIGNvbnN0MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3Qx
ICE9IGNvbnN0MgogICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAg
ICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ub3RFcXVhbENv
bnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3Zh
bHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTGVz
c1RoYW46CkBAIC00ODEsNDIgKzQ5NSw1OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk1OAogCiAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29u
c3RhbnQobV92YWx1ZS0+Y2hpbGQoMCktPmxlc3NUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQo
MSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDApLT5sZXNzVGhhbkNvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25z
dGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+Z3JlYXRlclRoYW5Db25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJUaGFuQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIExlc3NFcXVhbDoKICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xD
b25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+bGVzc0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hp
bGQoMSkpKSk7CisgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApLT5sZXNzRXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR3JlYXRlckVxdWFsOgogICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9v
bENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApLT5ncmVhdGVyRXF1YWxDb25zdGFudChtX3ZhbHVl
LT5jaGlsZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAor
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCktPmdyZWF0ZXJFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBYm92ZToKICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJv
b2xDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgwKS0+YWJvdmVDb25zdGFudChtX3ZhbHVlLT5jaGls
ZCgxKSkpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCktPmFib3ZlQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJlbG93OgogICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDApLT5iZWxvd0NvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KS0+YmVsb3dDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5j
aGlsZCgwKS0+YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOworICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+
YWJvdmVFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgogICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUt
PmNoaWxkKDApLT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CisgICAg
ICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LT5iZWxvd0VxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEJyYW5jaDogewpAQCAtNTUzLDcgKzU4Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAoZWxzZSkKICAgICAgICAgICAgIGlm
ICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT50
YWtlbigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAg
ICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkpOworICAgICAgICAg
ICAgICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkuYmxvY2soKSk7
CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTU2Miw3ICs1OTIsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBKdW1wKHRoZW4pCiAgICAgICAgICAgICBpZiAodHJpU3RhdGUg
PT0gVHJ1ZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgYnJhbmNoLT5ub3RUYWtlbigpLmJs
b2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAgICAgIGJyYW5j
aC0+Y29udmVydFRvSnVtcChicmFuY2gtPnRha2VuKCkpOworICAgICAgICAgICAgICAgIGJyYW5j
aC0+Y29udmVydFRvSnVtcChicmFuY2gtPnRha2VuKCkuYmxvY2soKSk7CiAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTYzMSw2ICs2NjEsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2ltcGxpZnlD
RkcoKQogICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
IkJlZm9yZSBzaW1wbGlmeUNGRzpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX3Byb2MpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHRocmVlIGVhc3kgc2ltcGxp
ZmljYXRpb24gcnVsZXM6CiAgICAgICAgIC8vCiAgICAgICAgIC8vIDEpIElmIGEgc3VjY2Vzc29y
IGlzIGEgYmxvY2sgdGhhdCBqdXN0IGp1bXBzIHRvIGFub3RoZXIgYmxvY2ssIHRoZW4ganVtcCBk
aXJlY3RseSB0bwpAQCAtNjUxLDYgKzY4Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGl0ZXJh
dGlvbnMgbmVlZGVkIHRvIGtpbGwgYSBsb3Qgb2YgY29kZS4KIAogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBibG9jayAiLCAqYmxvY2ssICI6XG4iKTsK
KwogICAgICAgICAgICAgY2hlY2tQcmVkZWNlc3NvclZhbGlkaXR5KCk7CiAKICAgICAgICAgICAg
IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBzdWNjZXNzb3Jz
LgpAQCAtNjY0LDcgKzcwMiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAmJiBz
dWNjZXNzb3ItPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVtcCkgewogICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3IgPSBzdWNjZXNzb3ItPnN1Y2Nlc3NvckJsb2NrKDAp
OwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3VjY2Vzc29yICE9IHN1Y2Nlc3Nvcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5yZXBsYWNlUHJlZGVjZXNzb3Io
c3VjY2Vzc29yLCBibG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBw
b2ludGVyRHVtcChzdWNjZXNzb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IHdpdGggIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChuZXdTdWNjZXNz
b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBk
byBub3QgZG8gcmVwbGFjZVByZWRlY2Vzc29yKCkgYmVjYXVzZSB0aGUgYmxvY2sgd2UncmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXBwaW5nIHdpbGwgc3RpbGwgaGF2ZSBuZXdTdWNj
ZXNzb3IgYXMgaXRzIHN1Y2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N1Y2Nl
c3Nvci0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yID0gbmV3U3VjY2Vzc29yOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
Q0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjc5LDE0ICs3MjUsMTggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIWVmZmVjdHMubXVzdEV4ZWN1dGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBBbGwgb2YgdGhlIHN1Y2Nlc3NvcnMgbXVzdCBiZSB0aGUg
c2FtZS4KICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxTYW1lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrIGZpcnN0U3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nl
c3NvcigwKTsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogZmlyc3RTdWNjZXNzb3Ig
PSBibG9jay0+c3VjY2Vzc29yQmxvY2soMCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soaSkgIT0gZmlyc3RTdWNj
ZXNzb3IuYmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNj
ZXNzb3JCbG9jayhpKSAhPSBmaXJzdFN1Y2Nlc3NvcikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFNhbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBpZiAoYWxsU2FtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhbmdpbmcgIiwgcG9pbnRlckR1bXAoYmxv
Y2spLCAiJ3MgdGVybWluYWwgdG8gYSBKdW1wLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPmNvbnZlcnRUb0p1bXAoZmlyc3RTdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNzE5
LDYgKzc2OSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhh
dCBwcmVkZWNlc3NvcnMgb2YgYmxvY2sncyBuZXcgc3VjY2Vzc29ycyBrbm93IHdoYXQncyB1cC4K
ICAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29yQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTdWNjZXNz
b3ItPnJlcGxhY2VQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2VkICIsIHBvaW50ZXJEdW1wKGJsb2Nr
KSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIlxuIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZENGRyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw4ICs4MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7Ci0gICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6
IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1
ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKGNoaWxkLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5z
KGNoaWxkKSwgKCJBdCAiLCAqdmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKGNoaWxkKSkpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFz
aFNldDxCYXNpY0Jsb2NrKj4+IGFsbFByZWRlY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDkyICsxMjQsOTcgQEAg
VmFsdWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbgogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikg
Y29uc3QKK1ZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
KSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OnN1YkNv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6c3ViQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1WYWx1ZSogVmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikg
Y29uc3QKK1ZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
KSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WYWx1ZSogVmFsdWU6OmJpdE9y
Q29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRBbmRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1ZTo6Yml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVl
OjpzaGxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CitWYWx1ZSogVmFsdWU6OmJp
dFhvckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotVmFsdWUqIFZhbHVlOjpzU2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqKSBjb25zdAorVmFsdWUqIFZhbHVlOjpzaGxDb25zdGFudChQcm9jZWR1cmUmLCBjb25z
dCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZhbHVlKiBWYWx1
ZTo6elNockNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK1ZhbHVlKiBWYWx1ZTo6
c1NockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmVxdWFsQ29uc3RhbnQoVmFsdWUqKSBj
b25zdAorVmFsdWUqIFZhbHVlOjp6U2hyQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
KSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitUcmlTdGF0ZSBWYWx1ZTo6ZXF1
YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KFZhbHVlKikgY29uc3QK
K1RyaVN0YXRlIFZhbHVlOjpub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsK
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFu
Q29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6Omxlc3NUaGFuQ29uc3RhbnQo
Y29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1U
cmlTdGF0ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0
ZSBWYWx1ZTo6Z3JlYXRlclRoYW5Db25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAg
cmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpsZXNzRXF1YWxDb25z
dGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6bGVzc0VxdWFsQ29uc3RhbnQoY29u
c3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlT
dGF0ZSBWYWx1ZTo6Z3JlYXRlckVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUg
VmFsdWU6OmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKikgY29uc3QKIHsKICAgICBy
ZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQo
VmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUq
KSBjb25zdAogewogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1UcmlTdGF0ZSBWYWx1
ZTo6YmVsb3dDb25zdGFudChWYWx1ZSopIGNvbnN0CitUcmlTdGF0ZSBWYWx1ZTo6YmVsb3dDb25z
dGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9
CiAKLVRyaVN0YXRlIFZhbHVlOjphYm92ZUVxdWFsQ29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJp
U3RhdGUgVmFsdWU6OmFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLVRyaVN0YXRlIFZhbHVlOjpiZWxvd0VxdWFs
Q29uc3RhbnQoVmFsdWUqKSBjb25zdAorVHJpU3RhdGUgVmFsdWU6OmJlbG93RXF1YWxDb25zdGFu
dChjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwy
NSArMTExLDI2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIFZhbHVlKiBuZWdDb25zdGFu
dChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQcm9j
ZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25z
dGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUq
IHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVh
bCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwg
VmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlKiBzaGxDb25zdGFudChQcm9j
ZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUqIHNTaHJDb25z
dGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUq
IHpTaHJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1
YWwgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1
cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OyAvLyBUaGlzIGNob29zZXMgQ2hpbGxEaXYg
c2VtYW50aWNzIGZvciBpbnRlZ2Vycy4KKyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRBbmRDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFs
dWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHNobENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogc1NockNv
bnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVh
bCBWYWx1ZSogelNockNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Q7CiAgICAgCi0gICAgdmlydHVhbCBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhl
cikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KFZhbHVlKiBv
dGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KFZhbHVl
KiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50
KFZhbHVlKiBvdGhlcikgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1YWxDb25z
dGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3JlYXRlckVx
dWFsQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGFi
b3ZlQ29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGJl
bG93Q29uc3RhbnQoVmFsdWUqIG90aGVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIFRyaVN0YXRlIGFi
b3ZlRXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgVHJpU3Rh
dGUgYmVsb3dFcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBU
cmlTdGF0ZSBlcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmly
dHVhbCBUcmlTdGF0ZSBub3RFcXVhbENvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7
CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzVGhhbkNvbnN0YW50KGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBncmVhdGVyVGhhbkNvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBUcmlTdGF0ZSBsZXNzRXF1YWxDb25z
dGFudChjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgZ3Jl
YXRlckVxdWFsQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFRyaVN0YXRlIGFib3ZlQ29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFRyaVN0YXRlIGJlbG93Q29uc3RhbnQoY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRyaVN0YXRlIGFib3ZlRXF1YWxDb25zdGFudChjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVHJpU3RhdGUgYmVsb3dFcXVhbENvbnN0YW50KGNvbnN0
IFZhbHVlKiBvdGhlcikgY29uc3Q7CiAKICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBjb21wYXJp
c29uIHRoZW4gdGhpcyByZXR1cm5zIHRoZSBpbnZlcnRlZCBmb3JtIG9mIHRoYXQgY29tcGFyaXNv
biwgaWYKICAgICAvLyBwb3NzaWJsZS4gSXQgY2FuIGJlIGltcG9zc2libGUgZm9yIGRvdWJsZSBj
b21wYXJpc29ucywgd2hlcmUgZm9yIGV4YW1wbGUgTGVzc1RoYW4gYW5kCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NTksNiArMjg1OSwx
MDggQEAgdm9pZCB0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndQogICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jKSA9PSBmdW5jdGlvbldpdGhIZWxsYURvdWJsZUFy
Z3VtZW50cygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYpKTsKIH0KIAordm9p
ZCB0ZXN0Q2hpbGxEaXYoaW50IG51bSwgaW50IGRlbiwgaW50IHJlcykKK3sKKyAgICAvLyBUZXN0
IG5vbi1jb25zdGFudC4KKyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBDaGlsbERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisg
ICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBudW0sIGRlbikgPT0gcmVzKTsK
KyAgICB9CisKKyAgICAvLyBUZXN0IGNvbnN0YW50LgorICAgIHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbnVt
KSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgZGVuKSkpOworICAgICAgICAKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpID09IHJlcyk7CisgICAgfQorfQorCit2b2lkIHRlc3RDaGlsbERpdlR3aWNlKGlu
dCBudW0xLCBpbnQgZGVuMSwgaW50IG51bTIsIGludCBkZW4yLCBpbnQgcmVzKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIENoaWxsRGl2LCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwKKyAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKSkpKSk7Cisg
ICAgCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIG51bTEsIGRlbjEsIG51bTIs
IGRlbjIpID09IHJlcyk7Cit9CisKK3ZvaWQgdGVzdENoaWxsRGl2NjQoaW50NjRfdCBudW0sIGlu
dDY0X3QgZGVuLCBpbnQ2NF90IHJlcykKK3sKKyAgICBpZiAoIWlzNjRCaXQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gVGVzdCBub24tY29uc3RhbnQuCisgICAgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICAgICAgCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQ2hpbGxEaXYsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpKTsKKyAgICAgICAgCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4o
cHJvYywgbnVtLCBkZW4pID09IHJlcyk7CisgICAgfQorCisgICAgLy8gVGVzdCBjb25zdGFudC4K
KyAgICB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBDaGls
bERpdiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG51bSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGRlbikpKTsKKyAgICAgICAgCisgICAg
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYykgPT0gcmVzKTsKKyAgICB9Cit9
CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMzMzcsNiArMzQz
OSwyNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RDYWxsU2lt
cGxlRG91YmxlKDEsIDIpKTsKICAgICBSVU4odGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYURvdWJs
ZUFyZ3VtZW50cygpKTsKIAorICAgIFJVTih0ZXN0Q2hpbGxEaXYoNCwgMiwgMikpOworICAgIFJV
Tih0ZXN0Q2hpbGxEaXYoMSwgMCwgMCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXYoMCwgMCwgMCkp
OworICAgIFJVTih0ZXN0Q2hpbGxEaXYoMSwgLTEsIC0xKSk7CisgICAgUlVOKHRlc3RDaGlsbERp
digtMjE0NzQ4MzY0NyAtIDEsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2KC0yMTQ3NDgz
NjQ3IC0gMSwgMSwgLTIxNDc0ODM2NDcgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdigtMjE0
NzQ4MzY0NyAtIDEsIC0xLCAtMjE0NzQ4MzY0NyAtIDEpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2
KC0yMTQ3NDgzNjQ3IC0gMSwgMiwgLTEwNzM3NDE4MjQpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2
NjQoNCwgMiwgMikpOworICAgIFJVTih0ZXN0Q2hpbGxEaXY2NCgxLCAwLCAwKSk7CisgICAgUlVO
KHRlc3RDaGlsbERpdjY0KDAsIDAsIDApKTsKKyAgICBSVU4odGVzdENoaWxsRGl2NjQoMSwgLTEs
IC0xKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAx
LCAwLCAwKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwg
LSAxLCAxLCAtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMSkpOworICAgIFJVTih0ZXN0Q2hpbGxE
aXY2NCgtOTIyMzM3MjAzNjg1NDc3NTgwN2xsIC0gMSwgLTEsIC05MjIzMzcyMDM2ODU0Nzc1ODA3
bGwgLSAxKSk7CisgICAgUlVOKHRlc3RDaGlsbERpdjY0KC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwg
LSAxLCAyLCAtNDYxMTY4NjAxODQyNzM4NzkwNCkpOworICAgIFJVTih0ZXN0Q2hpbGxEaXZUd2lj
ZSg0LCAyLCA2LCAyLCA1KSk7CisgICAgUlVOKHRlc3RDaGlsbERpdlR3aWNlKDQsIDAsIDYsIDIs
IDMpKTsKKyAgICBSVU4odGVzdENoaWxsRGl2VHdpY2UoNCwgMiwgNiwgMCwgMikpOworCiAgICAg
aWYgKHRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjI5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2Fs
bEhlbHBlcnMmIAogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAg
ICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgYmxvY2tMYWJlbHNbYmxv
Y2tdID0gaml0LmxhYmVsKCk7CiAgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkg
ewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2Vu
ZXJhdGUoaml0LCBjb250ZXh0KTsKQEAgLTE0MCw4ICsxNDEsNiBAQCB2b2lkIGdlbmVyYXRlKENv
ZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRl
eHQpOwotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCi0gICAgICAgICAgICBqdW1w
ID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwogICAgICAgICBzd2l0Y2ggKGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCkpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgQVNTRVJUKCFq
dW1wLmlzU2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDM2
IEBAIGlubGluZSBib29sIGlzVXJzaGlmdDY0VmFsaWQoY29uc3QgSW5zdCYKICAgICByZXR1cm4g
aXNTaGlmdFZhbGlkKGluc3QpOwogfQogCitpbmxpbmUgYm9vbCBpc1g4NkRpdkhlbHBlclZhbGlk
KGNvbnN0IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBy
ZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgJiYg
aW5zdC5hcmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBpc1g4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMlZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVy
VmFsaWQoaW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzWDg2Q29udmVydFRvUXVhZFdvcmQ2NFZh
bGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzWDg2RGl2SGVscGVyVmFsaWQo
aW5zdCk7Cit9CisKK2lubGluZSBib29sIGlzWDg2RGl2MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0
KQoreworICAgIHJldHVybiBpc1g4NkRpdkhlbHBlclZhbGlkKGluc3QpOworfQorCitpbmxpbmUg
Ym9vbCBpc1g4NkRpdjY0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNY
ODZEaXZIZWxwZXJWYWxpZChpbnN0KTsKK30KKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBj
b3B5KQpAQCAtOTYsNiArOTYsMjIgQEAgTmVnMzIgVUQ6RwogTmVnNjQgVUQ6RwogICAgIFRtcAog
CitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitYODZDb252
ZXJ0VG9Eb3VibGVXb3JkMzIgVTpHLCBEOkcKKyAgICBUbXAqLCBUbXAqCisKK1g4NkNvbnZlcnRU
b1F1YWRXb3JkNjQgVTpHLCBEOkcKKyAgICBUbXAqLCBUbXAqCisKK1g4NkRpdjMyIFVEOkcsIFVE
OkcsIFU6RworICAgIFRtcCosIFRtcCosIFRtcAorCitYODZEaXY2NCBVRDpHLCBVRDpHLCBVOkcK
KyAgICBUbXAqLCBUbXAqLCBUbXAKKwogTGVhIFVBOkcsIEQ6RwogICAgIEFkZHIsIFRtcAogCkBA
IC0xNTcsMTAgKzE3Myw2IEBAIFhvcjY0IFU6RywgVUQ6RwogICAgIFRtcCwgQWRkcgogICAgIElt
bSwgVG1wCiAKLU11bDMyIFU6RywgVUQ6RwotICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wCi0K
ICMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3
aGljaCBpcyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KICMgdGhlIHBsYXRm
b3JtLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQg
bWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCiAjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RP
SCwgb3VyIE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUo
KSIgdGhhdCBiYXNpY2FsbHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U2ltcGxpZnlDRkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU2ltcGxpZnlDRkcuY3BwCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NyArODYsOSBAQCBib29sIHNpbXBsaWZ5Q0ZHKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJSZXBsYWNpbmcgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBw
b2ludGVyRHVtcChzdWNjZXNzb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IHdpdGggIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChuZXdTdWNjZXNz
b3IpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld1N1Y2Nlc3Nvci0+cmVwbGFjZVByZWRlY2Vzc29yKHN1Y2Nlc3NvciwgYmxvY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBkbyByZXBs
YWNlUHJlZGVjZXNzb3IoKSBiZWNhdXNlIHRoZSBibG9jayB3ZSdyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc2tpcHBpbmcgd2lsbCBzdGlsbCBoYXZlIG5ld1N1Y2Nlc3NvciBhcyBpdHMg
c3VjY2Vzc29yLgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3VjY2Vzc29yLT5hZGRQcmVk
ZWNlc3NvcihibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3IgPSBuZXdT
dWNjZXNzb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtMTEyLDYgKzExNCw3IEBAIGJvb2wgc2ltcGxpZnlDRkcoQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDaGFuZ2luZyAi
LCBwb2ludGVyRHVtcChibG9jayksICIncyB0ZXJtaW5hbCB0byBhIEp1bXAuXG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkgPSBJbnN0KEp1bXAsIGJsb2NrLT5sYXN0
KCkub3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCku
cmVzaXplKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKVsw
XS5mcmVxdWVuY3koKSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJh
c2ljQmxvY2s+KTsKICAgICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBmbG9hdCBl
eGVjdXRpb25Db3VudCk7CiAgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sq
IGJlZm9yZSwgZmxvYXQgZXhlY3V0aW9uQ291bnQpOwotICAgIAorCiAgICAgYm9vbCBleGVjdXRl
KCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOTks
OCArMzM5OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aERpdihOb2QKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3By
KCkpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKLSAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuaWRpdmxfcihvcDJHUFIpOworICAgICAgICBtX2ppdC54ODZDb252ZXJ0VG9Eb3Vi
bGVXb3JkMzIoKTsKKyAgICAgICAgbV9qaXQueDg2RGl2MzIob3AyR1BSKTsKICAgICAgICAgICAg
IAogICAgICAgICBpZiAob3AyVGVtcEdQUiAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAg
dW5sb2NrKG9wMlRlbXBHUFIpOwpAQCAtMzU1NSw4ICszNTU1LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShv
cDFHcHIsIGVheC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoZGl2aXNvciksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxl
cigpLmNkcSgpOwotICAgICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMy
KCk7CisgICAgICAgICAgICAgICAgbV9qaXQueDg2RGl2MzIoc2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSkg
ewogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1lcmF0b3JQb3NpdGl2
ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMVNh
dmVHUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6WmVybywgZWR4LmdwcigpKSk7CkBAIC0zNjQ2LDggKzM2NDYsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgZWF4LmdwcigpKTsKLSAgICAgICAgbV9qaXQu
YXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Iob3Ay
R1BSKTsKKyAgICAgICAgbV9qaXQueDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAgICAg
IG1faml0Lng4NkRpdjMyKG9wMkdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKG9wMlRl
bXBHUFIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIHVubG9jayhvcDJUZW1wR1BSKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82
NC5jcHAJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDggKzg1OCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBKdW1wIGRlbm9taW5h
dG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKC0xKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIx
NDc0ODM2NDctMSkpKTsKICAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKLSAgICBt
X2Fzc2VtYmxlci5jZHEoKTsKLSAgICBtX2Fzc2VtYmxlci5pZGl2bF9yKHJlZ1QyKTsKKyAgICB4
ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICB4ODZEaXYzMihyZWdUMik7CiAgICAgSnVt
cCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDMs
IFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMTkyMjkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIzLDggKzYyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlv
biogY3VycmUKICAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CiAgICAgZGVub21pbmF0b3JO
b3ROZWcxLmxpbmsodGhpcyk7Ci0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJs
ZXIuaWRpdmxfcihlY3gpOworICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIHg4
NkRpdjMyKGVjeCk7CiAgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwogICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhp
cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlv
bkNvbXBpbGVyLmgJKHJldmlzaW9uIDE5MjI5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2Myw4ICs3NjMs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gWDg2UmVn
aXN0ZXJzOjplYXgpOwogICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgWDg2UmVnaXN0
ZXJzOjplY3gpOwogICAgICAgICAgICAgaWYgKG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlNE
aXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01vZCkgewotICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNkcSgpOwotICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3Io
WDg2UmVnaXN0ZXJzOjplY3gpOworICAgICAgICAgICAgICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdv
cmQzMigpOworICAgICAgICAgICAgICAgIHg4NkRpdjMyKFg4NlJlZ2lzdGVyczo6ZWN4KTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IFdBU01PcEV4
cHJlc3Npb25JMzI6OlVEaXYgfHwgb3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1vZCk7CiAg
ICAgICAgICAgICAgICAgeG9yMzIoWDg2UmVnaXN0ZXJzOjplZHgsIFg4NlJlZ2lzdGVyczo6ZWR4
KTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxOTIyOTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTExLTEwICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBh
IHByb2dyYW0gd2l0aCBDaGlsbERpdgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUxMTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91
bGFpbi4KKworICAgICAgICBOZWVkZWQgdG8gYmVlZiB1cCBzb21lIGNvbXBpbGVyIGFsZ29yaXRo
bXMuIEFsbCBvZiB0aGUgaGFyZGVuaW5nIHdhcyBhYm91dCBtYWtpbmcgdGhlbQorICAgICAgICB3
b3JrIHdpdGggb2JqZWN0cyB0aGF0IGhhdmUgbW92ZSBzZW1hbnRpY3MgYnV0IG5vdCBjb3B5IHNl
bWFudGljcy4gVGhpcyBhcmlzZXMgaW4gQjMKKyAgICAgICAgYmFzaWMgYmxvY2sgaW5zZXJ0aW9u
IHNldHMuCisKKyAgICAgICAgKiB3dGYvQnViYmxlU29ydC5oOgorICAgICAgICAoV1RGOjpidWJi
bGVTb3J0KToKKyAgICAgICAgKiB3dGYvSW5zZXJ0aW9uLmg6CisgICAgICAgIChXVEY6Okluc2Vy
dGlvbjo6SW5zZXJ0aW9uKToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjppbmRleCk6CisgICAg
ICAgIChXVEY6Okluc2VydGlvbjo6ZWxlbWVudCk6CisgICAgICAgIChXVEY6Okluc2VydGlvbjo6
b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6ZXhlY3V0ZUluc2VydGlvbnMpOgorCiAyMDE1LTEx
LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBVc2UgQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5VUwpJbmRleDogU291cmNlL1dU
Ri93dGYvQnViYmxlU29ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0J1YmJsZVNv
cnQuaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL1dURi93dGYvQnViYmxlU29ydC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw4ICs4OSw4IEBAIHZvaWQgYnViYmxlU29ydChJdGVyYXRvclR5
cGUgYmVnaW4sIEl0ZXIKIHsKICAgICBidWJibGVTb3J0KAogICAgICAgICBiZWdpbiwgZW5kLAot
ICAgICAgICBbXSAodHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3JUeXBlPjo6
dmFsdWVfdHlwZSBsZWZ0LAotICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFp
dHM8SXRlcmF0b3JUeXBlPjo6dmFsdWVfdHlwZSByaWdodCkgLT4gYm9vbCB7CisgICAgICAgIFtd
IChjb25zdCB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1
ZV90eXBlJiBsZWZ0LAorICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90
cmFpdHM8SXRlcmF0b3JUeXBlPjo6dmFsdWVfdHlwZSYgcmlnaHQpIC0+IGJvb2wgewogICAgICAg
ICAgICAgcmV0dXJuIGxlZnQgPCByaWdodDsKICAgICAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRp
b24uaAkocmV2aXNpb24gMTkyMjkzKQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xh
c3MgSW5zZXJ0aW9uIHsKIHB1YmxpYzoKICAgICBJbnNlcnRpb24oKSB7IH0KLSAgICAKLSAgICBJ
bnNlcnRpb24oc2l6ZV90IGluZGV4LCBUIGVsZW1lbnQpCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIFUmJiBlbGVtZW50KQogICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgICAgICwg
bV9lbGVtZW50KHN0ZDo6Zm9yd2FyZDxVPihlbGVtZW50KSkKICAgICB7CiAgICAgfQogICAgIAog
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBUIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBjb25zdCBUJiBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgVCYgZWxlbWVudCgpIHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluc2VydGlvbiYgb3Ro
ZXIpIGNvbnN0CiAgICAgewpAQCAtNjYsOCArNjgsOCBAQCB2b2lkIGV4ZWN1dGVJbnNlcnRpb25z
KFRhcmdldFZlY3RvclR5cGUmCiAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9u
c1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwogICAgICAg
ICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAg
dGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07Ci0gICAgICAgIHRhcmdldFtmaXJz
dEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIHRhcmdldFtpXSA9IFdURjo6bW92ZSh0YXJnZXRbaSAtIGluZGV4T2Zmc2V0XSk7Cisg
ICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9IFdURjo6bW92ZShpbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXS5lbGVtZW50KCkpOwogICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4Owog
ICAgIH0KICAgICBpbnNlcnRpb25zLnJlc2l6ZSgwKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>