<?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>67755</bug_id>
          
          <creation_ts>2011-09-07 20:07:57 -0700</creation_ts>
          <short_desc>Remove the Completion object from JSC, I have never liked it</short_desc>
          <delta_ts>2011-09-08 21:53:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>463849</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-07 20:07:57 -0700</bug_when>
    <thetext>Remove the Completion object from JSC, I have never liked it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463851</commentid>
    <comment_count>1</comment_count>
      <attachid>106694</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-07 20:16:38 -0700</bug_when>
    <thetext>Created attachment 106694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463852</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-07 20:17:12 -0700</bug_when>
    <thetext>Let&apos;s see windows crash and burn :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463853</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 20:18:52 -0700</bug_when>
    <thetext>Attachment 106694 did not pass style-queue:

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

Source/JavaScriptGlue/JavaScriptGlue.cpp:314:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/JavaScriptGlue/JavaScriptGlue.cpp:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:66:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:83:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 28 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>463857</commentid>
    <comment_count>4</comment_count>
      <attachid>106694</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-07 20:32:17 -0700</bug_when>
    <thetext>Comment on attachment 106694
Patch

Attachment 106694 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9609827</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463897</commentid>
    <comment_count>5</comment_count>
      <attachid>106694</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 23:15:33 -0700</bug_when>
    <thetext>Comment on attachment 106694
Patch

Attachment 106694 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9616053</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463936</commentid>
    <comment_count>6</comment_count>
      <attachid>106694</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 00:14:39 -0700</bug_when>
    <thetext>Comment on attachment 106694
Patch

Attachment 106694 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9616108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464080</commentid>
    <comment_count>7</comment_count>
      <attachid>106747</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 09:01:55 -0700</bug_when>
    <thetext>Created attachment 106747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464082</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 09:04:34 -0700</bug_when>
    <thetext>Attachment 106747 did not pass style-queue:

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

Source/JavaScriptGlue/JavaScriptGlue.cpp:314:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/JavaScriptGlue/JavaScriptGlue.cpp:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:66:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:83:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 29 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>464086</commentid>
    <comment_count>9</comment_count>
      <attachid>106748</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 09:14:54 -0700</bug_when>
    <thetext>Created attachment 106748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464087</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 09:17:56 -0700</bug_when>
    <thetext>Attachment 106748 did not pass style-queue:

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

Source/JavaScriptGlue/JavaScriptGlue.cpp:314:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/JavaScriptGlue/JavaScriptGlue.cpp:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:66:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:83:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 29 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>464155</commentid>
    <comment_count>11</comment_count>
      <attachid>106761</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 10:43:04 -0700</bug_when>
    <thetext>Created attachment 106761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464177</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 11:09:30 -0700</bug_when>
    <thetext>Attachment 106761 did not pass style-queue:

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

Source/JavaScriptGlue/JavaScriptGlue.cpp:314:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/JavaScriptGlue/JavaScriptGlue.cpp:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:66:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:83:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 30 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>464294</commentid>
    <comment_count>13</comment_count>
      <attachid>106780</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 13:28:14 -0700</bug_when>
    <thetext>Created attachment 106780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464306</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 13:34:40 -0700</bug_when>
    <thetext>Attachment 106780 did not pass style-queue:

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

Source/JavaScriptGlue/JavaScriptGlue.cpp:314:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/JavaScriptGlue/JavaScriptGlue.cpp:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:66:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/runtime/Completion.cpp:83:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 30 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>464397</commentid>
    <comment_count>15</comment_count>
      <attachid>106794</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 14:56:19 -0700</bug_when>
    <thetext>Created attachment 106794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464403</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 14:59:50 -0700</bug_when>
    <thetext>Attachment 106794 did not pass style-queue:

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

Source/JavaScriptGlue/JavaScriptGlue.cpp:314:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/JavaScriptGlue/JavaScriptGlue.cpp:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 31 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>464416</commentid>
    <comment_count>17</comment_count>
      <attachid>106794</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-08 15:08:43 -0700</bug_when>
    <thetext>Comment on attachment 106794
Patch

It would be nice if the inherits checks moved into helper functions (e.g. isTerminatedExecutionError()), and also if thoses classes move out of ExceptionHelpers at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464445</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 15:37:42 -0700</bug_when>
    <thetext>Committed r94811: &lt;http://trac.webkit.org/changeset/94811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464632</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-08 21:20:04 -0700</bug_when>
    <thetext>This patch caused two worker tests to hit assertions. See the bug 67829.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464641</commentid>
    <comment_count>20</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-08 21:53:17 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; This patch caused two worker tests to hit assertions. See the bug 67829.

Thanks, I will take a look ASAP.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106694</attachid>
            <date>2011-09-07 20:16:38 -0700</date>
            <delta_ts>2011-09-08 09:01:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67755-20110907201637.patch</filename>
            <type>text/plain</type>
            <size>47209</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNC
YXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1Nj
cmlwdFN5bnRheCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Mb2Fk
KToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAocnVuV2l0aFNjcmlw
dHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjp0b1N0cmluZyk6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcik6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6VGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorCiAyMDExLTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUFBDIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNiBAQAorCisjZW5k
aWYKKyNpZm5kZWYgTkRFQlVHCiBfSlNDaGVja1NjcmlwdFN5bnRheAogX0pTQ2xhc3NDcmVhdGUK
IF9KU0NsYXNzUmVsZWFzZQpAQCAtMTE5LDcgKzEyMiw3IEBAIF9fWk4zSlNDMTFKU0J5dGVBcnJh
eTEzc19kZWZhdWx0SW5mb0UKIF9fWk4zSlNDMTFKU0J5dGVBcnJheTE1Y3JlYXRlU3RydWN0dXJl
RVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOU183SlNWYWx1ZUVQS05T
XzlDbGFzc0luZm9FCiBfX1pOM0pTQzExSlNCeXRlQXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OVN0cnVjdHVyZUVQTjNXVEY5Qnl0ZUFycmF5RQogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0
RXYKLV9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUUKK19fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUVQTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDMTFyZWdFeHBGbGFnc0VSS05TXzdVU3RyaW5nRQogX19aTjNK
U0MxMkRhdGVJbnN0YW5jZTZzX2luZm9FCkBAIC0xMzUsNiArMTM4LDcgQEAgX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRyYWNlRXYK
IF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFTlNfOEhlYXBTaXplRQogX19a
TjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q2c19pbmZvRQpA
QCAtMjE3LDYgKzIyMSw3IEBAIF9fWk4zSlNDMjNBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjRkdW1w
RXYKIF9fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDMjNzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNo
RW50cnlFUE5TXzhKU09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEySlNHbG9iYWxEYXRh
RVBOU18xNEpTR2xvYmFsT2JqZWN0RQorX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjZzX2luZm9FCiBfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yRVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VS
TlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQpAQCAtMzI2LDcgKzMz
MSw3IEBAIF9fWk4zSlNDOEpTT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9w
UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxl
cjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlND
OFByb2ZpbGVyOHByb2ZpbGVyRXYKLV9fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBO
U18xNFNjb3BlQ2hhaW5Ob2RlRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQorX19aTjNK
U0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNv
dXJjZUNvZGVFTlNfN0pTVmFsdWVFUFM3XwogX19aTjNKU0M4aXNab21iaWVFUEtOU182SlNDZWxs
RQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNKU0M5Q29kZUJsb2NrRDJFdgpAQCAtNjE4
LDcgKzYyMywzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpTU3RyaW5nRQog
X2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0
eQotCi0jaWZuZGVmIE5ERUJVRwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnlFdgotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
OTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDEwICsyNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAg
Q29tcGxldGlvbiByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEo
KSwgZmlsZU5hbWUpKTsKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICAKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uo
c2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRh
eChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yNzgsMTEgKzI4MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAg
IHN0b3BXYXRjaC5zdGFydCgpOwotICAgIENvbXBsZXRpb24gcmVzdWx0ID0gY2hlY2tTeW50YXgo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmls
ZU5hbWUpKTsKKworICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOworICAgIGJvb2wgdmFsaWRT
eW50YXggPSBjaGVja1N5bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BX
YXRjaC5zdG9wKCk7CiAKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXZhbGlkU3lu
dGF4KQorICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsK
IH0KIApAQCAtNDM2LDEzICs0NDAsMTQgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xv
YmFsT2JqZWN0KgogCiAgICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGluZygpOwogCi0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3Jp
cHQsIGZpbGVOYW1lKSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24u
Y29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAg
ICBpZiAoZHVtcCkgewotICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgPT0g
VGhyb3cpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0
aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgICAg
ICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIGNvbXBsZXRpb24u
dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBnbG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNDczLDcgKzQ3OCw4
IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobGluZVswXSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KGxp
bmUpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VT
b3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSk7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
bWFrZVNvdXJjZShsaW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICAgICAgZnJlZShsaW5lKTsKICNlbHNlCiAgICAgICAgIHByaW50Zigi
JXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CkBAIC00ODgsMTIgKzQ5NCwxNCBAQCBzdGF0aWMgdm9p
ZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGlmIChsaW5lLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICAg
ICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGxpbmUu
ZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpKTsKKworICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlw
ZSgpID09IFRocm93KQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21w
bGV0aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBw
cmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUg
IkFQSUNhc3QuaCIKICNpbmNsdWRlICJBUElTaGltcy5oIgotI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
ICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KQEAgLTUyLDE3ICs1MSwxOSBAQCBK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgLy8gZXZhbHVhdGUg
c2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAg
ICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+dXN0cmluZygpLCBzb3Vy
Y2VVUkwtPnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBDb21wbGV0aW9uIGNv
bXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwganNUaGlzT2JqZWN0KTsKIAotICAgIGlm
IChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7CisgICAgSlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNv
dXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGNvbXBsZXRpb24udmFsdWUoKSk7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChjb21wbGV0aW9uLnZhbHVlKCkpCi0gICAgICAg
IHJldHVybiB0b1JlZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOwotICAgIAorICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJldHVyblZhbHVlKTsKKwog
ICAgIC8vIGhhcHBlbnMsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBvbmx5IHN0YXRlbWVudCBpcyBh
biBlbXB0eSAoJzsnKSBzdGF0ZW1lbnQKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC03MywxMyArNzQsMTYgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpT
Q29udGV4dFJlZiBjdAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAgICBT
b3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT51c3RyaW5nKCksIHNvdXJjZVVS
TC0+dXN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IGNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBzb3VyY2UpOwotICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7
CisgICAgCisgICAgSlNWYWx1ZSBzeW50YXhFeGNlcHRpb247CisgICAgYm9vbCBpc1ZhbGlkU3lu
dGF4ID0gY2hlY2tTeW50YXgoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksIHNvdXJjZSwgJnN5bnRheEV4Y2VwdGlvbik7CisKKyAgICBpZiAoIWlzVmFsaWRTeW50YXgp
IHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5NDcxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwOCw4ICs3MDgsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8q
IEludGVycHJldGVyOjp0CiAgICAgICAgICAgICBhZGRFcnJvckluZm8oY2FsbEZyYW1lLCBleGNl
cHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlKCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRpb24tPmV4Y2VwdGlv
blR5cGUoKTsKLSAgICAgICAgaXNJbnRlcnJ1cHQgPSBleGNlcHRpb25UeXBlID09IEludGVycnVw
dGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZDsKKyAgICAgICAgaXNJbnRlcnJ1cHQg
PSAoZXhjZXB0aW9uLT5pbmhlcml0cygmSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZv
KSB8fCBleGNlcHRpb24tPmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5m
bykpOwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDQ3ICszNCw1OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQ29tcGxldGlvbiBjaGVj
a1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKK2Jvb2wg
Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
VmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERh
dGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUq
IHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAg
SlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y2hlY2tTeW50YXgoZXhlYyk7Ci0gICAgaWYgKGVy
cm9yKQotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXJyb3IpOworICAgIGlmIChl
cnJvcikgeworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisgICAgICAgICAgICAqcmV0
dXJuZWRFeGNlcHRpb24gPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAot
ICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNv
bXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK0pTVmFs
dWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSogcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAgICAgQVNTRVJUKGV4
ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJl
bnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9
IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXByb2dy
YW0pIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5nbG9iYWxEYXRhKCkuZXhj
ZXB0aW9uOwotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXhjZXB0aW9uKTsKKyAgICAgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CisgICAgICAgICAgICBleGVjLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0
aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhlYy0+Z2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGlmICghdGhpc1ZhbHVlIHx8IHRoaXNW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICB0aGlzVmFsdWUgPSBleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9U
aGlzT2JqZWN0KGV4ZWMpOwotCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRl
cigpLT5leGVjdXRlKHByb2dyYW0sIGV4ZWMsIHNjb3BlQ2hhaW4sIHRoaXNPYmopOwogCiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgSlNWYWx1ZSBleGNlcHRp
b24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB9
CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBUaHJvdzsKLSAgICAgICAgaWYg
KGV4Y2VwdGlvbi5pc09iamVjdCgpKQotICAgICAgICAgICAgZXhjZXB0aW9uVHlwZSA9IGFzT2Jq
ZWN0KGV4Y2VwdGlvbiktPmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgcmV0dXJuIENvbXBsZXRp
b24oZXhjZXB0aW9uVHlwZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgcmVzdWx0KTsKKworICAg
IEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAko
cmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMyICszMSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAKLSAgICBl
bnVtIENvbXBsVHlwZSB7IE5vcm1hbCwgQnJlYWssIENvbnRpbnVlLCBSZXR1cm5WYWx1ZSwgVGhy
b3csIEludGVycnVwdGVkLCBUZXJtaW5hdGVkIH07Ci0KLSAgICAvKgotICAgICAqIENvbXBsZXRp
b24gb2JqZWN0cyBhcmUgdXNlZCB0byBjb252ZXkgdGhlIHJldHVybiBzdGF0dXMgYW5kIHZhbHVl
Ci0gICAgICogZnJvbSBmdW5jdGlvbnMuCi0gICAgICovCi0gICAgY2xhc3MgQ29tcGxldGlvbiB7
Ci0gICAgcHVibGljOgotICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBlID0gTm9ybWFs
LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQotICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkK
LSAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgQ29tcGxUeXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAg
ICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgICAgICB2
b2lkIHNldFZhbHVlKEpTVmFsdWUgdikgeyBtX3ZhbHVlID0gdjsgfQotICAgICAgICBib29sIGlz
VmFsdWVDb21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgQ29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwot
ICAgIH07Ci0KLSAgICBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgp
KTsKKyAgICBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBK
U1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0g
SlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw1NCArNDEs
MjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgotICAgIEludGVycnVwdGVk
RXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICA6IEpTTm9u
RmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVy
cm9yU3RydWN0dXJlLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIHN0YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlv
bkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsKLSAgICAgICAg
SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yKGdsb2JhbERhdGEpOwotICAgICAgICBlcnJvci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Citjb25zdCBDbGFzc0luZm8g
SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvID0geyAiSW50ZXJydXB0ZWRFeGVjdXRp
b25FcnJvciIsIDAsIDAsIDAgfTsKIAotICAgIHZpcnR1YWwgQ29tcGxUeXBlIGV4Y2VwdGlvblR5
cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQorVVN0cmluZyBJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAoreworICAgIHJldHVybiAi
SmF2YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOworfQogCi0gICAgdmlydHVh
bCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuICJKYXZhU2NyaXB0
IGV4ZWN1dGlvbiBleGNlZWRlZCB0aW1lb3V0LiI7IH0KLX07Citjb25zdCBDbGFzc0luZm8gVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8gPSB7ICJUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3IiLCAwLCAwLCAwIH07CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitVU3RyaW5nIFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcjo6dG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICByZXR1cm4gSW50
ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4g
IkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIjsKIH0KIAotY2xhc3MgVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHJpdmF0ZToKLSAg
ICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAg
ICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS50ZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgewotICAgIH0KLQotcHVibGljOgot
ICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgc3RhdGljIFRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICB7
Ci0gICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFsbG9jYXRl
Q2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIFRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKLSAgICAgICAgZXJyb3ItPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRlcm1pbmF0ZWQ7
IH0KIAotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCB7IHJl
dHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iOyB9Ci19OworSlNPYmplY3Qq
IGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK3sKKyAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpn
bG9iYWxEYXRhKTsKK30KIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNpb24gOTQ3MTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDM0ICsyOSw3OSBAQAogI2lmbmRlZiBFeGNlcHRpb25IZWxwZXJz
X2gKICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBDb2Rl
QmxvY2s7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIElkZW50aWZpZXI7Ci0gICAg
Y2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAgIGNsYXNz
IEpTTm90QW5PYmplY3RFcnJvclN0dWI7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0gICAgY2xhc3Mg
Tm9kZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0gICAgCi0gICAgSlNPYmplY3QqIGNyZWF0
ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOwotICAgIEpTT2Jq
ZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOwot
ICAgIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAg
SlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0dsb2JhbE9iamVjdCopOwotICAg
IEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
SlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVycm9yKEV4ZWNT
dGF0ZSosIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihF
eGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSk7Ci0gICAgSlNPYmplY3QqIGNyZWF0
ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0
KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBKU09i
amVjdCogY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChFeGVjU3RhdGUqLCBj
b25zdCBVU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNl
cHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKK0pTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoRXhlY1N0YXRlKik7CitKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEpT
R2xvYmFsT2JqZWN0Kik7CitKU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihKU0dsb2Jh
bE9iamVjdCopOworSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOworSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJy
b3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CitKU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgY2hhciogb3AsIEpTVmFsdWUpOworSlNPYmplY3QqIGNyZWF0
ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNPYmplY3QqIGNy
ZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNPYmplY3QqIGNy
ZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiwgY29uc3QgVVN0
cmluZyYpOworCitKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSopOwor
SlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOworCisKK2NsYXNz
IEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
cml2YXRlOgorICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRpYyBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQorICAgIHsKKyAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcg
KGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXAp
KSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBlcnJvci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citwcml2YXRlOgor
ICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworCitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAg
ICAgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5ldyAoYWxsb2NhdGVDZWxs
PFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgVGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBlcnJvci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNT
bG90Q291bnQsICZzX2luZm8pOworICAgIH0KIAotICAgIEpTT2JqZWN0KiB0aHJvd091dE9mTWVt
b3J5RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAgSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5m
byBzX2luZm87Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5NDcxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNiw4ICsyMTYsOCBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShH
bG9iYWxEYXRhVHlwCiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNBY3Rp
dmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgaW50ZXJy
dXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm9uRmluYWxPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB0ZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vbkZpbmFsT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB0ZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdGF0aWNTY29wZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBzdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRo
aXMsIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBA
CiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUg
IkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xv
dC5oIgpAQCAtMjE5LDggKzIxOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlz
RnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlz
RnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUtPmlzRXh0ZW5zaWJsZSgpOyB9CiAKLSAgICAgICAgdmlydHVhbCBDb21w
bFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRocm93OyB9Ci0KICAgICAgICAg
dm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1Np
emUpOwogICAgICAgICBib29sIGlzVXNpbmdJbmxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fcHJvcGVydHlTdG9yYWdlKSA9PSBzdGF0aWNfY2Fz
dDxjb25zdCB2b2lkKj4odGhpcyArIDEpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZy
b20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1bjo6RXZhbHVh
dGUpOgorICAgICAgICAoSlNSdW46OkNoZWNrU3ludGF4KToKKyAgICAgICAgKiBKU1J1bi5oOgor
ICAgICAgICAqIEphdmFTY3JpcHRHbHVlLmNwcDoKKyAgICAgICAgKEpTUnVuRXZhbHVhdGUpOgor
CiAyMDExLTA5LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5NDYzMi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMiArNjcsMTIgQEAg
SlNHbG9iYWxPYmplY3QqIEpTUnVuOjpHbG9iYWxPYmplY3QoKSBjbwogICAgIHJldHVybiBmR2xv
YmFsT2JqZWN0LmdldCgpOwogfQogCi1Db21wbGV0aW9uIEpTUnVuOjpFdmFsdWF0ZSgpCitKU1Zh
bHVlIEpTUnVuOjpFdmFsdWF0ZShKU1ZhbHVlKiBleHBjZXB0aW9uKQogewotICAgIHJldHVybiBK
U0M6OmV2YWx1YXRlKGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZkdsb2JhbE9iamVjdC0+
Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsKKyAgICByZXR1cm4gSlND
OjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZHbG9iYWxPYmplY3QtPmds
b2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291cmNlKSwgSlNWYWx1ZSgpLCBleHBjZXB0
aW9uKTsKIH0KIAogYm9vbCBKU1J1bjo6Q2hlY2tTeW50YXgoKQogewotICAgIHJldHVybiBKU0M6
OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShmU291
cmNlKSkuY29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgcmV0dXJuIEpTQzo6Y2hlY2tTeW50YXgo
Zkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9KU1J1bi5oCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0R2x1ZS9KU1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEpT
UnVuIDogcHVibGljIEpTQmFzZSB7CiAKICAgICAgICAgVVN0cmluZyBHZXRTb3VyY2UoKSBjb25z
dDsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIEdsb2JhbE9iamVjdCgpIGNvbnN0OwotICAgICAg
ICBDb21wbGV0aW9uIEV2YWx1YXRlKCk7CisgICAgICAgIEpTVmFsdWUgRXZhbHVhdGUoSlNWYWx1
ZSogZXhjZXB0aW9uKTsKICAgICAgICAgYm9vbCBDaGVja1N5bnRheCgpOwogICAgICAgICBKU0Zs
YWdzIEZsYWdzKCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
R2x1ZS9KYXZhU2NyaXB0R2x1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRH
bHVlL0phdmFTY3JpcHRHbHVlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTQgKzI5
MiwxNCBAQCBKU09iamVjdFJlZiBKU1J1bkV2YWx1YXRlKEpTUnVuUmVmIHJlZikKICAgICBpZiAo
cHRyKQogICAgIHsKICAgICAgICAgSlNHbHVlQVBJRW50cnkgZW50cnk7Ci0gICAgICAgIENvbXBs
ZXRpb24gY29tcGxldGlvbiA9IHB0ci0+RXZhbHVhdGUoKTsKLSAgICAgICAgaWYgKGNvbXBsZXRp
b24uaXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0g
KEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChjb21wbGV0aW9uLnZhbHVlKCksIHB0ci0+
R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
Y29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBUaHJvdykKKyAgICAgICAgCisgICAgICAgIEpTVmFs
dWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IHB0
ci0+RXZhbHVhdGUoJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICAKKyAgICAgICAgaWYg
KGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IChK
U09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QoZXZhbHVhdGlvbkV4Y2VwdGlvbiwgcHRyLT5H
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
SlNGbGFncyBmbGFncyA9IHB0ci0+RmxhZ3MoKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIGtK
U0ZsYWdEZWJ1ZykKICAgICAgICAgICAgIHsKQEAgLTMxMSw2ICszMTEsMTAgQEAgSlNPYmplY3RS
ZWYgSlNSdW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
cmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChyZXR1cm5WYWx1ZSwgcHRy
LT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAx
MS0wOS0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0
aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUlu
amVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1
YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAg
ICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisKIDIwMTEtMDktMDcgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI5NDY3NCBhbmQgcjk0Njg5LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDYgKzU3LDcgQEAKICNpbmNsdWRlICJYUGF0aEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTcwLDcgKzE3MSw3IEBAIGRvdWJsZSB2
YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikKIHsKLSAgICBpZiAoZXhjZXB0aW9u
LmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+ZXhjZXB0aW9uVHlwZSgpID09IFRl
cm1pbmF0ZWQpCisgICAgaWYgKGV4Y2VwdGlvbi5pbmhlcml0cygmVGVybWluYXRlZEV4ZWN1dGlv
bkVycm9yOjpzX2luZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICBVU3RyaW5nIGVycm9yTWVz
c2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIK
KyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1l
L0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIApAQCAt
MTMzLDcgKzEzNCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQK
IAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNl
ZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KGV4ZWMtPmV4Y2VwdGlvbigpKS0+ZXhjZXB0aW9uVHlwZSgp
ID09IFRlcm1pbmF0ZWQpOworICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0
aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigpLmluaGVyaXRz
KCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpOwogICAgICAgICAgICAgaWYgKHRl
cm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgZ2xvYmFsRGF0YS50ZXJtaW5hdG9yLnNob3VsZFRl
cm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbigpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsMTQgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0T2JqZWN0
IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgbG9uZyBpZCkKIHsKLSAgICBTb3Vy
Y2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0cmluZ1RvVVN0cmluZyhzb3VyY2UpKTsK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNlKSk7CiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgSlNWYWx1
ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xvYmFsVGhpc1ZhbHVlKCk7Ci0gICAg
Q29tcGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShzY3JpcHRT
dGF0ZSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUsIGdsb2Jh
bFRoaXNWYWx1ZSk7Ci0gICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgIT0gSlNDOjpOb3JtYWwgJiYg
Y29tcC5jb21wbFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKQorCisgICAgSlNWYWx1ZSBldmFs
dWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgZXZhbHVhdGlvblJldHVyblZhbHVlID0gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgJmV2YWx1YXRp
b25FeGNlcHRpb24pOworICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICByZXR1
cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY29tcC52YWx1
ZSgpOworCisgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGlvblJldHVyblZhbHVl
OwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEoZnVuY3Rpb25WYWx1ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBKU01haW5UaHJlYWRFeGVjU3RhdGVfaAogCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9Db21wbGV0aW9uLmg+CiAjaWZuZGVm
IE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjZW5kaWYKQEAgLTUxLDEwICs1
MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAgICB9OwogCi0g
ICAgc3RhdGljIEpTQzo6Q29tcGxldGlvbiBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNl
LCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVh
dGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFpbk5vZGUqIGNoYWluLCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpK
U1ZhbHVlKiBleGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUg
Y3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBj
aGFpbiwgc291cmNlLCB0aGlzVmFsdWUpOworICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShl
eGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CiAgICAgfTsKIAogcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwyMiArMTM4LDIy
IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW4KIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuc3Rh
cnRMaW5lKCkpOwogCisgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOworCiAgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgQ29tcGxldGlvbiBj
b21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNTb3VyY2VDb2RlLCBzaGVsbCk7
CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVh
dGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCks
IGpzU291cmNlQ29kZSwgc2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBleGVjLT5n
bG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdChjb29raWUpOwogCi0gICAgaWYgKGNvbXAuY29t
cGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpIHsK
KyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgeworICAgICAgICByZXBvcnRFeGNlcHRpb24o
ZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIG1fc291cmNlVVJMID0gc2F2ZWRT
b3VyY2VVUkw7Ci0gICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCks
IGNvbXAudmFsdWUoKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwogICAgIH0KIAot
ICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93IHx8IGNvbXAuY29tcGxUeXBlKCkgPT0g
SW50ZXJydXB0ZWQpCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBjb21wLnZhbHVlKCkp
OwotCiAgICAgbV9zb3VyY2VVUkwgPSBzYXZlZFNvdXJjZVVSTDsKLSAgICByZXR1cm4gU2NyaXB0
VmFsdWUoKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZXR1
cm5WYWx1ZSk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlv
bi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC0xMzEsMzEg
KzEzMSwzMCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsCiAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKLSAgICBtX3dvcmtlckNv
bnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBD
b21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBt
X3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCisgICAgSlNWYWx1ZSBldmFs
dWF0aW9uRXhjZXB0aW9uOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlID0gY29tcC5j
b21wbFR5cGUoKTsKKyAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGlt
ZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFs
dWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4o
KSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQo
KSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBpZiAoY29tcGxldGlvblR5
cGUgPT0gVGVybWluYXRlZCB8fCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCku
dGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgeworICAgIGlmICgoZXZhbHVhdGlvbkV4Y2Vw
dGlvbiAmJiBldmFsdWF0aW9uRXhjZXB0aW9uLmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3I6OnNfaW5mbykpIHx8ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCku
dGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgewogICAgICAgICBmb3JiaWRFeGVjdXRpb24o
KTsKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQogCi0gICAgaWYgKGNvbXBs
ZXRpb25UeXBlID09IE5vcm1hbCB8fCBjb21wbGV0aW9uVHlwZSA9PSBSZXR1cm5WYWx1ZSkKLSAg
ICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCptX2dsb2JhbERhdGEsIGNvbXAudmFsdWUoKSk7Ci0K
LSAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gVGhyb3cpIHsKKyAgICBpZiAoZXZhbHVhdGlvbkV4
Y2VwdGlvbikgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgICAgICBpbnQgbGlu
ZU51bWJlciA9IDA7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzb3VyY2VDb2RlLnVybCgp
LnN0cmluZygpOwogICAgICAgICBpZiAobV93b3JrZXJDb250ZXh0LT5zYW5pdGl6ZVNjcmlwdEVy
cm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSkKICAgICAgICAgICAgICpl
eGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCBjb21wLnZh
bHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNjcmlwdFZhbHVlKCptX2dsb2JhbERh
dGEsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIH0KLSAgICByZXR1cm4gU2NyaXB0VmFsdWUo
KTsKKworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCByZXR1cm5WYWx1ZSk7
CisKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24oU2NyaXB0
VmFsdWUgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyNSwy
OCArMzI1LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBK
U1ZhbHVlIHJlc3VsdDsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpT
VmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWlu
KCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CiAgICAg
W3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRD
aGVja2VyLnN0b3AoKTsKLSAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBl
KCk7Ci0gICAgCi0gICAgaWYgKHR5cGUgPT0gTm9ybWFsKSB7Ci0gICAgICAgIHJlc3VsdCA9IGNv
bXBsZXRpb24udmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXN1
bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwotICAgIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBh
ZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVk
KCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIGlk
IHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJl
c3VsdCBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0
OltzZWxmIF9yb290T2JqZWN0XV07CisKKyAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2Jq
ZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXR1cm5WYWx1ZSBvcmlnaW5Sb290T2JqZWN0
OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0OltzZWxmIF9yb290T2JqZWN0XV07
CiAgICAgCiAgICAgX2RpZEV4ZWN1dGUoc2VsZik7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDIwICsyNzQsMTIg
QEAgYm9vbCBfTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTlBPYmplYwogICAgICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3Ry
aW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAgICAgUmVmUHRyPEpTR2xvYmFs
RGF0YT4gZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgCiAgICAgICAg
IGdsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgICAgIENvbXBsZXRpb24g
Y29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4o
KSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgICAgIEpT
VmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29w
ZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOwogICAg
ICAgICBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7Ci0gICAgICAgIENvbXBsVHlw
ZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFs
dWUgcmVzdWx0OwotICAgICAgICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAgICAgICBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChleGVjLCByZXN1bHQsIHZhcmlhbnQpOworICAgICAgICBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7CiAgICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiA5NDcxNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDYsOCArMzA2LDYgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmNhbGwoanN0cmluZyBt
ZXRobwogam9iamVjdCBKYXZhSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcHQpIGNvbnN0CiB7
CiAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpldmFsIHNjcmlwdCA9ICVzIiwg
SmF2YVN0cmluZyhzY3JpcHQpLnV0ZjgoKSk7Ci0gICAgCi0gICAgSlNWYWx1ZSByZXN1bHQ7CiAK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIApAQCAtMzE2LDE4
ICszMTQsMTAgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24g
PSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCks
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3Vy
Y2UoSmF2YVN0cmluZyhzY3JpcHQpLmltcGwoKSksIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4o
KSwgbWFrZVNvdXJjZShKYXZhU3RyaW5nKHNjcmlwdCkuaW1wbCgpKSk7CiAgICAgcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7Ci0g
ICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotICAgIAotICAgIGlm
ICh0eXBlID09IE5vcm1hbCkgewotICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7
Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQo
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAKLSAg
ICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0IChyZXN1bHQpOworCisgICAgcmV0dXJuIGNv
bnZlcnRWYWx1ZVRvSk9iamVjdChyZXN1bHQpOwogfQogCiBqb2JqZWN0IEphdmFKU09iamVjdDo6
Z2V0TWVtYmVyKGpzdHJpbmcgbWVtYmVyTmFtZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDk0NzQyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZW1vdmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUg
bmV2ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6CisKIDIw
MTEtMDktMDcgIEFsZXhlaSBTdml0a2luZSAgPGFzdml0a2luZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWRkIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gdGVzdCBydWJiZXItYmFuZGluZyBvdmVy
aGFuZyBkcmF3aW5nIGFsb25nIHdpdGggbGF5b3V0IHRlc3RzIGZvciBleGlzdGluZyBDaHJvbWl1
bSBNYWMgb3ZlcmhhbmcgZHJhd2luZyBpbiB0aGUgbm9uLWdwdSBwYXRoLgpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJOUFJ1bnRpbWVVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9FcnJvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KQEAgLTE4OCwyMSArMTg5LDkg
QEAgYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZQogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5wT2Jq
ZWN0KTsKIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0
YXJ0KCk7Ci0gICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShleGVjLCBn
bG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShVU3RyaW5nKHNjcmlw
dFN0cmluZy5pbXBsKCkpKSwgdGhpc1ZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0g
SlNDOjpldmFsdWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFr
ZVNvdXJjZShVU3RyaW5nKHNjcmlwdFN0cmluZy5pbXBsKCkpKSwgdGhpc1ZhbHVlKTsKICAgICBn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBD
b21wbFR5cGUgY29tcGxldGlvblR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotCi0gICAg
SlNWYWx1ZSByZXN1bHRWYWx1ZTsKLSAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gTm9ybWFsKSB7
Ci0gICAgICAgIHJlc3VsdFZhbHVlID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlKQotICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwot
ICAgIH0gZWxzZQotICAgICAgICByZXN1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIAogICAgIGNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlh
bnQoZXhlYywgcmVzdWx0VmFsdWUsICpyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0wNyAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgQ29tcGxldGlv
biBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpldmFsdWF0ZSk6CisKIDIwMTEtMDktMDcgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI5NDYyNyBhbmQgcjk0NjMyLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0NvbXBsZXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L1Byb3BlcnR5TmFtZUFycmF5Lmg+CkBAIC04NzUsMTcgKzg3NiwxMCBAQCBib29sIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKIAogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIENvbXBsZXRpb24gY29t
cGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNo
YWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0KSk7Ci0KLSAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7Ci0gICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0
aW9uLmNvbXBsVHlwZSgpOwotCi0gICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgaWYgKHR5cGUgPT0g
Tm9ybWFsKQotICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7CiAgICAgCi0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVD
aGFpbigpLCBtYWtlU291cmNlKHNjcmlwdCkpOworICAgIAorICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUo
ZXhlYywgcmVzdWx0LCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwogICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106747</attachid>
            <date>2011-09-08 09:01:55 -0700</date>
            <delta_ts>2011-09-08 09:14:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67755-20110908090154.patch</filename>
            <type>text/plain</type>
            <size>49734</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNC
YXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1Nj
cmlwdFN5bnRheCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Mb2Fk
KToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAocnVuV2l0aFNjcmlw
dHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjp0b1N0cmluZyk6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcik6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6VGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorCiAyMDExLTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUFBDIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNiBAQAorCisjZW5k
aWYKKyNpZm5kZWYgTkRFQlVHCiBfSlNDaGVja1NjcmlwdFN5bnRheAogX0pTQ2xhc3NDcmVhdGUK
IF9KU0NsYXNzUmVsZWFzZQpAQCAtMTE5LDcgKzEyMiw3IEBAIF9fWk4zSlNDMTFKU0J5dGVBcnJh
eTEzc19kZWZhdWx0SW5mb0UKIF9fWk4zSlNDMTFKU0J5dGVBcnJheTE1Y3JlYXRlU3RydWN0dXJl
RVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOU183SlNWYWx1ZUVQS05T
XzlDbGFzc0luZm9FCiBfX1pOM0pTQzExSlNCeXRlQXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OVN0cnVjdHVyZUVQTjNXVEY5Qnl0ZUFycmF5RQogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0
RXYKLV9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUUKK19fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUVQTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDMTFyZWdFeHBGbGFnc0VSS05TXzdVU3RyaW5nRQogX19aTjNK
U0MxMkRhdGVJbnN0YW5jZTZzX2luZm9FCkBAIC0xMzUsNiArMTM4LDcgQEAgX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRyYWNlRXYK
IF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFTlNfOEhlYXBTaXplRQogX19a
TjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q2c19pbmZvRQpA
QCAtMjE3LDYgKzIyMSw3IEBAIF9fWk4zSlNDMjNBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjRkdW1w
RXYKIF9fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDMjNzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNo
RW50cnlFUE5TXzhKU09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEySlNHbG9iYWxEYXRh
RVBOU18xNEpTR2xvYmFsT2JqZWN0RQorX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjZzX2luZm9FCiBfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yRVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VS
TlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQpAQCAtMzI2LDcgKzMz
MSw3IEBAIF9fWk4zSlNDOEpTT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9w
UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxl
cjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlND
OFByb2ZpbGVyOHByb2ZpbGVyRXYKLV9fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBO
U18xNFNjb3BlQ2hhaW5Ob2RlRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQorX19aTjNK
U0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNv
dXJjZUNvZGVFTlNfN0pTVmFsdWVFUFM3XwogX19aTjNKU0M4aXNab21iaWVFUEtOU182SlNDZWxs
RQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNKU0M5Q29kZUJsb2NrRDJFdgpAQCAtNjE4
LDcgKzYyMywzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpTU3RyaW5nRQog
X2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0
eQotCi0jaWZuZGVmIE5ERUJVRwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnlFdgotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
OTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDEwICsyNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAg
Q29tcGxldGlvbiByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEo
KSwgZmlsZU5hbWUpKTsKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICAKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uo
c2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRh
eChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yNzgsMTEgKzI4MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAg
IHN0b3BXYXRjaC5zdGFydCgpOwotICAgIENvbXBsZXRpb24gcmVzdWx0ID0gY2hlY2tTeW50YXgo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmls
ZU5hbWUpKTsKKworICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOworICAgIGJvb2wgdmFsaWRT
eW50YXggPSBjaGVja1N5bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BX
YXRjaC5zdG9wKCk7CiAKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXZhbGlkU3lu
dGF4KQorICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsK
IH0KIApAQCAtNDM2LDEzICs0NDAsMTQgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xv
YmFsT2JqZWN0KgogCiAgICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGluZygpOwogCi0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3Jp
cHQsIGZpbGVOYW1lKSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24u
Y29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAg
ICBpZiAoZHVtcCkgewotICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgPT0g
VGhyb3cpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0
aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgICAg
ICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIGNvbXBsZXRpb24u
dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBnbG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNDczLDcgKzQ3OCw4
IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobGluZVswXSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KGxp
bmUpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VT
b3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSk7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
bWFrZVNvdXJjZShsaW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICAgICAgZnJlZShsaW5lKTsKICNlbHNlCiAgICAgICAgIHByaW50Zigi
JXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CkBAIC00ODgsMTIgKzQ5NCwxNCBAQCBzdGF0aWMgdm9p
ZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGlmIChsaW5lLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICAg
ICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGxpbmUu
ZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpKTsKKworICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlw
ZSgpID09IFRocm93KQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21w
bGV0aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBw
cmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUg
IkFQSUNhc3QuaCIKICNpbmNsdWRlICJBUElTaGltcy5oIgotI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
ICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KQEAgLTUyLDE3ICs1MSwxOSBAQCBK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgLy8gZXZhbHVhdGUg
c2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAg
ICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+dXN0cmluZygpLCBzb3Vy
Y2VVUkwtPnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBDb21wbGV0aW9uIGNv
bXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwganNUaGlzT2JqZWN0KTsKIAotICAgIGlm
IChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7CisgICAgSlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNv
dXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGNvbXBsZXRpb24udmFsdWUoKSk7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChjb21wbGV0aW9uLnZhbHVlKCkpCi0gICAgICAg
IHJldHVybiB0b1JlZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOwotICAgIAorICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJldHVyblZhbHVlKTsKKwog
ICAgIC8vIGhhcHBlbnMsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBvbmx5IHN0YXRlbWVudCBpcyBh
biBlbXB0eSAoJzsnKSBzdGF0ZW1lbnQKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC03MywxMyArNzQsMTYgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpT
Q29udGV4dFJlZiBjdAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAgICBT
b3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT51c3RyaW5nKCksIHNvdXJjZVVS
TC0+dXN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IGNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBzb3VyY2UpOwotICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7
CisgICAgCisgICAgSlNWYWx1ZSBzeW50YXhFeGNlcHRpb247CisgICAgYm9vbCBpc1ZhbGlkU3lu
dGF4ID0gY2hlY2tTeW50YXgoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksIHNvdXJjZSwgJnN5bnRheEV4Y2VwdGlvbik7CisKKyAgICBpZiAoIWlzVmFsaWRTeW50YXgp
IHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDk0NzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAg
RVhQT1JUUwogICAgID9jaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNB
UEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVkpTVmFsdWVAMkBAWgogICAgID9jaGVja0N1
cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkV4ZWNTdGF0ZUAyQEBa
CiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BAQ0FYUEFW
SlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/Y2hlY2tTeW50YXhASlNDQEBZQT9BVkNvbXBsZXRpb25A
MUBQQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdU
RkBAUUFFWEFBVj8kVmVjdG9yQEUkMEJBQEAyQEBaCiAgICAgP2NsYXNzTmFtZUBKU09iamVjdEBK
U0NAQFVCRT9BVlVTdHJpbmdAMkBYWgogICAgID9jbGVhckBTb3VyY2VQcm92aWRlckNhY2hlQEpT
Q0BAUUFFWFhaCkBAIC0xNjAsNyArMTU5LDYgQEAgRVhQT1JUUwogICAgID9lcXVhbEBJZGVudGlm
aWVyQEpTQ0BAU0FfTlBCVlN0cmluZ0ltcGxAV1RGQEBQQkRAWgogICAgID9lcXVhbFVURjE2V2l0
aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgogICAgID9ldmFsdWF0ZUBEZWJ1Z2dl
ckNhbGxGcmFtZUBKU0NAQFFCRT9BVkpTVmFsdWVAMkBBQlZVU3RyaW5nQDJAQUFWMzJAQFoKLSAg
ICA/ZXZhbHVhdGVASlNDQEBZQT9BVkNvbXBsZXRpb25AMUBQQVZFeGVjU3RhdGVAMUBQQVZTY29w
ZUNoYWluTm9kZUAxQEFCVlNvdXJjZUNvZGVAMUBWSlNWYWx1ZUAxQEBaCiAgICAgP2V4Y2x1ZGVA
UHJvZmlsZUBKU0NAQFFBRVhQQlZQcm9maWxlTm9kZUAyQEBaCiAgICAgP2Zhc3RDYWxsb2NAV1RG
QEBZQVBBWElJQFoKICAgICA/ZmFzdEZyZWVAV1RGQEBZQVhQQVhAWgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwOCw4ICs3MDgsNyBAQCBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgICAgICAgICBhZGRFcnJvckluZm8oY2FsbEZy
YW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlKCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRpb24t
PmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgaXNJbnRlcnJ1cHQgPSBleGNlcHRpb25UeXBlID09
IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZDsKKyAgICAgICAgaXNJ
bnRlcnJ1cHQgPSAoZXhjZXB0aW9uLT5pbmhlcml0cygmSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
cjo6c19pbmZvKSB8fCBleGNlcHRpb24tPmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OnNfaW5mbykpOwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxs
RnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDk0NzE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDQ3ICszNCw1OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQ29tcGxl
dGlvbiBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSkKK2Jvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9jayBsb2NrKGV4
ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0
ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4
ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJj
ZSk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y2hlY2tTeW50YXgoZXhlYyk7Ci0g
ICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXJyb3IpOwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisgICAgICAg
ICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUNvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSkKK0pTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBp
ZiAoIXByb2dyYW0pIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uOwotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0g
SlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbiA9IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CisgICAgICAgICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgKnJldHVy
bmVkRXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGlmICghdGhpc1ZhbHVl
IHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICB0aGlzVmFsdWUgPSBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlz
VmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwotCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5p
bnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW0sIGV4ZWMsIHNjb3BlQ2hhaW4sIHRoaXNPYmop
OwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGNlcHRpb247
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICB9CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBUaHJvdzsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbi5pc09iamVjdCgpKQotICAgICAgICAgICAgZXhjZXB0aW9uVHlw
ZSA9IGFzT2JqZWN0KGV4Y2VwdGlvbiktPmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgcmV0dXJu
IENvbXBsZXRpb24oZXhjZXB0aW9uVHlwZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgcmVzdWx0
KTsKKworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMyICszMSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7
CiAKLSAgICBlbnVtIENvbXBsVHlwZSB7IE5vcm1hbCwgQnJlYWssIENvbnRpbnVlLCBSZXR1cm5W
YWx1ZSwgVGhyb3csIEludGVycnVwdGVkLCBUZXJtaW5hdGVkIH07Ci0KLSAgICAvKgotICAgICAq
IENvbXBsZXRpb24gb2JqZWN0cyBhcmUgdXNlZCB0byBjb252ZXkgdGhlIHJldHVybiBzdGF0dXMg
YW5kIHZhbHVlCi0gICAgICogZnJvbSBmdW5jdGlvbnMuCi0gICAgICovCi0gICAgY2xhc3MgQ29t
cGxldGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBl
ID0gTm9ybWFsLCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQotICAgICAgICAgICAgOiBtX3R5
cGUodHlwZSkKLSAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQot
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgdikgeyBtX3ZhbHVlID0gdjsgfQotICAgICAg
ICBib29sIGlzVmFsdWVDb21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgQ29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNWYWx1ZSBt
X3ZhbHVlOwotICAgIH07Ci0KLSAgICBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSos
IGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0g
SlNWYWx1ZSgpKTsKKyAgICBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhp
c1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw1NCArNDEsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEludGVycnVwdGVkRXhl
Y3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgotICAgIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAg
ICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIHN0YXRpYyBJbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsK
LSAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFsbG9jYXRl
Q2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwotICAgICAgICBlcnJvci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Citjb25zdCBD
bGFzc0luZm8gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvID0geyAiSW50ZXJydXB0
ZWRFeGVjdXRpb25FcnJvciIsIDAsIDAsIDAgfTsKIAotICAgIHZpcnR1YWwgQ29tcGxUeXBlIGV4
Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQorVVN0cmluZyBJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAoreworICAg
IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOworfQogCi0g
ICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuICJK
YXZhU2NyaXB0IGV4ZWN1dGlvbiBleGNlZWRlZCB0aW1lb3V0LiI7IH0KLX07Citjb25zdCBDbGFz
c0luZm8gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8gPSB7ICJUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IiLCAwLCAwLCAwIH07CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitVU3RyaW5nIFRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvcjo6dG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKKyAg
ICByZXR1cm4gIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIjsKIH0KIAotY2xhc3Mg
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHJp
dmF0ZToKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS50
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgewotICAgIH0KLQot
cHVibGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgc3RhdGlj
IFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKLSAgICB7Ci0gICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcg
KGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkp
IFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKLSAgICAgICAgZXJyb3ItPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRl
cm1pbmF0ZWQ7IH0KIAotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdCB7IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iOyB9Ci19Owor
SlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6
Y3JlYXRlKCpnbG9iYWxEYXRhKTsKK30KIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNp
b24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDM0ICsyOSw3OSBAQAogI2lmbmRlZiBFeGNlcHRp
b25IZWxwZXJzX2gKICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKLSNpbmNsdWRlICJKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBDb2RlQmxvY2s7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIElkZW50aWZp
ZXI7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owot
ICAgIGNsYXNzIEpTTm90QW5PYmplY3RFcnJvclN0dWI7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0g
ICAgY2xhc3MgTm9kZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0gICAgCi0gICAgSlNPYmpl
Y3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOwot
ICAgIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFs
RGF0YSopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRl
Kik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0dsb2JhbE9iamVj
dCopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVy
cm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFy
YW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSk7Ci0gICAgSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAg
IEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsK
LSAgICBKU09iamVjdCogY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChFeGVj
U3RhdGUqLCBjb25zdCBVU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVj
dXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKK0pTT2JqZWN0KiBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7CitKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7CitKU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihKU0dsb2JhbE9iamVjdCopOworSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOworSlNPYmplY3QqIGNyZWF0ZU5vdEFu
T2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CitKU09iamVjdCogY3JlYXRlSW52YWxp
ZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgY2hhciogb3AsIEpTVmFsdWUpOworSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNP
YmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNP
YmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiwg
Y29uc3QgVVN0cmluZyYpOworCitKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNT
dGF0ZSopOworSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOwor
CisKK2NsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7Citwcml2YXRlOgorICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAg
IHN0YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJy
b3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxE
YXRhLmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAg
ICBlcnJvci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJv
cjsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KKworICAg
IHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFz
cyBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
cml2YXRlOgorICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgIHsKKyAgICAgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5ldyAoYWxs
b2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBlcnJvci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBB
bm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KIAotICAgIEpTT2JqZWN0KiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAgSlNPYmplY3QqIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw4ICsyMTYsOCBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRp
b25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0g
ICAgaW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm9uRmlu
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB0ZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vbkZpbmFsT2JqZWN0
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW50ZXJydXB0ZWRF
eGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB0ZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdGF0aWNTY29w
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw2IEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgog
I2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29tcGxldGlvbi5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5U2xvdC5oIgpAQCAtMjE5LDggKzIxOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUtPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxl
KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlzRXh0ZW5zaWJsZSgpOyB9CiAKLSAgICAgICAgdmly
dHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRocm93OyB9Ci0K
ICAgICAgICAgdm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShzaXplX3Qgb2xkU2l6ZSwgc2l6
ZV90IG5ld1NpemUpOwogICAgICAgICBib29sIGlzVXNpbmdJbmxpbmVTdG9yYWdlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fcHJvcGVydHlTdG9yYWdlKSA9PSBz
dGF0aWNfY2FzdDxjb25zdCB2b2lkKj4odGhpcyArIDEpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDktMDcgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIENvbXBsZXRpb24g
b2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1
bjo6RXZhbHVhdGUpOgorICAgICAgICAoSlNSdW46OkNoZWNrU3ludGF4KToKKyAgICAgICAgKiBK
U1J1bi5oOgorICAgICAgICAqIEphdmFTY3JpcHRHbHVlLmNwcDoKKyAgICAgICAgKEpTUnVuRXZh
bHVhdGUpOgorCiAyMDExLTA5LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5
NDYzMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMiAr
NjcsMTIgQEAgSlNHbG9iYWxPYmplY3QqIEpTUnVuOjpHbG9iYWxPYmplY3QoKSBjbwogICAgIHJl
dHVybiBmR2xvYmFsT2JqZWN0LmdldCgpOwogfQogCi1Db21wbGV0aW9uIEpTUnVuOjpFdmFsdWF0
ZSgpCitKU1ZhbHVlIEpTUnVuOjpFdmFsdWF0ZShKU1ZhbHVlKiBleHBjZXB0aW9uKQogewotICAg
IHJldHVybiBKU0M6OmV2YWx1YXRlKGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZkdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsKKyAgICBy
ZXR1cm4gSlNDOjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZHbG9iYWxP
YmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291cmNlKSwgSlNWYWx1ZSgp
LCBleHBjZXB0aW9uKTsKIH0KIAogYm9vbCBKU1J1bjo6Q2hlY2tTeW50YXgoKQogewotICAgIHJl
dHVybiBKU0M6OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNv
dXJjZShmU291cmNlKSkuY29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgcmV0dXJuIEpTQzo6Y2hl
Y2tTeW50YXgoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKGZTb3VyY2Up
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IGNsYXNzIEpTUnVuIDogcHVibGljIEpTQmFzZSB7CiAKICAgICAgICAgVVN0cmluZyBHZXRTb3Vy
Y2UoKSBjb25zdDsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIEdsb2JhbE9iamVjdCgpIGNvbnN0
OwotICAgICAgICBDb21wbGV0aW9uIEV2YWx1YXRlKCk7CisgICAgICAgIEpTVmFsdWUgRXZhbHVh
dGUoSlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAgYm9vbCBDaGVja1N5bnRheCgpOwogICAg
ICAgICBKU0ZsYWdzIEZsYWdzKCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9KYXZhU2NyaXB0R2x1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTIsMTQgKzI5MiwxNCBAQCBKU09iamVjdFJlZiBKU1J1bkV2YWx1YXRlKEpTUnVuUmVmIHJlZikK
ICAgICBpZiAocHRyKQogICAgIHsKICAgICAgICAgSlNHbHVlQVBJRW50cnkgZW50cnk7Ci0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IHB0ci0+RXZhbHVhdGUoKTsKLSAgICAgICAgaWYg
KGNvbXBsZXRpb24uaXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChjb21wbGV0aW9uLnZhbHVl
KCksIHB0ci0+R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBUaHJvdykKKyAgICAgICAgCisgICAg
ICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5W
YWx1ZSA9IHB0ci0+RXZhbHVhdGUoJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICAKKyAg
ICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IChKU09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QoZXZhbHVhdGlvbkV4Y2VwdGlv
biwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgSlNGbGFncyBmbGFncyA9IHB0ci0+RmxhZ3MoKTsKICAgICAgICAgICAgIGlmIChm
bGFncyAmIGtKU0ZsYWdEZWJ1ZykKICAgICAgICAgICAgIHsKQEAgLTMxMSw2ICszMTEsMTAgQEAg
SlNPYmplY3RSZWYgSlNSdW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChyZXR1cm5W
YWx1ZSwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MSBAQAorMjAxMS0wOS0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtl
ZCBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6
ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5j
cHA6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9q
c29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisKIDIwMTEtMDktMDcg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDY3NCBhbmQgcjk0Njg5LgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA5NDcxNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJYUGF0aEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNGdW5jdGlvbi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTcwLDcgKzE3MSw3IEBA
IGRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCByZXBvcnRF
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikKIHsKLSAgICBpZiAo
ZXhjZXB0aW9uLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+ZXhjZXB0aW9uVHlw
ZSgpID09IFRlcm1pbmF0ZWQpCisgICAgaWYgKGV4Y2VwdGlvbi5pbmhlcml0cygmVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICBVU3RyaW5n
IGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gOTQ3
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5o
IgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KIApAQCAtMTMzLDcgKzEzNCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHQKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBpZiAoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGJvb2wgdGVybWlu
YXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNl
cHRpb24oKS5pc09iamVjdCgpICYmIGFzT2JqZWN0KGV4ZWMtPmV4Y2VwdGlvbigpKS0+ZXhjZXB0
aW9uVHlwZSgpID09IFRlcm1pbmF0ZWQpOworICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1
c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigp
LmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpOwogICAgICAgICAg
ICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgZ2xvYmFsRGF0YS50ZXJtaW5hdG9y
LnNob3VsZFRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlv
bigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Ny
aXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgbG9uZyBpZCkKIHsK
LSAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0cmluZ1RvVVN0cmluZyhz
b3VyY2UpKTsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAg
U291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNl
KSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAg
ICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xvYmFsVGhpc1ZhbHVl
KCk7Ci0gICAgQ29tcGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0
ZShzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNv
ZGUsIGdsb2JhbFRoaXNWYWx1ZSk7Ci0gICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgIT0gSlNDOjpO
b3JtYWwgJiYgY29tcC5jb21wbFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKQorCisgICAgSlNW
YWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgZXZhbHVhdGlvblJldHVyblZh
bHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShzY3JpcHRTdGF0ZSwgZ2xvYmFs
T2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwg
JmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAg
ICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0g
Y29tcC52YWx1ZSgpOworCisgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGlvblJl
dHVyblZhbHVlOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb25WYWx1ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBKU01haW5UaHJlYWRFeGVjU3RhdGVfaAogCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9Db21wbGV0aW9uLmg+
CiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjZW5kaWYKQEAg
LTUxLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAg
ICB9OwogCi0gICAgc3RhdGljIEpTQzo6Q29tcGxldGlvbiBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29k
ZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFpbk5vZGUqIGNo
YWluLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRF
eGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0
ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUpOworICAgICAgICByZXR1cm4gSlNDOjpl
dmFsdWF0ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CiAgICAg
fTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwy
MiArMTM4LDIyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW4KIAog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJj
ZUNvZGUuc3RhcnRMaW5lKCkpOwogCisgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwor
CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgQ29t
cGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNTb3VyY2VDb2Rl
LCBzaGVsbCk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29w
ZUNoYWluKCksIGpzU291cmNlQ29kZSwgc2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdChjb29raWUpOwogCi0gICAgaWYg
KGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJu
VmFsdWUpIHsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgeworICAgICAgICByZXBvcnRF
eGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIG1fc291cmNlVVJM
ID0gc2F2ZWRTb3VyY2VVUkw7Ci0gICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIGNvbXAudmFsdWUoKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwog
ICAgIH0KIAotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93IHx8IGNvbXAuY29tcGxU
eXBlKCkgPT0gSW50ZXJydXB0ZWQpCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBjb21w
LnZhbHVlKCkpOwotCiAgICAgbV9zb3VyY2VVUkwgPSBzYXZlZFNvdXJjZVVSTDsKLSAgICByZXR1
cm4gU2NyaXB0VmFsdWUoKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCByZXR1cm5WYWx1ZSk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2
YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNp
bmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
Q29tcGxldGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBA
IC0xMzEsMzEgKzEzMSwzMCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpl
dmFsCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKLSAgICBt
X3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQo
KTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLmpzU291cmNl
Q29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICBtX3dvcmtlckNvbnRl
eHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCisgICAgSlNW
YWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBl
ID0gY29tcC5jb21wbFR5cGUoKTsKKyAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxE
YXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNj
b3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci5nZXQoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIG1fd29ya2VyQ29udGV4dFdy
YXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBpZiAoY29t
cGxldGlvblR5cGUgPT0gVGVybWluYXRlZCB8fCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9i
YWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgeworICAgIGlmICgoZXZhbHVh
dGlvbkV4Y2VwdGlvbiAmJiBldmFsdWF0aW9uRXhjZXB0aW9uLmluaGVyaXRzKCZUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpIHx8ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9i
YWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgewogICAgICAgICBmb3JiaWRF
eGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQogCi0gICAg
aWYgKGNvbXBsZXRpb25UeXBlID09IE5vcm1hbCB8fCBjb21wbGV0aW9uVHlwZSA9PSBSZXR1cm5W
YWx1ZSkKLSAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCptX2dsb2JhbERhdGEsIGNvbXAudmFs
dWUoKSk7Ci0KLSAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gVGhyb3cpIHsKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgICAg
ICBpbnQgbGluZU51bWJlciA9IDA7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzb3VyY2VD
b2RlLnVybCgpLnN0cmluZygpOwogICAgICAgICBpZiAobV93b3JrZXJDb250ZXh0LT5zYW5pdGl6
ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSkKICAgICAg
ICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRh
LCBjb21wLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNjcmlwdFZhbHVlKCpt
X2dsb2JhbERhdGEsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIH0KLSAgICByZXR1cm4gU2Ny
aXB0VmFsdWUoKTsKKworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCByZXR1
cm5WYWx1ZSk7CisKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRp
b24oU2NyaXB0VmFsdWUgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMyNSwyOCArMzI1LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAq
KXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7
CiAKLSAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkp
LCBKU0M6OkpTVmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVh
ZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlND
OjpKU1ZhbHVlKCksIDApOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7Ci0gICAgQ29tcGxUeXBlIHR5cGUg
PSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotICAgIAotICAgIGlmICh0eXBlID09IE5vcm1hbCkg
ewotICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVz
dWx0KQotICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAg
ICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotICAgIH0KLSAgICAKLSAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252
ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2lu
Um9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOworCisgICAgaWQgcmVz
dWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmV0dXJu
VmFsdWUgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVj
dDpbc2VsZiBfcm9vdE9iamVjdF1dOwogICAgIAogICAgIF9kaWRFeGVjdXRlKHNlbGYpOwogICAg
IApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiA5NDcx
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCwyMCArMjc0LDEyIEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAgaW5zdGFuY2Us
IE5QT2JqZWMKICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZlcnROUFN0cmluZ1RvVVRGMTYocyk7CiAg
ICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgICAgIAogICAgICAgICBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpK
U1ZhbHVlKCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyks
IEpTQzo6SlNWYWx1ZSgpKTsKICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3Rv
cCgpOwotICAgICAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBlKCk7Ci0g
ICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9y
bWFsKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAK
LSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0LCB2YXJpYW50KTsK
KyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlh
bnQpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2LDggKzMwNiw2IEBAIGpvYmplY3QgSmF2YUpT
T2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpz
dHJpbmcgc2NyaXB0KSBjb25zdAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFKU09iamVj
dDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkpOwotICAgIAot
ICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICAKQEAgLTMxNiwxOCArMzE0LDEwIEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpl
dmFsKGpzdHJpbmcgc2NyaXAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAg
Q29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
U2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2NyaXB0KS5pbXBsKCkpLCBKU0M6
OkpTVmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmlt
cGwoKSkpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGlt
ZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21w
bFR5cGUoKTsKLSAgICAKLSAgICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKLSAgICAgICAgcmVzdWx0
ID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGpz
VW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdCAocmVz
dWx0KTsKKworICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KIAog
am9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIG1lbWJlck5hbWUpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDc0MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBDb21wbGV0aW9uIG9i
amVjdCBmcm9tIEpTQywgSSBoYXZlIG5ldmVyIGxpa2VkIGl0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVj
dE1hcDo6ZXZhbHVhdGUpOgorCiAyMDExLTA5LTA3ICBBbGV4ZWkgU3ZpdGtpbmUgIDxhc3ZpdGtp
bmVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCB0ZXN0IGluZnJhc3RydWN0dXJlIHRvIHRl
c3QgcnViYmVyLWJhbmRpbmcgb3ZlcmhhbmcgZHJhd2luZyBhbG9uZyB3aXRoIGxheW91dCB0ZXN0
cyBmb3IgZXhpc3RpbmcgQ2hyb21pdW0gTWFjIG92ZXJoYW5nIGRyYXdpbmcgaW4gdGhlIG5vbi1n
cHUgcGF0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0
aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VDb2Rl
Lmg+CkBAIC0xODgsMjEgKzE4OSw5IEBAIGJvb2wgTlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0
ZShOUE9iamUKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmplY3QoZ2xv
YmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9
IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UoVVN0cmluZyhzY3JpcHRTdHJpbmcuaW1wbCgpKSksIHRoaXNWYWx1ZSk7CisgICAg
SlNWYWx1ZSByZXN1bHRWYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoVVN0cmluZyhzY3JpcHRTdHJpbmcuaW1wbCgp
KSksIHRoaXNWYWx1ZSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENo
ZWNrZXIuc3RvcCgpOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlID0gY29tcGxldGlv
bi5jb21wbFR5cGUoKTsKLQotICAgIEpTVmFsdWUgcmVzdWx0VmFsdWU7Ci0gICAgaWYgKGNvbXBs
ZXRpb25UeXBlID09IE5vcm1hbCkgewotICAgICAgICByZXN1bHRWYWx1ZSA9IGNvbXBsZXRpb24u
dmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdFZh
bHVlID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwotCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAKICAgICBj
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFZhbHVlLCAqcmVzdWx0KTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzQyKQor
KysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBSZW1vdmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlr
ZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorCiAyMDExLTA5
LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5NDYzMi4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFs
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9FcnJvci5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgpAQCAtODc1LDE3ICs4
NzYsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAKICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdCkpOwotCi0gICAg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENv
bXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKLQotICAgIEpTVmFsdWUgcmVz
dWx0OwotICAgIGlmICh0eXBlID09IE5vcm1hbCkKLSAgICAgICAgcmVzdWx0ID0gY29tcGxldGlv
bi52YWx1ZSgpOwogICAgIAotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBqc1Vu
ZGVmaW5lZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBnbG9i
YWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHQpKTsKKyAgICAK
KyAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAg
ICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSwxNiArNzg5LDE0IEBAIFFW
YXJpYW50IFFXZWJFbGVtZW50OjpldmFsdWF0ZUphdmFTY3JpcHQKICNpZiBVU0UoSlNDKQogICAg
IEpTQzo6U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBzdGF0ZS0+ZHluYW1pY0dsb2JhbE9i
amVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCk7CiAgICAgSlNDOjpVU3RyaW5nIHNjcmlwdChyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhcio+KHNjcmlwdFNvdXJjZS5kYXRhKCkpLCBzY3Jp
cHRTb3VyY2UubGVuZ3RoKCkpOwotICAgIEpTQzo6Q29tcGxldGlvbiBjb21wbGV0aW9uID0gSlND
OjpldmFsdWF0ZShzdGF0ZSwgc2NvcGVDaGFpbiwgSlNDOjptYWtlU291cmNlKHNjcmlwdCksIHRo
aXNWYWx1ZSk7Ci0gICAgaWYgKChjb21wbGV0aW9uLmNvbXBsVHlwZSgpICE9IEpTQzo6UmV0dXJu
VmFsdWUpICYmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpICE9IEpTQzo6Tm9ybWFsKSkKLSAgICAg
ICAgcmV0dXJuIFFWYXJpYW50KCk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gY29tcGxl
dGlvbi52YWx1ZSgpOwotICAgIGlmICghcmVzdWx0KQorICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0aW9uUmVzdWx0ID0gSlNDOjpl
dmFsdWF0ZShzdGF0ZSwgc2NvcGVDaGFpbiwgSlNDOjptYWtlU291cmNlKHNjcmlwdCksIHRoaXNW
YWx1ZSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9u
KQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAogICAgIGludCBkaXN0YW5jZSA9IDA7Ci0g
ICAgcmV0dXJuIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoc3RhdGUsIHJl
c3VsdCwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOworICAgIHJldHVybiBKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KHN0YXRlLCBldmFsdWF0aW9uUmVzdWx0LCBRTWV0
YVR5cGU6OlZvaWQsICZkaXN0YW5jZSk7CiAjZWxpZiBVU0UoVjgpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gUVZhcmlhbnQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106748</attachid>
            <date>2011-09-08 09:14:54 -0700</date>
            <delta_ts>2011-09-08 10:43:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67755-20110908091453.patch</filename>
            <type>text/plain</type>
            <size>49927</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNC
YXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1Nj
cmlwdFN5bnRheCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Mb2Fk
KToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAocnVuV2l0aFNjcmlw
dHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjp0b1N0cmluZyk6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcik6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6VGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorCiAyMDExLTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUFBDIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNiBAQAorCisjZW5k
aWYKKyNpZm5kZWYgTkRFQlVHCiBfSlNDaGVja1NjcmlwdFN5bnRheAogX0pTQ2xhc3NDcmVhdGUK
IF9KU0NsYXNzUmVsZWFzZQpAQCAtMTE5LDcgKzEyMiw3IEBAIF9fWk4zSlNDMTFKU0J5dGVBcnJh
eTEzc19kZWZhdWx0SW5mb0UKIF9fWk4zSlNDMTFKU0J5dGVBcnJheTE1Y3JlYXRlU3RydWN0dXJl
RVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOU183SlNWYWx1ZUVQS05T
XzlDbGFzc0luZm9FCiBfX1pOM0pTQzExSlNCeXRlQXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OVN0cnVjdHVyZUVQTjNXVEY5Qnl0ZUFycmF5RQogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0
RXYKLV9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUUKK19fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUVQTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDMTFyZWdFeHBGbGFnc0VSS05TXzdVU3RyaW5nRQogX19aTjNK
U0MxMkRhdGVJbnN0YW5jZTZzX2luZm9FCkBAIC0xMzUsNiArMTM4LDcgQEAgX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRyYWNlRXYK
IF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFTlNfOEhlYXBTaXplRQogX19a
TjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q2c19pbmZvRQpA
QCAtMjE3LDYgKzIyMSw3IEBAIF9fWk4zSlNDMjNBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjRkdW1w
RXYKIF9fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDMjNzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNo
RW50cnlFUE5TXzhKU09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEySlNHbG9iYWxEYXRh
RVBOU18xNEpTR2xvYmFsT2JqZWN0RQorX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjZzX2luZm9FCiBfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yRVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VS
TlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQpAQCAtMzI2LDcgKzMz
MSw3IEBAIF9fWk4zSlNDOEpTT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9w
UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxl
cjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlND
OFByb2ZpbGVyOHByb2ZpbGVyRXYKLV9fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBO
U18xNFNjb3BlQ2hhaW5Ob2RlRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQorX19aTjNK
U0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNv
dXJjZUNvZGVFTlNfN0pTVmFsdWVFUFM3XwogX19aTjNKU0M4aXNab21iaWVFUEtOU182SlNDZWxs
RQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNKU0M5Q29kZUJsb2NrRDJFdgpAQCAtNjE4
LDcgKzYyMywzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpTU3RyaW5nRQog
X2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0
eQotCi0jaWZuZGVmIE5ERUJVRwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnlFdgotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
OTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDEwICsyNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAg
Q29tcGxldGlvbiByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEo
KSwgZmlsZU5hbWUpKTsKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICAKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uo
c2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRh
eChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yNzgsMTEgKzI4MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAg
IHN0b3BXYXRjaC5zdGFydCgpOwotICAgIENvbXBsZXRpb24gcmVzdWx0ID0gY2hlY2tTeW50YXgo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmls
ZU5hbWUpKTsKKworICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOworICAgIGJvb2wgdmFsaWRT
eW50YXggPSBjaGVja1N5bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BX
YXRjaC5zdG9wKCk7CiAKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXZhbGlkU3lu
dGF4KQorICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsK
IH0KIApAQCAtNDM2LDEzICs0NDAsMTQgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xv
YmFsT2JqZWN0KgogCiAgICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGluZygpOwogCi0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3Jp
cHQsIGZpbGVOYW1lKSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24u
Y29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAg
ICBpZiAoZHVtcCkgewotICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgPT0g
VGhyb3cpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0
aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgICAg
ICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIGNvbXBsZXRpb24u
dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBnbG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNDczLDcgKzQ3OCw4
IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobGluZVswXSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KGxp
bmUpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VT
b3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSk7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
bWFrZVNvdXJjZShsaW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICAgICAgZnJlZShsaW5lKTsKICNlbHNlCiAgICAgICAgIHByaW50Zigi
JXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CkBAIC00ODgsMTIgKzQ5NCwxNCBAQCBzdGF0aWMgdm9p
ZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGlmIChsaW5lLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICAg
ICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGxpbmUu
ZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpKTsKKworICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlw
ZSgpID09IFRocm93KQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21w
bGV0aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBw
cmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUg
IkFQSUNhc3QuaCIKICNpbmNsdWRlICJBUElTaGltcy5oIgotI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
ICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KQEAgLTUyLDE3ICs1MSwxOSBAQCBK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgLy8gZXZhbHVhdGUg
c2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAg
ICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+dXN0cmluZygpLCBzb3Vy
Y2VVUkwtPnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBDb21wbGV0aW9uIGNv
bXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwganNUaGlzT2JqZWN0KTsKIAotICAgIGlm
IChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7CisgICAgSlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNv
dXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGNvbXBsZXRpb24udmFsdWUoKSk7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChjb21wbGV0aW9uLnZhbHVlKCkpCi0gICAgICAg
IHJldHVybiB0b1JlZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOwotICAgIAorICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJldHVyblZhbHVlKTsKKwog
ICAgIC8vIGhhcHBlbnMsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBvbmx5IHN0YXRlbWVudCBpcyBh
biBlbXB0eSAoJzsnKSBzdGF0ZW1lbnQKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC03MywxMyArNzQsMTYgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpT
Q29udGV4dFJlZiBjdAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAgICBT
b3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT51c3RyaW5nKCksIHNvdXJjZVVS
TC0+dXN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IGNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBzb3VyY2UpOwotICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7
CisgICAgCisgICAgSlNWYWx1ZSBzeW50YXhFeGNlcHRpb247CisgICAgYm9vbCBpc1ZhbGlkU3lu
dGF4ID0gY2hlY2tTeW50YXgoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksIHNvdXJjZSwgJnN5bnRheEV4Y2VwdGlvbik7CisKKyAgICBpZiAoIWlzVmFsaWRTeW50YXgp
IHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDk0NzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAg
RVhQT1JUUwogICAgID9jaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFNB
UEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVkpTVmFsdWVAMkBAWgogICAgID9jaGVja0N1
cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkV4ZWNTdGF0ZUAyQEBa
CiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BAQ0FYUEFW
SlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/Y2hlY2tTeW50YXhASlNDQEBZQT9BVkNvbXBsZXRpb25A
MUBQQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAQFoKICAgICA/Y2hlY2tzdW1ATUQ1QFdU
RkBAUUFFWEFBVj8kVmVjdG9yQEUkMEJBQEAyQEBaCiAgICAgP2NsYXNzTmFtZUBKU09iamVjdEBK
U0NAQFVCRT9BVlVTdHJpbmdAMkBYWgogICAgID9jbGVhckBTb3VyY2VQcm92aWRlckNhY2hlQEpT
Q0BAUUFFWFhaCkBAIC0xNjAsNyArMTU5LDYgQEAgRVhQT1JUUwogICAgID9lcXVhbEBJZGVudGlm
aWVyQEpTQ0BAU0FfTlBCVlN0cmluZ0ltcGxAV1RGQEBQQkRAWgogICAgID9lcXVhbFVURjE2V2l0
aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgogICAgID9ldmFsdWF0ZUBEZWJ1Z2dl
ckNhbGxGcmFtZUBKU0NAQFFCRT9BVkpTVmFsdWVAMkBBQlZVU3RyaW5nQDJAQUFWMzJAQFoKLSAg
ICA/ZXZhbHVhdGVASlNDQEBZQT9BVkNvbXBsZXRpb25AMUBQQVZFeGVjU3RhdGVAMUBQQVZTY29w
ZUNoYWluTm9kZUAxQEFCVlNvdXJjZUNvZGVAMUBWSlNWYWx1ZUAxQEBaCiAgICAgP2V4Y2x1ZGVA
UHJvZmlsZUBKU0NAQFFBRVhQQlZQcm9maWxlTm9kZUAyQEBaCiAgICAgP2Zhc3RDYWxsb2NAV1RG
QEBZQVBBWElJQFoKICAgICA/ZmFzdEZyZWVAV1RGQEBZQVhQQVhAWgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwOCw4ICs3MDgsNyBAQCBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgICAgICAgICBhZGRFcnJvckluZm8oY2FsbEZy
YW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlKCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRpb24t
PmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgaXNJbnRlcnJ1cHQgPSBleGNlcHRpb25UeXBlID09
IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZDsKKyAgICAgICAgaXNJ
bnRlcnJ1cHQgPSAoZXhjZXB0aW9uLT5pbmhlcml0cygmSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
cjo6c19pbmZvKSB8fCBleGNlcHRpb24tPmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OnNfaW5mbykpOwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxs
RnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDk0NzE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDQ3ICszNCw1OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQ29tcGxl
dGlvbiBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSkKK2Jvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9jayBsb2NrKGV4
ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0
ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4
ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJj
ZSk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y2hlY2tTeW50YXgoZXhlYyk7Ci0g
ICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXJyb3IpOwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisgICAgICAg
ICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUNvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSkKK0pTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNW
YWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBp
ZiAoIXByb2dyYW0pIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uOwotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0g
SlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbiA9IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CisgICAgICAgICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgKnJldHVy
bmVkRXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGlmICghdGhpc1ZhbHVl
IHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICB0aGlzVmFsdWUgPSBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlz
VmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwotCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5p
bnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW0sIGV4ZWMsIHNjb3BlQ2hhaW4sIHRoaXNPYmop
OwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGNlcHRpb247
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICB9CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBUaHJvdzsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbi5pc09iamVjdCgpKQotICAgICAgICAgICAgZXhjZXB0aW9uVHlw
ZSA9IGFzT2JqZWN0KGV4Y2VwdGlvbiktPmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgcmV0dXJu
IENvbXBsZXRpb24oZXhjZXB0aW9uVHlwZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgcmVzdWx0
KTsKKworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMyICszMSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7
CiAKLSAgICBlbnVtIENvbXBsVHlwZSB7IE5vcm1hbCwgQnJlYWssIENvbnRpbnVlLCBSZXR1cm5W
YWx1ZSwgVGhyb3csIEludGVycnVwdGVkLCBUZXJtaW5hdGVkIH07Ci0KLSAgICAvKgotICAgICAq
IENvbXBsZXRpb24gb2JqZWN0cyBhcmUgdXNlZCB0byBjb252ZXkgdGhlIHJldHVybiBzdGF0dXMg
YW5kIHZhbHVlCi0gICAgICogZnJvbSBmdW5jdGlvbnMuCi0gICAgICovCi0gICAgY2xhc3MgQ29t
cGxldGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBl
ID0gTm9ybWFsLCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQotICAgICAgICAgICAgOiBtX3R5
cGUodHlwZSkKLSAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQot
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgdikgeyBtX3ZhbHVlID0gdjsgfQotICAgICAg
ICBib29sIGlzVmFsdWVDb21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgQ29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNWYWx1ZSBt
X3ZhbHVlOwotICAgIH07Ci0KLSAgICBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSos
IGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0g
SlNWYWx1ZSgpKTsKKyAgICBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhp
c1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw1NCArNDEsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEludGVycnVwdGVkRXhl
Y3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgotICAgIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAg
ICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIHN0YXRpYyBJbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsK
LSAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFsbG9jYXRl
Q2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwotICAgICAgICBlcnJvci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Citjb25zdCBD
bGFzc0luZm8gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvID0geyAiSW50ZXJydXB0
ZWRFeGVjdXRpb25FcnJvciIsIDAsIDAsIDAgfTsKIAotICAgIHZpcnR1YWwgQ29tcGxUeXBlIGV4
Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQorVVN0cmluZyBJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAoreworICAg
IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOworfQogCi0g
ICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuICJK
YXZhU2NyaXB0IGV4ZWN1dGlvbiBleGNlZWRlZCB0aW1lb3V0LiI7IH0KLX07Citjb25zdCBDbGFz
c0luZm8gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8gPSB7ICJUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IiLCAwLCAwLCAwIH07CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitVU3RyaW5nIFRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvcjo6dG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKKyAg
ICByZXR1cm4gIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIjsKIH0KIAotY2xhc3Mg
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHJp
dmF0ZToKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS50
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgewotICAgIH0KLQot
cHVibGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgc3RhdGlj
IFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKLSAgICB7Ci0gICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcg
KGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkp
IFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKLSAgICAgICAgZXJyb3ItPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRl
cm1pbmF0ZWQ7IH0KIAotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdCB7IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iOyB9Ci19Owor
SlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6
Y3JlYXRlKCpnbG9iYWxEYXRhKTsKK30KIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNp
b24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDM0ICsyOSw3OSBAQAogI2lmbmRlZiBFeGNlcHRp
b25IZWxwZXJzX2gKICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKLSNpbmNsdWRlICJKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBDb2RlQmxvY2s7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIElkZW50aWZp
ZXI7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owot
ICAgIGNsYXNzIEpTTm90QW5PYmplY3RFcnJvclN0dWI7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0g
ICAgY2xhc3MgTm9kZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0gICAgCi0gICAgSlNPYmpl
Y3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOwot
ICAgIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFs
RGF0YSopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRl
Kik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0dsb2JhbE9iamVj
dCopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVy
cm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFy
YW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSk7Ci0gICAgSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAg
IEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsK
LSAgICBKU09iamVjdCogY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChFeGVj
U3RhdGUqLCBjb25zdCBVU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVj
dXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKK0pTT2JqZWN0KiBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7CitKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7CitKU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihKU0dsb2JhbE9iamVjdCopOworSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOworSlNPYmplY3QqIGNyZWF0ZU5vdEFu
T2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CitKU09iamVjdCogY3JlYXRlSW52YWxp
ZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgY2hhciogb3AsIEpTVmFsdWUpOworSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNP
YmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNP
YmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiwg
Y29uc3QgVVN0cmluZyYpOworCitKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNT
dGF0ZSopOworSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOwor
CisKK2NsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7Citwcml2YXRlOgorICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAg
IHN0YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJy
b3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxE
YXRhLmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAg
ICBlcnJvci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJv
cjsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KKworICAg
IHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFz
cyBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
cml2YXRlOgorICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgIHsKKyAgICAgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5ldyAoYWxs
b2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBlcnJvci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBB
bm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KIAotICAgIEpTT2JqZWN0KiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAgSlNPYmplY3QqIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw4ICsyMTYsOCBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRp
b25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0g
ICAgaW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm9uRmlu
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB0ZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vbkZpbmFsT2JqZWN0
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW50ZXJydXB0ZWRF
eGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB0ZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdGF0aWNTY29w
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw2IEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgog
I2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29tcGxldGlvbi5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5U2xvdC5oIgpAQCAtMjE5LDggKzIxOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUtPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxl
KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlzRXh0ZW5zaWJsZSgpOyB9CiAKLSAgICAgICAgdmly
dHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRocm93OyB9Ci0K
ICAgICAgICAgdm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShzaXplX3Qgb2xkU2l6ZSwgc2l6
ZV90IG5ld1NpemUpOwogICAgICAgICBib29sIGlzVXNpbmdJbmxpbmVTdG9yYWdlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fcHJvcGVydHlTdG9yYWdlKSA9PSBz
dGF0aWNfY2FzdDxjb25zdCB2b2lkKj4odGhpcyArIDEpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDktMDcgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIENvbXBsZXRpb24g
b2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1
bjo6RXZhbHVhdGUpOgorICAgICAgICAoSlNSdW46OkNoZWNrU3ludGF4KToKKyAgICAgICAgKiBK
U1J1bi5oOgorICAgICAgICAqIEphdmFTY3JpcHRHbHVlLmNwcDoKKyAgICAgICAgKEpTUnVuRXZh
bHVhdGUpOgorCiAyMDExLTA5LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5
NDYzMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMiAr
NjcsMTIgQEAgSlNHbG9iYWxPYmplY3QqIEpTUnVuOjpHbG9iYWxPYmplY3QoKSBjbwogICAgIHJl
dHVybiBmR2xvYmFsT2JqZWN0LmdldCgpOwogfQogCi1Db21wbGV0aW9uIEpTUnVuOjpFdmFsdWF0
ZSgpCitKU1ZhbHVlIEpTUnVuOjpFdmFsdWF0ZShKU1ZhbHVlKiBleHBjZXB0aW9uKQogewotICAg
IHJldHVybiBKU0M6OmV2YWx1YXRlKGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZkdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsKKyAgICBy
ZXR1cm4gSlNDOjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZHbG9iYWxP
YmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291cmNlKSwgSlNWYWx1ZSgp
LCBleHBjZXB0aW9uKTsKIH0KIAogYm9vbCBKU1J1bjo6Q2hlY2tTeW50YXgoKQogewotICAgIHJl
dHVybiBKU0M6OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNv
dXJjZShmU291cmNlKSkuY29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgcmV0dXJuIEpTQzo6Y2hl
Y2tTeW50YXgoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKGZTb3VyY2Up
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IGNsYXNzIEpTUnVuIDogcHVibGljIEpTQmFzZSB7CiAKICAgICAgICAgVVN0cmluZyBHZXRTb3Vy
Y2UoKSBjb25zdDsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIEdsb2JhbE9iamVjdCgpIGNvbnN0
OwotICAgICAgICBDb21wbGV0aW9uIEV2YWx1YXRlKCk7CisgICAgICAgIEpTVmFsdWUgRXZhbHVh
dGUoSlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAgYm9vbCBDaGVja1N5bnRheCgpOwogICAg
ICAgICBKU0ZsYWdzIEZsYWdzKCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9KYXZhU2NyaXB0R2x1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTIsMTQgKzI5MiwxNCBAQCBKU09iamVjdFJlZiBKU1J1bkV2YWx1YXRlKEpTUnVuUmVmIHJlZikK
ICAgICBpZiAocHRyKQogICAgIHsKICAgICAgICAgSlNHbHVlQVBJRW50cnkgZW50cnk7Ci0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IHB0ci0+RXZhbHVhdGUoKTsKLSAgICAgICAgaWYg
KGNvbXBsZXRpb24uaXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChjb21wbGV0aW9uLnZhbHVl
KCksIHB0ci0+R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBUaHJvdykKKyAgICAgICAgCisgICAg
ICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5W
YWx1ZSA9IHB0ci0+RXZhbHVhdGUoJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICAKKyAg
ICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IChKU09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QoZXZhbHVhdGlvbkV4Y2VwdGlv
biwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgSlNGbGFncyBmbGFncyA9IHB0ci0+RmxhZ3MoKTsKICAgICAgICAgICAgIGlmIChm
bGFncyAmIGtKU0ZsYWdEZWJ1ZykKICAgICAgICAgICAgIHsKQEAgLTMxMSw2ICszMTEsMTAgQEAg
SlNPYmplY3RSZWYgSlNSdW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChyZXR1cm5W
YWx1ZSwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MSBAQAorMjAxMS0wOS0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtl
ZCBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6
ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5j
cHA6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9q
c29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisKIDIwMTEtMDktMDcg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDY3NCBhbmQgcjk0Njg5LgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA5NDcxNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJYUGF0aEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNGdW5jdGlvbi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTcwLDcgKzE3MSw3IEBA
IGRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCByZXBvcnRF
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikKIHsKLSAgICBpZiAo
ZXhjZXB0aW9uLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+ZXhjZXB0aW9uVHlw
ZSgpID09IFRlcm1pbmF0ZWQpCisgICAgaWYgKGV4Y2VwdGlvbi5pbmhlcml0cygmVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICBVU3RyaW5n
IGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gOTQ3
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5o
IgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KIApAQCAtMTMzLDcgKzEzNCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHQKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBpZiAoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGJvb2wgdGVybWlu
YXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNl
cHRpb24oKS5pc09iamVjdCgpICYmIGFzT2JqZWN0KGV4ZWMtPmV4Y2VwdGlvbigpKS0+ZXhjZXB0
aW9uVHlwZSgpID09IFRlcm1pbmF0ZWQpOworICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1
c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigp
LmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpOwogICAgICAgICAg
ICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgZ2xvYmFsRGF0YS50ZXJtaW5hdG9y
LnNob3VsZFRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlv
bigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Ny
aXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgbG9uZyBpZCkKIHsK
LSAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0cmluZ1RvVVN0cmluZyhz
b3VyY2UpKTsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAg
U291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNl
KSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAg
ICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xvYmFsVGhpc1ZhbHVl
KCk7Ci0gICAgQ29tcGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0
ZShzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNv
ZGUsIGdsb2JhbFRoaXNWYWx1ZSk7Ci0gICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgIT0gSlNDOjpO
b3JtYWwgJiYgY29tcC5jb21wbFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKQorCisgICAgSlNW
YWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgZXZhbHVhdGlvblJldHVyblZh
bHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShzY3JpcHRTdGF0ZSwgZ2xvYmFs
T2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwg
JmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAg
ICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0g
Y29tcC52YWx1ZSgpOworCisgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGlvblJl
dHVyblZhbHVlOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb25WYWx1ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBKU01haW5UaHJlYWRFeGVjU3RhdGVfaAogCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9Db21wbGV0aW9uLmg+
CiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjZW5kaWYKQEAg
LTUxLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAg
ICB9OwogCi0gICAgc3RhdGljIEpTQzo6Q29tcGxldGlvbiBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29k
ZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFpbk5vZGUqIGNo
YWluLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRF
eGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0
ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUpOworICAgICAgICByZXR1cm4gSlNDOjpl
dmFsdWF0ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CiAgICAg
fTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwy
MiArMTM4LDIyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW4KIAog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJj
ZUNvZGUuc3RhcnRMaW5lKCkpOwogCisgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwor
CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgQ29t
cGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNTb3VyY2VDb2Rl
LCBzaGVsbCk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29w
ZUNoYWluKCksIGpzU291cmNlQ29kZSwgc2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdChjb29raWUpOwogCi0gICAgaWYg
KGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJu
VmFsdWUpIHsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgeworICAgICAgICByZXBvcnRF
eGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIG1fc291cmNlVVJM
ID0gc2F2ZWRTb3VyY2VVUkw7Ci0gICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIGNvbXAudmFsdWUoKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwog
ICAgIH0KIAotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93IHx8IGNvbXAuY29tcGxU
eXBlKCkgPT0gSW50ZXJydXB0ZWQpCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBjb21w
LnZhbHVlKCkpOwotCiAgICAgbV9zb3VyY2VVUkwgPSBzYXZlZFNvdXJjZVVSTDsKLSAgICByZXR1
cm4gU2NyaXB0VmFsdWUoKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCByZXR1cm5WYWx1ZSk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2
YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNp
bmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
Q29tcGxldGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBA
IC0xMzEsMzEgKzEzMSwzMCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpl
dmFsCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKLSAgICBt
X3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQo
KTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLmpzU291cmNl
Q29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICBtX3dvcmtlckNvbnRl
eHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCisgICAgSlNW
YWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBl
ID0gY29tcC5jb21wbFR5cGUoKTsKKyAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxE
YXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNj
b3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci5nZXQoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIG1fd29ya2VyQ29udGV4dFdy
YXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBpZiAoY29t
cGxldGlvblR5cGUgPT0gVGVybWluYXRlZCB8fCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9i
YWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgeworICAgIGlmICgoZXZhbHVh
dGlvbkV4Y2VwdGlvbiAmJiBldmFsdWF0aW9uRXhjZXB0aW9uLmluaGVyaXRzKCZUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpIHx8ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9i
YWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgewogICAgICAgICBmb3JiaWRF
eGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQogCi0gICAg
aWYgKGNvbXBsZXRpb25UeXBlID09IE5vcm1hbCB8fCBjb21wbGV0aW9uVHlwZSA9PSBSZXR1cm5W
YWx1ZSkKLSAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCptX2dsb2JhbERhdGEsIGNvbXAudmFs
dWUoKSk7Ci0KLSAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gVGhyb3cpIHsKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgICAg
ICBpbnQgbGluZU51bWJlciA9IDA7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzb3VyY2VD
b2RlLnVybCgpLnN0cmluZygpOwogICAgICAgICBpZiAobV93b3JrZXJDb250ZXh0LT5zYW5pdGl6
ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSkKICAgICAg
ICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRh
LCBjb21wLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNjcmlwdFZhbHVlKCpt
X2dsb2JhbERhdGEsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIH0KLSAgICByZXR1cm4gU2Ny
aXB0VmFsdWUoKTsKKworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCByZXR1
cm5WYWx1ZSk7CisKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRp
b24oU2NyaXB0VmFsdWUgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMyNSwyOCArMzI1LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAq
KXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7
CiAKLSAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkp
LCBKU0M6OkpTVmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVh
ZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlND
OjpKU1ZhbHVlKCksIDApOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7Ci0gICAgQ29tcGxUeXBlIHR5cGUg
PSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotICAgIAotICAgIGlmICh0eXBlID09IE5vcm1hbCkg
ewotICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVz
dWx0KQotICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAg
ICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotICAgIH0KLSAgICAKLSAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252
ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2lu
Um9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOworCisgICAgaWQgcmVz
dWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmV0dXJu
VmFsdWUgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVj
dDpbc2VsZiBfcm9vdE9iamVjdF1dOwogICAgIAogICAgIF9kaWRFeGVjdXRlKHNlbGYpOwogICAg
IApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiA5NDcx
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCwyMCArMjc0LDEyIEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAgaW5zdGFuY2Us
IE5QT2JqZWMKICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZlcnROUFN0cmluZ1RvVVRGMTYocyk7CiAg
ICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgICAgIAogICAgICAgICBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpK
U1ZhbHVlKCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyks
IEpTQzo6SlNWYWx1ZSgpKTsKICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3Rv
cCgpOwotICAgICAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBlKCk7Ci0g
ICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9y
bWFsKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAK
LSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0LCB2YXJpYW50KTsK
KyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlh
bnQpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bQkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2LDggKzMwNiw2IEBAIGpvYmplY3QgSmF2YUpT
T2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpz
dHJpbmcgc2NyaXB0KSBjb25zdAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFKU09iamVj
dDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkpOwotICAgIAot
ICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICAKQEAgLTMxNiwxOCArMzE0LDEwIEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpl
dmFsKGpzdHJpbmcgc2NyaXAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAg
Q29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
U2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2NyaXB0KS5pbXBsKCkpLCBKU0M6
OkpTVmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmlt
cGwoKSkpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGlt
ZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21w
bFR5cGUoKTsKLSAgICAKLSAgICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKLSAgICAgICAgcmVzdWx0
ID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGpz
VW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdCAocmVz
dWx0KTsKKworICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KIAog
am9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIG1lbWJlck5hbWUpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDc0MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTA3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBDb21wbGV0aW9uIG9i
amVjdCBmcm9tIEpTQywgSSBoYXZlIG5ldmVyIGxpa2VkIGl0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVj
dE1hcDo6ZXZhbHVhdGUpOgorCiAyMDExLTA5LTA3ICBBbGV4ZWkgU3ZpdGtpbmUgIDxhc3ZpdGtp
bmVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCB0ZXN0IGluZnJhc3RydWN0dXJlIHRvIHRl
c3QgcnViYmVyLWJhbmRpbmcgb3ZlcmhhbmcgZHJhd2luZyBhbG9uZyB3aXRoIGxheW91dCB0ZXN0
cyBmb3IgZXhpc3RpbmcgQ2hyb21pdW0gTWFjIG92ZXJoYW5nIGRyYXdpbmcgaW4gdGhlIG5vbi1n
cHUgcGF0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0
aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VDb2Rl
Lmg+CkBAIC0xODgsMjEgKzE4OSw5IEBAIGJvb2wgTlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0
ZShOUE9iamUKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmplY3QoZ2xv
YmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9
IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UoVVN0cmluZyhzY3JpcHRTdHJpbmcuaW1wbCgpKSksIHRoaXNWYWx1ZSk7CisgICAg
SlNWYWx1ZSByZXN1bHRWYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoVVN0cmluZyhzY3JpcHRTdHJpbmcuaW1wbCgp
KSksIHRoaXNWYWx1ZSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENo
ZWNrZXIuc3RvcCgpOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlID0gY29tcGxldGlv
bi5jb21wbFR5cGUoKTsKLQotICAgIEpTVmFsdWUgcmVzdWx0VmFsdWU7Ci0gICAgaWYgKGNvbXBs
ZXRpb25UeXBlID09IE5vcm1hbCkgewotICAgICAgICByZXN1bHRWYWx1ZSA9IGNvbXBsZXRpb24u
dmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdFZh
bHVlID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwotCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAKICAgICBj
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFZhbHVlLCAqcmVzdWx0KTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzQyKQor
KysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBSZW1vdmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlr
ZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorCiAyMDExLTA5
LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5NDYzMi4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFs
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9FcnJvci5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgpAQCAtODc1LDE3ICs4
NzYsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAKICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gRGVmaW5p
dGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdCkpOwotCi0gICAg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENv
bXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKLQotICAgIEpTVmFsdWUgcmVz
dWx0OwotICAgIGlmICh0eXBlID09IE5vcm1hbCkKLSAgICAgICAgcmVzdWx0ID0gY29tcGxldGlv
bi52YWx1ZSgpOwogICAgIAotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBqc1Vu
ZGVmaW5lZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBnbG9i
YWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHQpKTsKKyAgICAK
KyAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAg
ICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lmIFVT
RShKU0MpCisjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBA
IC03ODksMTYgKzc5MCwxNCBAQCBRVmFyaWFudCBRV2ViRWxlbWVudDo6ZXZhbHVhdGVKYXZhU2Ny
aXB0CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0g
c3RhdGUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpOwogICAgIEpT
Qzo6VVN0cmluZyBzY3JpcHQocmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIqPihzY3Jp
cHRTb3VyY2UuZGF0YSgpKSwgc2NyaXB0U291cmNlLmxlbmd0aCgpKTsKLSAgICBKU0M6OkNvbXBs
ZXRpb24gY29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUoc3RhdGUsIHNjb3BlQ2hhaW4sIEpTQzo6
bWFrZVNvdXJjZShzY3JpcHQpLCB0aGlzVmFsdWUpOwotICAgIGlmICgoY29tcGxldGlvbi5jb21w
bFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKSAmJiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSAh
PSBKU0M6Ok5vcm1hbCkpCi0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogCi0gICAgSlNDOjpK
U1ZhbHVlIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAg
ICBKU0M6OkpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OkpTVmFsdWUgZXZh
bHVhdGlvblJlc3VsdCA9IEpTQzo6ZXZhbHVhdGUoc3RhdGUsIHNjb3BlQ2hhaW4sIEpTQzo6bWFr
ZVNvdXJjZShzY3JpcHQpLCB0aGlzVmFsdWUsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBp
ZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAKICAg
ICBpbnQgZGlzdGFuY2UgPSAwOwotICAgIHJldHVybiBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KHN0YXRlLCByZXN1bHQsIFFNZXRhVHlwZTo6Vm9pZCwgJmRpc3RhbmNlKTsK
KyAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudChzdGF0ZSwg
ZXZhbHVhdGlvblJlc3VsdCwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOwogI2VsaWYgVVNF
KFY4KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFFWYXJpYW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106761</attachid>
            <date>2011-09-08 10:43:04 -0700</date>
            <delta_ts>2011-09-08 13:28:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67755-20110908104303.patch</filename>
            <type>text/plain</type>
            <size>50429</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNC
YXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1Nj
cmlwdFN5bnRheCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Mb2Fk
KToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAocnVuV2l0aFNjcmlw
dHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjp0b1N0cmluZyk6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcik6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6VGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorCiAyMDExLTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUFBDIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNiBAQAorCisjZW5k
aWYKKyNpZm5kZWYgTkRFQlVHCiBfSlNDaGVja1NjcmlwdFN5bnRheAogX0pTQ2xhc3NDcmVhdGUK
IF9KU0NsYXNzUmVsZWFzZQpAQCAtMTE5LDcgKzEyMiw3IEBAIF9fWk4zSlNDMTFKU0J5dGVBcnJh
eTEzc19kZWZhdWx0SW5mb0UKIF9fWk4zSlNDMTFKU0J5dGVBcnJheTE1Y3JlYXRlU3RydWN0dXJl
RVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOU183SlNWYWx1ZUVQS05T
XzlDbGFzc0luZm9FCiBfX1pOM0pTQzExSlNCeXRlQXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OVN0cnVjdHVyZUVQTjNXVEY5Qnl0ZUFycmF5RQogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0
RXYKLV9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUUKK19fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUVQTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDMTFyZWdFeHBGbGFnc0VSS05TXzdVU3RyaW5nRQogX19aTjNK
U0MxMkRhdGVJbnN0YW5jZTZzX2luZm9FCkBAIC0xMzUsNiArMTM4LDcgQEAgX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRyYWNlRXYK
IF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFTlNfOEhlYXBTaXplRQogX19a
TjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q2c19pbmZvRQpA
QCAtMjE3LDYgKzIyMSw3IEBAIF9fWk4zSlNDMjNBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjRkdW1w
RXYKIF9fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDMjNzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNo
RW50cnlFUE5TXzhKU09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEySlNHbG9iYWxEYXRh
RVBOU18xNEpTR2xvYmFsT2JqZWN0RQorX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjZzX2luZm9FCiBfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yRVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VS
TlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQpAQCAtMzI2LDcgKzMz
MSw3IEBAIF9fWk4zSlNDOEpTT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9w
UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxl
cjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlND
OFByb2ZpbGVyOHByb2ZpbGVyRXYKLV9fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBO
U18xNFNjb3BlQ2hhaW5Ob2RlRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQorX19aTjNK
U0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNv
dXJjZUNvZGVFTlNfN0pTVmFsdWVFUFM3XwogX19aTjNKU0M4aXNab21iaWVFUEtOU182SlNDZWxs
RQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNKU0M5Q29kZUJsb2NrRDJFdgpAQCAtNjE4
LDcgKzYyMywzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpTU3RyaW5nRQog
X2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0
eQotCi0jaWZuZGVmIE5ERUJVRwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnlFdgotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
OTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDEwICsyNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAg
Q29tcGxldGlvbiByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEo
KSwgZmlsZU5hbWUpKTsKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICAKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uo
c2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRh
eChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yNzgsMTEgKzI4MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAg
IHN0b3BXYXRjaC5zdGFydCgpOwotICAgIENvbXBsZXRpb24gcmVzdWx0ID0gY2hlY2tTeW50YXgo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmls
ZU5hbWUpKTsKKworICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOworICAgIGJvb2wgdmFsaWRT
eW50YXggPSBjaGVja1N5bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BX
YXRjaC5zdG9wKCk7CiAKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXZhbGlkU3lu
dGF4KQorICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsK
IH0KIApAQCAtNDM2LDEzICs0NDAsMTQgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xv
YmFsT2JqZWN0KgogCiAgICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGluZygpOwogCi0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3Jp
cHQsIGZpbGVOYW1lKSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24u
Y29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAg
ICBpZiAoZHVtcCkgewotICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgPT0g
VGhyb3cpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0
aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgICAg
ICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIGNvbXBsZXRpb24u
dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBnbG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNDczLDcgKzQ3OCw4
IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobGluZVswXSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KGxp
bmUpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VT
b3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSk7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
bWFrZVNvdXJjZShsaW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICAgICAgZnJlZShsaW5lKTsKICNlbHNlCiAgICAgICAgIHByaW50Zigi
JXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CkBAIC00ODgsMTIgKzQ5NCwxNCBAQCBzdGF0aWMgdm9p
ZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGlmIChsaW5lLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICAg
ICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGxpbmUu
ZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpKTsKKworICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlw
ZSgpID09IFRocm93KQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21w
bGV0aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBw
cmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUg
IkFQSUNhc3QuaCIKICNpbmNsdWRlICJBUElTaGltcy5oIgotI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
ICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KQEAgLTUyLDE3ICs1MSwxOSBAQCBK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgLy8gZXZhbHVhdGUg
c2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAg
ICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+dXN0cmluZygpLCBzb3Vy
Y2VVUkwtPnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBDb21wbGV0aW9uIGNv
bXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwganNUaGlzT2JqZWN0KTsKIAotICAgIGlm
IChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7CisgICAgSlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNv
dXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGNvbXBsZXRpb24udmFsdWUoKSk7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChjb21wbGV0aW9uLnZhbHVlKCkpCi0gICAgICAg
IHJldHVybiB0b1JlZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOwotICAgIAorICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJldHVyblZhbHVlKTsKKwog
ICAgIC8vIGhhcHBlbnMsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBvbmx5IHN0YXRlbWVudCBpcyBh
biBlbXB0eSAoJzsnKSBzdGF0ZW1lbnQKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC03MywxMyArNzQsMTYgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpT
Q29udGV4dFJlZiBjdAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAgICBT
b3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT51c3RyaW5nKCksIHNvdXJjZVVS
TC0+dXN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IGNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBzb3VyY2UpOwotICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7
CisgICAgCisgICAgSlNWYWx1ZSBzeW50YXhFeGNlcHRpb247CisgICAgYm9vbCBpc1ZhbGlkU3lu
dGF4ID0gY2hlY2tTeW50YXgoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksIHNvdXJjZSwgJnN5bnRheEV4Y2VwdGlvbik7CisKKyAgICBpZiAoIWlzVmFsaWRTeW50YXgp
IHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDk0NzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAg
RVhQT1JUUwogICAgID8/MVdlYWtIYW5kbGVPd25lckBKU0NAQFVBRUBYWgogICAgID8/OEpTQ0BA
WUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5nQDBAMEBaCisg
ICAgP2V2YWx1YXRlQEpTQ0BAWUE/QVZKU1ZhbHVlQDFAUEFWRXhlY1N0YXRlQDFAUEFWU2NvcGVD
aGFpbk5vZGVAMUBBQlZTb3VyY2VDb2RlQDFAVjIxQFBBVjIxQEBaCiAgICAgP0VjbWFTY3JpcHRD
b252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBT
QUFCVjEyM0BYWgogICAgID9Ub0V4cG9uZW50aWFsQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRv
dWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/
VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFC
RV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCkBAIC04MCw3ICs4MSw2IEBAIEVYUE9SVFMKICAg
ICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpT
R2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRp
ZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVj
a0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0
YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUE/QVZDb21wbGV0aW9uQDFAUEFWRXhlY1N0
YXRlQDFAQUJWU291cmNlQ29kZUAxQEBaCiAgICAgP2NoZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/
JFZlY3RvckBFJDBCQUBAMkBAWgogICAgID9jbGFzc05hbWVASlNPYmplY3RASlNDQEBVQkU/QVZV
U3RyaW5nQDJAWFoKICAgICA/Y2xlYXJAU291cmNlUHJvdmlkZXJDYWNoZUBKU0NAQFFBRVhYWgpA
QCAtMTYwLDcgKzE2MCw2IEBAIEVYUE9SVFMKICAgICA/ZXF1YWxASWRlbnRpZmllckBKU0NAQFNB
X05QQlZTdHJpbmdJbXBsQFdURkBAUEJEQFoKICAgICA/ZXF1YWxVVEYxNldpdGhVVEY4QFVuaWNv
ZGVAV1RGQEBZQV9OUEJfVzBQQkQxQFoKICAgICA/ZXZhbHVhdGVARGVidWdnZXJDYWxsRnJhbWVA
SlNDQEBRQkU/QVZKU1ZhbHVlQDJAQUJWVVN0cmluZ0AyQEFBVjMyQEBaCi0gICAgP2V2YWx1YXRl
QEpTQ0BAWUE/QVZDb21wbGV0aW9uQDFAUEFWRXhlY1N0YXRlQDFAUEFWU2NvcGVDaGFpbk5vZGVA
MUBBQlZTb3VyY2VDb2RlQDFAVkpTVmFsdWVAMUBAWgogICAgID9leGNsdWRlQFByb2ZpbGVASlND
QEBRQUVYUEJWUHJvZmlsZU5vZGVAMkBAWgogICAgID9mYXN0Q2FsbG9jQFdURkBAWUFQQVhJSUBa
CiAgICAgP2Zhc3RGcmVlQFdURkBAWUFYUEFYQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTQ3MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MDgsOCArNzA4LDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJ
bnRlcnByZXRlcjo6dAogICAgICAgICAgICAgYWRkRXJyb3JJbmZvKGNhbGxGcmFtZSwgZXhjZXB0
aW9uLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZSgpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIENvbXBsVHlwZSBleGNlcHRpb25UeXBlID0gZXhjZXB0aW9uLT5leGNlcHRpb25U
eXBlKCk7Ci0gICAgICAgIGlzSW50ZXJydXB0ID0gZXhjZXB0aW9uVHlwZSA9PSBJbnRlcnJ1cHRl
ZCB8fCBleGNlcHRpb25UeXBlID09IFRlcm1pbmF0ZWQ7CisgICAgICAgIGlzSW50ZXJydXB0ID0g
KGV4Y2VwdGlvbi0+aW5oZXJpdHMoJkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbykg
fHwgZXhjZXB0aW9uLT5pbmhlcml0cygmVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8p
KTsKICAgICB9CiAKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw0NyArMzQsNTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUNvbXBsZXRpb24gY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCitib29sIGNo
ZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1Zh
bHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKICAgICBB
U1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRh
KCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBw
cm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIEpT
T2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNoZWNrU3ludGF4KGV4ZWMpOwotICAgIGlmIChlcnJv
cikKLSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIGVycm9yKTsKKyAgICBpZiAoZXJy
b3IpIHsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQorICAgICAgICAgICAgKnJldHVy
bmVkRXhjZXB0aW9uID0gZXJyb3I7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAg
ICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwpOworICAgIHJldHVybiB0cnVlOwogfQogCi1Db21w
bGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCitKU1ZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUqIHJldHVy
bmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVj
LT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50
SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQ
cm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFt
KSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2Vw
dGlvbjsKLSAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIGV4Y2VwdGlvbik7CisgICAgICAgIGlm
IChyZXR1cm5lZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBl
eGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uOworICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlv
biA9IGV4Y2VwdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5leGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBpZiAoIXRoaXNWYWx1ZSB8fCB0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgdGhpc1ZhbHVlID0gZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhp
c09iamVjdChleGVjKTsKLQogICAgIEpTVmFsdWUgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIo
KS0+ZXhlY3V0ZShwcm9ncmFtLCBleGVjLCBzY29wZUNoYWluLCB0aGlzT2JqKTsKIAogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4
ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQog
Ci0gICAgICAgIENvbXBsVHlwZSBleGNlcHRpb25UeXBlID0gVGhyb3c7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24uaXNPYmplY3QoKSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblR5cGUgPSBhc09iamVj
dChleGNlcHRpb24pLT5leGNlcHRpb25UeXBlKCk7Ci0gICAgICAgIHJldHVybiBDb21wbGV0aW9u
KGV4Y2VwdGlvblR5cGUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KLSAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIHJlc3VsdCk7CisKKyAgICBB
U1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHJl
dmlzaW9uIDk0NzE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzMiArMzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBTY29wZUNoYWluTm9kZTsKICAgICBjbGFzcyBTb3VyY2VDb2RlOwogCi0gICAgZW51
bSBDb21wbFR5cGUgeyBOb3JtYWwsIEJyZWFrLCBDb250aW51ZSwgUmV0dXJuVmFsdWUsIFRocm93
LCBJbnRlcnJ1cHRlZCwgVGVybWluYXRlZCB9OwotCi0gICAgLyoKLSAgICAgKiBDb21wbGV0aW9u
IG9iamVjdHMgYXJlIHVzZWQgdG8gY29udmV5IHRoZSByZXR1cm4gc3RhdHVzIGFuZCB2YWx1ZQot
ICAgICAqIGZyb20gZnVuY3Rpb25zLgotICAgICAqLwotICAgIGNsYXNzIENvbXBsZXRpb24gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgQ29tcGxldGlvbihDb21wbFR5cGUgdHlwZSA9IE5vcm1hbCwg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIENvbXBsVHlwZSBjb21wbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICAgICAgdm9p
ZCBzZXRWYWx1ZShKU1ZhbHVlIHYpIHsgbV92YWx1ZSA9IHY7IH0KLSAgICAgICAgYm9vbCBpc1Zh
bHVlQ29tcGxldGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIENvbXBsVHlwZSBtX3R5cGU7Ci0gICAgICAgIEpTVmFsdWUgbV92YWx1ZTsKLSAg
ICB9OwotCi0gICAgQ29tcGxldGlvbiBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJik7Ci0gICAgQ29tcGxldGlvbiBldmFsdWF0ZShFeGVjU3RhdGUqLCBTY29wZUNoYWlu
Tm9kZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWUoKSk7
CisgICAgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNW
YWx1ZSogZXhjZXB0aW9uID0gMCk7CisgICAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpT
VmFsdWUoKSwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNTQgKzQxLDI1
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9y
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHJpdmF0ZToKLSAgICBJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBKU05vbkZp
bmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuaW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
clN0cnVjdHVyZS5nZXQoKSkKLSAgICB7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICBzdGF0aWMgSW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICB7Ci0gICAgICAgIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3IqIGVycm9yID0gbmV3IChhbGxvY2F0ZUNlbGw8SW50ZXJy
dXB0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgSW50ZXJydXB0ZWRFeGVjdXRp
b25FcnJvcihnbG9iYWxEYXRhKTsKLSAgICAgICAgZXJyb3ItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQorY29uc3QgQ2xhc3NJbmZvIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbyA9IHsgIkludGVycnVwdGVkRXhlY3V0aW9u
RXJyb3IiLCAwLCAwLCAwIH07CiAKLSAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNlcHRpb25UeXBl
KCkgY29uc3QgeyByZXR1cm4gSW50ZXJydXB0ZWQ7IH0KK1VTdHJpbmcgSW50ZXJydXB0ZWRFeGVj
dXRpb25FcnJvcjo6dG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICByZXR1cm4gIkph
dmFTY3JpcHQgZXhlY3V0aW9uIGV4Y2VlZGVkIHRpbWVvdXQuIjsKK30KIAotICAgIHZpcnR1YWwg
VVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiAiSmF2YVNjcmlwdCBl
eGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOyB9Ci19OworY29uc3QgQ2xhc3NJbmZvIFRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvID0geyAiVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
IiwgMCwgMCwgMCB9OwogCi1KU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNl
cHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorVVN0cmluZyBUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3I6OnRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludGVy
cnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuICJK
YXZhU2NyaXB0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVkLiI7CiB9CiAKLWNsYXNzIFRlcm1pbmF0ZWRF
eGVjdXRpb25FcnJvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAg
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAg
ICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEudGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIHN0YXRpYyBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3IqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewot
ICAgICAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IqIGVycm9yID0gbmV3IChhbGxvY2F0ZUNl
bGw8VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIGVycm9yLT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIHZpcnR1
YWwgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBUZXJtaW5hdGVkOyB9
CiAKLSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QgeyByZXR1
cm4gIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIjsgfQotfTsKK0pTT2JqZWN0KiBj
cmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCit7CisgICAgcmV0dXJuIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSk7Cit9CiAKIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDk0NzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwzNCArMjksNzkgQEAKICNpZm5kZWYgRXhjZXB0aW9uSGVscGVyc19o
CiAjZGVmaW5lIEV4Y2VwdGlvbkhlbHBlcnNfaAogCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgQ29kZUJs
b2NrOwotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNs
YXNzIEpTR2xvYmFsRGF0YTsKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLSAgICBjbGFzcyBK
U05vdEFuT2JqZWN0RXJyb3JTdHViOwotICAgIGNsYXNzIEpTT2JqZWN0OwotICAgIGNsYXNzIE5v
ZGU7Ci0gICAgc3RydWN0IEluc3RydWN0aW9uOwotICAgIAotICAgIEpTT2JqZWN0KiBjcmVhdGVJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKLSAgICBKU09iamVj
dCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKLSAg
ICBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOwotICAgIEpT
T2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoSlNHbG9iYWxPYmplY3QqKTsKLSAgICBK
U09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihKU0dsb2JhbE9iamVjdCopOwotICAgIEpT
T2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImKTsKLSAgICBKU09iamVjdCogY3JlYXRlTm90QW5PYmplY3RFcnJvcihFeGVjU3Rh
dGUqLCBKU1ZhbHVlKTsKLSAgICBKU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhl
Y1N0YXRlKiwgY29uc3QgY2hhciogb3AsIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVO
b3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBKU09iamVjdCog
Y3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgSlNPYmpl
Y3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiwgY29u
c3QgVVN0cmluZyYpOworSlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKEpTR2xvYmFsRGF0YSopOworSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKEV4ZWNTdGF0ZSopOworSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0ds
b2JhbE9iamVjdCopOworSlNPYmplY3QqIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoSlNHbG9iYWxP
YmplY3QqKTsKK0pTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImKTsKK0pTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVycm9y
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNPYmplY3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9y
KEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqIG9wLCBKU1ZhbHVlKTsKK0pTT2JqZWN0KiBjcmVhdGVO
b3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKK0pTT2JqZWN0KiBjcmVh
dGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKK0pTT2JqZWN0KiBjcmVh
dGVFcnJvckZvckludmFsaWRHbG9iYWxBc3NpZ25tZW50KEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJp
bmcmKTsKKworSlNPYmplY3QqIHRocm93T3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqKTsKK0pT
T2JqZWN0KiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKKworCitjbGFzcyBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHJp
dmF0ZToKKyAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
aW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgSW50
ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
KyAgICB7CisgICAgICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IqIGVycm9yID0gbmV3IChh
bGxvY2F0ZUNlbGw8SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkg
SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICAgICAgZXJyb3ItPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQor
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY2xhc3MgVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHJpdmF0ZToKKyAg
ICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAg
ICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS50ZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKworcHVibGljOgorICAgIHR5
cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCisgICAgc3RhdGljIFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7CisgICAg
ICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxU
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICAgICAgZXJyb3ItPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xv
dENvdW50LCAmc19pbmZvKTsKKyAgICB9CiAKLSAgICBKU09iamVjdCogdGhyb3dPdXRPZk1lbW9y
eUVycm9yKEV4ZWNTdGF0ZSopOwotICAgIEpTT2JqZWN0KiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTQ3MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTYsOCArMjE2LDggQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xv
YmFsRGF0YVR5cAogICAgIHN0cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzKSk7CiAgICAgZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJl
LnNldCgqdGhpcywgRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQWN0aXZh
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGludGVycnVw
dGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vbkZpbmFsT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgdGVybWluYXRlZEV4ZWN1
dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNOb25GaW5hbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgdGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yU3RydWN0dXJlLnNldCgqdGhpcywgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RhdGljU2NvcGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHN0cmluZ1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RyaW5nOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgIkFyZ0xpc3QuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3Qu
aCIKQEAgLTIxOSw4ICsyMTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0Zy
b3plbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5pc0Zy
b3plbihnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29sIGlzRXh0ZW5zaWJsZSgpIHsgcmV0dXJu
IG1fc3RydWN0dXJlLT5pc0V4dGVuc2libGUoKTsgfQogCi0gICAgICAgIHZpcnR1YWwgQ29tcGxU
eXBlIGV4Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBUaHJvdzsgfQotCiAgICAgICAgIHZv
aWQgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uoc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KTsKICAgICAgICAgYm9vbCBpc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IHZvaWQqPihtX3Byb3BlcnR5U3RvcmFnZSkgPT0gc3RhdGljX2Nhc3Q8
Y29uc3Qgdm9pZCo+KHRoaXMgKyAxKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDk0NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTA5LTA3ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBDb21wbGV0aW9uIG9iamVjdCBmcm9t
IEpTQywgSSBoYXZlIG5ldmVyIGxpa2VkIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogSlNSdW4uY3BwOgorICAgICAgICAoSlNSdW46OkV2YWx1YXRl
KToKKyAgICAgICAgKEpTUnVuOjpDaGVja1N5bnRheCk6CisgICAgICAgICogSlNSdW4uaDoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0R2x1ZS5jcHA6CisgICAgICAgIChKU1J1bkV2YWx1YXRlKToKKwog
MjAxMS0wOS0wNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk0NjI3IGFuZCByOTQ2MzIuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRHbHVlL0pTUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTIgKzY3LDEyIEBAIEpT
R2xvYmFsT2JqZWN0KiBKU1J1bjo6R2xvYmFsT2JqZWN0KCkgY28KICAgICByZXR1cm4gZkdsb2Jh
bE9iamVjdC5nZXQoKTsKIH0KIAotQ29tcGxldGlvbiBKU1J1bjo6RXZhbHVhdGUoKQorSlNWYWx1
ZSBKU1J1bjo6RXZhbHVhdGUoSlNWYWx1ZSogZXhwY2VwdGlvbikKIHsKLSAgICByZXR1cm4gSlND
OjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZHbG9iYWxPYmplY3QtPmds
b2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291cmNlKSk7CisgICAgcmV0dXJuIEpTQzo6
ZXZhbHVhdGUoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmR2xvYmFsT2JqZWN0LT5nbG9i
YWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoZlNvdXJjZSksIEpTVmFsdWUoKSwgZXhwY2VwdGlv
bik7CiB9CiAKIGJvb2wgSlNSdW46OkNoZWNrU3ludGF4KCkKIHsKLSAgICByZXR1cm4gSlNDOjpj
aGVja1N5bnRheChmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2UoZlNvdXJj
ZSkpLmNvbXBsVHlwZSgpICE9IFRocm93OworICAgIHJldHVybiBKU0M6OmNoZWNrU3ludGF4KGZH
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShmU291cmNlKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdEdsdWUvSlNSdW4uaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dEdsdWUvSlNSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBKU1J1
biA6IHB1YmxpYyBKU0Jhc2UgewogCiAgICAgICAgIFVTdHJpbmcgR2V0U291cmNlKCkgY29uc3Q7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBHbG9iYWxPYmplY3QoKSBjb25zdDsKLSAgICAgICAg
Q29tcGxldGlvbiBFdmFsdWF0ZSgpOworICAgICAgICBKU1ZhbHVlIEV2YWx1YXRlKEpTVmFsdWUq
IGV4Y2VwdGlvbik7CiAgICAgICAgIGJvb2wgQ2hlY2tTeW50YXgoKTsKICAgICAgICAgSlNGbGFn
cyBGbGFncygpIGNvbnN0OwogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEds
dWUvSmF2YVNjcmlwdEdsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9KYXZhU2NyaXB0R2x1ZS5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDE0ICsyOTIs
MTQgQEAgSlNPYmplY3RSZWYgSlNSdW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgaWYgKHB0
cikKICAgICB7CiAgICAgICAgIEpTR2x1ZUFQSUVudHJ5IGVudHJ5OwotICAgICAgICBDb21wbGV0
aW9uIGNvbXBsZXRpb24gPSBwdHItPkV2YWx1YXRlKCk7Ci0gICAgICAgIGlmIChjb21wbGV0aW9u
LmlzVmFsdWVDb21wbGV0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IChK
U09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QoY29tcGxldGlvbi52YWx1ZSgpLCBwdHItPkds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNv
bXBsZXRpb24uY29tcGxUeXBlKCkgPT0gVGhyb3cpCisgICAgICAgIAorICAgICAgICBKU1ZhbHVl
IGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBwdHIt
PkV2YWx1YXRlKCZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSAoSlNP
YmplY3RSZWYpS0pTVmFsdWVUb0pTT2JqZWN0KGV2YWx1YXRpb25FeGNlcHRpb24sIHB0ci0+R2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIEpT
RmxhZ3MgZmxhZ3MgPSBwdHItPkZsYWdzKCk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBrSlNG
bGFnRGVidWcpCiAgICAgICAgICAgICB7CkBAIC0zMTEsNiArMzExLDEwIEBAIEpTT2JqZWN0UmVm
IEpTUnVuRXZhbHVhdGUoSlNSdW5SZWYgcmVmKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IChKU09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QocmV0dXJuVmFsdWUsIHB0ci0+
R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzQyKQorKysgU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEt
MDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhl
IENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmpl
Y3RlZFNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0
ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAg
ICAoX05QTl9FdmFsdWF0ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06
CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmV2YWwpOgorCiAyMDExLTA5LTA3ICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByOTQ2NzQgYW5kIHI5NDY4OS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2
ICs1Nyw3IEBACiAjaW5jbHVkZSAiWFBhdGhFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1l
L0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24u
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTE3MCw3ICsxNzEsNyBAQCBkb3VibGUgdmFs
dWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pCiB7Ci0gICAgaWYgKGV4Y2VwdGlvbi5p
c09iamVjdCgpICYmIGFzT2JqZWN0KGV4Y2VwdGlvbiktPmV4Y2VwdGlvblR5cGUoKSA9PSBUZXJt
aW5hdGVkKQorICAgIGlmIChleGNlcHRpb24uaW5oZXJpdHMoJlRlcm1pbmF0ZWRFeGVjdXRpb25F
cnJvcjo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVVN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisj
aW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAKQEAgLTEz
Myw3ICsxMzQsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAK
ICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRF
eGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgZXhlYy0+ZXhjZXB0aW9uKCkuaXNP
YmplY3QoKSAmJiBhc09iamVjdChleGVjLT5leGNlcHRpb24oKSktPmV4Y2VwdGlvblR5cGUoKSA9
PSBUZXJtaW5hdGVkKTsKKyAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlv
biA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKS5pbmhlcml0cygm
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKTsKICAgICAgICAgICAgIGlmICh0ZXJt
aW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IGdsb2JhbERhdGEudGVybWluYXRvci5zaG91bGRUZXJt
aW5hdGUoKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCktPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdE9iamVjdCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYg
c291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGxvbmcgaWQpCiB7Ci0gICAgU291cmNl
Q29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNlKSk7CiAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIFNvdXJjZUNvZGUg
c291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIEpTVmFsdWUg
Z2xvYmFsVGhpc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmdsb2JhbFRoaXNWYWx1ZSgpOwotICAgIENv
bXBsZXRpb24gY29tcCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoc2NyaXB0U3Rh
dGUsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBnbG9iYWxU
aGlzVmFsdWUpOwotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpICE9IEpTQzo6Tm9ybWFsICYmIGNv
bXAuY29tcGxUeXBlKCkgIT0gSlNDOjpSZXR1cm5WYWx1ZSkKKworICAgIEpTVmFsdWUgZXZhbHVh
dGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25SZXR1cm5WYWx1ZSA9IEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJu
IFNjcmlwdE9iamVjdCgpOwotICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGNvbXAudmFsdWUo
KTsKKworICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2YWx1YXRpb25SZXR1cm5WYWx1ZTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKGZ1bmN0aW9uVmFsdWUsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5
cGVOb25lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgSlNNYWluVGhyZWFkRXhlY1N0YXRlX2gKIAogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2lmbmRlZiBO
REVCVUcKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2VuZGlmCkBAIC01MSwxMCArNTIs
MTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2Jq
ZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgfTsKIAotICAg
IHN0YXRpYyBKU0M6OkNvbXBsZXRpb24gZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6U2NvcGVDaGFpbk5vZGUqIGNoYWluLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRl
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBjaGFpbiwgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNW
YWx1ZSogZXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlIGN1
cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgY2hh
aW4sIHNvdXJjZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhl
YywgY2hhaW4sIHNvdXJjZSwgdGhpc1ZhbHVlLCBleGNlcHRpb24pOwogICAgIH07CiAKIHByb3Rl
Y3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMjIgKzEzOCwyMiBA
QCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluCiAKICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsRXZhbHVhdGVTY3JpcHQobV9mcmFtZSwgc291cmNlVVJMLCBzb3VyY2VDb2RlLnN0YXJ0
TGluZSgpKTsKIAorICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKwogICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29t
cCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIGpzU291cmNlQ29kZSwgc2hlbGwpOwor
ICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRl
KGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBq
c1NvdXJjZUNvZGUsIHNoZWxsLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgZXhlYy0+Z2xv
YmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29va2llKTsKIAotICAgIGlmIChjb21wLmNvbXBs
VHlwZSgpID09IE5vcm1hbCB8fCBjb21wLmNvbXBsVHlwZSgpID09IFJldHVyblZhbHVlKSB7Cisg
ICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4
ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgICAgICBtX3NvdXJjZVVSTCA9IHNhdmVkU291
cmNlVVJMOwotICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBj
b21wLnZhbHVlKCkpOworICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKICAgICB9CiAKLSAg
ICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBUaHJvdyB8fCBjb21wLmNvbXBsVHlwZSgpID09IElu
dGVycnVwdGVkKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgY29tcC52YWx1ZSgpKTsK
LQogICAgIG1fc291cmNlVVJMID0gc2F2ZWRTb3VyY2VVUkw7Ci0gICAgcmV0dXJuIFNjcmlwdFZh
bHVlKCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmV0dXJu
VmFsdWUpOwogfQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiV29y
a2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KICNpbmNs
dWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24u
aD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIApAQCAtMTMxLDMxICsx
MzEsMzAgQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbAogICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVjKCk7Ci0gICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgQ29t
cGxldGlvbiBjb21wID0gSlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93
b3JrZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7Ci0gICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+
Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAorICAgIEpTVmFsdWUgZXZhbHVh
dGlvbkV4Y2VwdGlvbjsKIAotICAgIENvbXBsVHlwZSBjb21wbGV0aW9uVHlwZSA9IGNvbXAuY29t
cGxUeXBlKCk7CisgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRpbWVv
dXRDaGVja2VyLnN0YXJ0KCk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVh
dGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCks
IHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCks
ICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9i
YWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCi0gICAgaWYgKGNvbXBsZXRpb25UeXBl
ID09IFRlcm1pbmF0ZWQgfHwgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRl
cm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpIHsKKyAgICBpZiAoKGV2YWx1YXRpb25FeGNlcHRp
b24gJiYgZXZhbHVhdGlvbkV4Y2VwdGlvbi5pbmhlcml0cygmVGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjpzX2luZm8pKSB8fCAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRl
cm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpIHsKICAgICAgICAgZm9yYmlkRXhlY3V0aW9uKCk7
CiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwogICAgIH0KIAotICAgIGlmIChjb21wbGV0
aW9uVHlwZSA9PSBOb3JtYWwgfHwgY29tcGxldGlvblR5cGUgPT0gUmV0dXJuVmFsdWUpCi0gICAg
ICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCBjb21wLnZhbHVlKCkpOwotCi0g
ICAgaWYgKGNvbXBsZXRpb25UeXBlID09IFRocm93KSB7CisgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICAgICAgaW50IGxpbmVO
dW1iZXIgPSAwOwogICAgICAgICBTdHJpbmcgc291cmNlVVJMID0gc291cmNlQ29kZS51cmwoKS5z
dHJpbmcoKTsKICAgICAgICAgaWYgKG1fd29ya2VyQ29udGV4dC0+c2FuaXRpemVTY3JpcHRFcnJv
cihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpCiAgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgY29tcC52YWx1
ZSgpKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRh
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICB9Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7
CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgcmV0dXJuVmFsdWUpOwor
CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKFNjcmlwdFZh
bHVlIGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2Ny
aXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsMjgg
KzMyNSwxMyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCku
dGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU01h
aW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1Zh
bHVlKCkpOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmV2YWx1YXRlKGV4ZWMsIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgp
LCAwKTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlv
bi5jb21wbFR5cGUoKTsKLSAgICAKLSAgICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKLSAgICAgICAg
cmVzdWx0ID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKLSAgICAgICAgcmVzdWx0ID0g
anNVbmRlZmluZWQoKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWQgcmVzdWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9P
YmpjVmFsdWU6cmVzdWx0IG9yaWdpblJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3Rd
IHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKKworICAgIGlkIHJlc3VsdE9iaiA9IFtX
ZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdp
blJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jv
b3RPYmplY3RdXTsKICAgICAKICAgICBfZGlkRXhlY3V0ZShzZWxmKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQs
MjAgKzI3NCwxMiBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAg
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIFN0cmlu
ZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICBSZWZQ
dHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICAKICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICAgICAg
Q29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
U2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsK
KyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFs
dWUoKSk7CiAgICAgICAgIGdsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKLSAgICAg
ICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIGlmICh0eXBlID09IE5vcm1hbCkgewotICAg
ICAgICAgICAgcmVzdWx0ID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIGNv
bnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7CisgICAgICAgIGNv
bnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHJldmlzaW9u
IDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMwNiw4ICszMDYsNiBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y2Fs
bChqc3RyaW5nIG1ldGhvCiBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChqc3RyaW5nIHNjcmlw
dCkgY29uc3QKIHsKICAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhSlNPYmplY3Q6OmV2YWwgc2Ny
aXB0ID0gJXMiLCBKYXZhU3RyaW5nKHNjcmlwdCkudXRmOCgpKTsKLSAgICAKLSAgICBKU1ZhbHVl
IHJlc3VsdDsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAg
CkBAIC0zMTYsMTggKzMxNCwxMCBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChqc3RyaW5n
IHNjcmlwCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24g
Y29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4o
KSwgbWFrZVNvdXJjZShKYXZhU3RyaW5nKHNjcmlwdCkuaW1wbCgpKSwgSlNDOjpKU1ZhbHVlKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
U2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2NyaXB0KS5pbXBsKCkpKTsKICAg
ICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2Vy
LnN0b3AoKTsKLSAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBlKCk7Ci0g
ICAgCi0gICAgaWYgKHR5cGUgPT0gTm9ybWFsKSB7Ci0gICAgICAgIHJlc3VsdCA9IGNvbXBsZXRp
b24udmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXN1bHQgPSBq
c1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgp
OwotICAgIAotICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QgKHJlc3VsdCk7CisKKyAg
ICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CiB9CiAKIGpvYmplY3QgSmF2
YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyBtZW1iZXJOYW1lKSBjb25zdApJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBK
U0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1
YXRlKToKKwogMjAxMS0wOS0wNyAgQWxleGVpIFN2aXRraW5lICA8YXN2aXRraW5lQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBBZGQgdGVzdCBpbmZyYXN0cnVjdHVyZSB0byB0ZXN0IHJ1YmJlci1i
YW5kaW5nIG92ZXJoYW5nIGRyYXdpbmcgYWxvbmcgd2l0aCBsYXlvdXQgdGVzdHMgZm9yIGV4aXN0
aW5nIENocm9taXVtIE1hYyBvdmVyaGFuZyBkcmF3aW5nIGluIHRoZSBub24tZ3B1IHBhdGguCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1l
T2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gOTQ3MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk5Q
UnVudGltZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29tcGxldGlvbi5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNMb2NrLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNlQ29kZS5oPgpAQCAtMTg4
LDIxICsxODksOSBAQCBib29sIE5QUnVudGltZU9iamVjdE1hcDo6ZXZhbHVhdGUoTlBPYmplCiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBnZXRPckNyZWF0ZUpTT2JqZWN0KGdsb2JhbE9iamVjdC5n
ZXQoKSwgbnBPYmplY3QpOwogCiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91
dENoZWNrZXIuc3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFVT
dHJpbmcoc2NyaXB0U3RyaW5nLmltcGwoKSkpLCB0aGlzVmFsdWUpOworICAgIEpTVmFsdWUgcmVz
dWx0VmFsdWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVD
aGFpbigpLCBtYWtlU291cmNlKFVTdHJpbmcoc2NyaXB0U3RyaW5nLmltcGwoKSkpLCB0aGlzVmFs
dWUpOwogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3Ao
KTsKIAotICAgIENvbXBsVHlwZSBjb21wbGV0aW9uVHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBl
KCk7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlOwotICAgIGlmIChjb21wbGV0aW9uVHlwZSA9
PSBOb3JtYWwpIHsKLSAgICAgICAgcmVzdWx0VmFsdWUgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0g
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpCi0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdFZhbHVlID0ganNVbmRlZmluZWQo
KTsKLQotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCiAgICAgY29udmVydEpTVmFs
dWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWYWx1ZSwgKnJlc3VsdCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDc0MikKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEx
LTA5LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBDb21wbGV0aW9uIG9iamVjdCBmcm9tIEpTQywgSSBoYXZlIG5ldmVyIGxpa2VkIGl0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKwogMjAxMS0wOS0wNyAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjk0NjI3IGFuZCByOTQ2MzIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Lm1tCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2Vi
VUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
RXJyb3IuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KQEAgLTg3NSwxNyArODc2LDEwIEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWEKICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogCiAgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVwcyA/IERlZmluaXRlbHlQcm9jZXNz
aW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgQ29t
cGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPmds
b2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHQpKTsKLQotICAgIGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKLSAgICBDb21wbFR5cGUgdHlw
ZSA9IGNvbXBsZXRpb24uY29tcGxUeXBlKCk7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBp
ZiAodHlwZSA9PSBOb3JtYWwpCi0gICAgICAgIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsK
ICAgICAKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0KSk7CisgICAgCisgICAgZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogICAgIAogICAgIG1h
cnNoYWxWYWx1ZShleGVjLCByZXN1bHQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CiAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJl
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVu
dC5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpZiBVU0UoSlNDKQorI2lu
Y2x1ZGUgIkNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkpTSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgpAQCAtNzg5LDE2ICs3
OTAsMTQgQEAgUVZhcmlhbnQgUVdlYkVsZW1lbnQ6OmV2YWx1YXRlSmF2YVNjcmlwdAogI2lmIFVT
RShKU0MpCiAgICAgSlNDOjpTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IHN0YXRlLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKTsKICAgICBKU0M6OlVTdHJpbmcg
c2NyaXB0KHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyKj4oc2NyaXB0U291cmNlLmRh
dGEoKSksIHNjcmlwdFNvdXJjZS5sZW5ndGgoKSk7Ci0gICAgSlNDOjpDb21wbGV0aW9uIGNvbXBs
ZXRpb24gPSBKU0M6OmV2YWx1YXRlKHN0YXRlLCBzY29wZUNoYWluLCBKU0M6Om1ha2VTb3VyY2Uo
c2NyaXB0KSwgdGhpc1ZhbHVlKTsKLSAgICBpZiAoKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgIT0g
SlNDOjpSZXR1cm5WYWx1ZSkgJiYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgIT0gSlNDOjpOb3Jt
YWwpKQotICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgSlNDOjpKU1Zh
bHVlIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRpb25SZXN1
bHQgPSBKU0M6OmV2YWx1YXRlKHN0YXRlLCBzY29wZUNoYWluLCBKU0M6Om1ha2VTb3VyY2Uoc2Ny
aXB0KSwgdGhpc1ZhbHVlLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgaWYgKGV2YWx1YXRp
b25FeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogCiAgICAgaW50IGRpc3Rh
bmNlID0gMDsKLSAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFu
dChzdGF0ZSwgcmVzdWx0LCBRTWV0YVR5cGU6OlZvaWQsICZkaXN0YW5jZSk7CisgICAgcmV0dXJu
IEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoc3RhdGUsIGV2YWx1YXRpb25S
ZXN1bHQsIFFNZXRhVHlwZTo6Vm9pZCwgJmRpc3RhbmNlKTsKICNlbGlmIFVTRShWOCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBRVmFyaWFudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106780</attachid>
            <date>2011-09-08 13:28:14 -0700</date>
            <delta_ts>2011-09-08 14:56:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67755-20110908132813.patch</filename>
            <type>text/plain</type>
            <size>50503</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNC
YXNlLmNwcDoKKyAgICAgICAgKEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1Nj
cmlwdFN5bnRheCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Mb2Fk
KToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAocnVuV2l0aFNjcmlw
dHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVy
cm9yOjp0b1N0cmluZyk6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAg
ICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcik6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6VGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorCiAyMDExLTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUFBDIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNiBAQAorCisjZW5k
aWYKKyNpZm5kZWYgTkRFQlVHCiBfSlNDaGVja1NjcmlwdFN5bnRheAogX0pTQ2xhc3NDcmVhdGUK
IF9KU0NsYXNzUmVsZWFzZQpAQCAtMTE5LDcgKzEyMiw3IEBAIF9fWk4zSlNDMTFKU0J5dGVBcnJh
eTEzc19kZWZhdWx0SW5mb0UKIF9fWk4zSlNDMTFKU0J5dGVBcnJheTE1Y3JlYXRlU3RydWN0dXJl
RVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOU183SlNWYWx1ZUVQS05T
XzlDbGFzc0luZm9FCiBfX1pOM0pTQzExSlNCeXRlQXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVQTlNf
OVN0cnVjdHVyZUVQTjNXVEY5Qnl0ZUFycmF5RQogX19aTjNKU0MxMVBhcnNlckFyZW5hNXJlc2V0
RXYKLV9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUUKK19fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUVQTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzExY3JlYXRlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDMTFyZWdFeHBGbGFnc0VSS05TXzdVU3RyaW5nRQogX19aTjNK
U0MxMkRhdGVJbnN0YW5jZTZzX2luZm9FCkBAIC0xMzUsNiArMTM4LDcgQEAgX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hh
cmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRyYWNlRXYK
IF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgorX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFTlNfOEhlYXBTaXplRQogX19a
TjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q2c19pbmZvRQpA
QCAtMjE3LDYgKzIyMSw3IEBAIF9fWk4zSlNDMjNBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjRkdW1w
RXYKIF9fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDMjNzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNo
RW50cnlFUE5TXzhKU09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TXzEySlNHbG9iYWxEYXRh
RVBOU18xNEpTR2xvYmFsT2JqZWN0RQorX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjZzX2luZm9FCiBfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yRVBOU185RXhlY1N0
YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VS
TlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQpAQCAtMzI2LDcgKzMz
MSw3IEBAIF9fWk4zSlNDOEpTT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDOFByb2ZpbGVyMTNzdG9w
UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzhQcm9maWxl
cjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlND
OFByb2ZpbGVyOHByb2ZpbGVyRXYKLV9fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBO
U18xNFNjb3BlQ2hhaW5Ob2RlRVJLTlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRQorX19aTjNK
U0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNv
dXJjZUNvZGVFTlNfN0pTVmFsdWVFUFM3XwogX19aTjNKU0M4aXNab21iaWVFUEtOU182SlNDZWxs
RQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNKU0M5Q29kZUJsb2NrRDJFdgpAQCAtNjE4
LDcgKzYyMywzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpTU3RyaW5nRQog
X2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0
eQotCi0jaWZuZGVmIE5ERUJVRwotX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnlFdgotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
OTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDEwICsyNjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkxvYQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAg
Q29tcGxldGlvbiByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEo
KSwgZmlsZU5hbWUpKTsKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICAKKyAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uo
c2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRh
eChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0yNzgsMTEgKzI4MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAg
IHN0b3BXYXRjaC5zdGFydCgpOwotICAgIENvbXBsZXRpb24gcmVzdWx0ID0gY2hlY2tTeW50YXgo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmls
ZU5hbWUpKTsKKworICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOworICAgIGJvb2wgdmFsaWRT
eW50YXggPSBjaGVja1N5bnRheChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksICZzeW50YXhFeGNlcHRpb24pOwogICAgIHN0b3BX
YXRjaC5zdG9wKCk7CiAKLSAgICBpZiAocmVzdWx0LmNvbXBsVHlwZSgpID09IFRocm93KQotICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIHJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXZhbGlkU3lu
dGF4KQorICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsK
IH0KIApAQCAtNDM2LDEzICs0NDAsMTQgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xv
YmFsT2JqZWN0KgogCiAgICAgICAgIGdsb2JhbERhdGEuc3RhcnRTYW1wbGluZygpOwogCi0gICAg
ICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3Jp
cHQsIGZpbGVOYW1lKSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24u
Y29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAg
ICBpZiAoZHVtcCkgewotICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBlKCkgPT0g
VGhyb3cpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21wbGV0
aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgICAg
ICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIGNvbXBsZXRpb24u
dmFsdWUoKS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBnbG9iYWxEYXRhLnN0b3BTYW1wbGluZygpOwpAQCAtNDczLDcgKzQ3OCw4
IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobGluZVswXSkKICAgICAgICAgICAgIGFkZF9oaXN0b3J5KGxp
bmUpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VT
b3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSk7CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwg
bWFrZVNvdXJjZShsaW5lLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICAgICAgZnJlZShsaW5lKTsKICNlbHNlCiAgICAgICAgIHByaW50Zigi
JXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CkBAIC00ODgsMTIgKzQ5NCwxNCBAQCBzdGF0aWMgdm9p
ZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGlmIChsaW5lLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAnKTsKLSAgICAg
ICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGxpbmUu
ZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpKTsKKworICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCi0gICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlw
ZSgpID09IFRocm93KQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBjb21w
bGV0aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS50b1N0cmluZyhn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBw
cmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCktPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNCYXNlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUg
IkFQSUNhc3QuaCIKICNpbmNsdWRlICJBUElTaGltcy5oIgotI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKICNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
ICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KQEAgLTUyLDE3ICs1MSwxOSBAQCBK
U1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0UmVmCiAgICAgLy8gZXZhbHVhdGUg
c2V0cyAidGhpcyIgdG8gdGhlIGdsb2JhbCBvYmplY3QgaWYgaXQgaXMgTlVMTAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAg
ICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+dXN0cmluZygpLCBzb3Vy
Y2VVUkwtPnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBDb21wbGV0aW9uIGNv
bXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZSwganNUaGlzT2JqZWN0KTsKIAotICAgIGlm
IChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7CisgICAgSlNWYWx1ZSBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNv
dXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGNvbXBsZXRpb24udmFsdWUoKSk7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChjb21wbGV0aW9uLnZhbHVlKCkpCi0gICAgICAg
IHJldHVybiB0b1JlZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOwotICAgIAorICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJldHVyblZhbHVlKTsKKwog
ICAgIC8vIGhhcHBlbnMsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBvbmx5IHN0YXRlbWVudCBpcyBh
biBlbXB0eSAoJzsnKSBzdGF0ZW1lbnQKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmlu
ZWQoKSk7CiB9CkBAIC03MywxMyArNzQsMTYgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpT
Q29udGV4dFJlZiBjdAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAgICBT
b3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT51c3RyaW5nKCksIHNvdXJjZVVS
TC0+dXN0cmluZygpLCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IGNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBzb3VyY2UpOwotICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KSB7
CisgICAgCisgICAgSlNWYWx1ZSBzeW50YXhFeGNlcHRpb247CisgICAgYm9vbCBpc1ZhbGlkU3lu
dGF4ID0gY2hlY2tTeW50YXgoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCksIHNvdXJjZSwgJnN5bnRheEV4Y2VwdGlvbik7CisKKyAgICBpZiAoIWlzVmFsaWRTeW50YXgp
IHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDk0NzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAg
RVhQT1JUUwogICAgID8/MVdlYWtIYW5kbGVPd25lckBKU0NAQFVBRUBYWgogICAgID8/OEpTQ0BA
WUFfTkFCVlVTdHJpbmdAMEAwQFoKICAgICA/PzhXVEZAQFlBX05BQlZDU3RyaW5nQDBAMEBaCisg
ICAgP2NoZWNrU3ludGF4QEpTQ0BAWUFfTlBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJjZUNvZGVAMUBQ
QVZKU1ZhbHVlQDFAQFoKKyAgICA/ZXZhbHVhdGVASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVj
U3RhdGVAMUBQQVZTY29wZUNoYWluTm9kZUAxQEFCVlNvdXJjZUNvZGVAMUBWMjFAUEFWMjFAQFoK
ICAgICA/RWNtYVNjcmlwdENvbnZlcnRlckBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVf
Y29udmVyc2lvbkBXVEZAQFNBQUJWMTIzQFhaCiAgICAgP1RvRXhwb25lbnRpYWxARG91YmxlVG9T
dHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVp
bGRlckAyM0BAWgogICAgID9Ub0ZpeGVkQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9j
b252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKQEAgLTgwLDcgKzgy
LDYgQEAgRVhQT1JUUwogICAgID9jaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uQFN0cnVjdHVyZUBK
U0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJAUEFWMTJAVkpTVmFsdWVAMkBAWgogICAgID9j
aGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkV4ZWNTdGF0
ZUAyQEBaCiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVyQEpTQ0BA
Q0FYUEFWSlNHbG9iYWxEYXRhQDJAQFoKLSAgICA/Y2hlY2tTeW50YXhASlNDQEBZQT9BVkNvbXBs
ZXRpb25AMUBQQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAQFoKICAgICA/Y2hlY2tzdW1A
TUQ1QFdURkBAUUFFWEFBVj8kVmVjdG9yQEUkMEJBQEAyQEBaCiAgICAgP2NsYXNzTmFtZUBKU09i
amVjdEBKU0NAQFVCRT9BVlVTdHJpbmdAMkBYWgogICAgID9jbGVhckBTb3VyY2VQcm92aWRlckNh
Y2hlQEpTQ0BAUUFFWFhaCkBAIC0xNjAsNyArMTYxLDYgQEAgRVhQT1JUUwogICAgID9lcXVhbEBJ
ZGVudGlmaWVyQEpTQ0BAU0FfTlBCVlN0cmluZ0ltcGxAV1RGQEBQQkRAWgogICAgID9lcXVhbFVU
RjE2V2l0aFVURjhAVW5pY29kZUBXVEZAQFlBX05QQl9XMFBCRDFAWgogICAgID9ldmFsdWF0ZUBE
ZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVkpTVmFsdWVAMkBBQlZVU3RyaW5nQDJAQUFWMzJA
QFoKLSAgICA/ZXZhbHVhdGVASlNDQEBZQT9BVkNvbXBsZXRpb25AMUBQQVZFeGVjU3RhdGVAMUBQ
QVZTY29wZUNoYWluTm9kZUAxQEFCVlNvdXJjZUNvZGVAMUBWSlNWYWx1ZUAxQEBaCiAgICAgP2V4
Y2x1ZGVAUHJvZmlsZUBKU0NAQFFBRVhQQlZQcm9maWxlTm9kZUAyQEBaCiAgICAgP2Zhc3RDYWxs
b2NAV1RGQEBZQVBBWElJQFoKICAgICA/ZmFzdEZyZWVAV1RGQEBZQVhQQVhAWgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwOCw4ICs3MDgsNyBAQCBORVZFUl9JTkxJ
TkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgICAgICAgICBhZGRFcnJvckluZm8o
Y2FsbEZyYW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNl
KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNl
cHRpb24tPmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgaXNJbnRlcnJ1cHQgPSBleGNlcHRpb25U
eXBlID09IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZDsKKyAgICAg
ICAgaXNJbnRlcnJ1cHQgPSAoZXhjZXB0aW9uLT5pbmhlcml0cygmSW50ZXJydXB0ZWRFeGVjdXRp
b25FcnJvcjo6c19pbmZvKSB8fCBleGNlcHRpb24tPmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3I6OnNfaW5mbykpOwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIg
PSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9u
IDk0NzE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDQ3ICszNCw1OSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Q29tcGxldGlvbiBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSkKK2Jvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9jayBs
b2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxl
ID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJv
Z3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMs
IHNvdXJjZSk7CiAgICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y2hlY2tTeW50YXgoZXhl
Yyk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXJy
b3IpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCisg
ICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLUNvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRo
aXNWYWx1ZSkKK0pTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7
CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhy
ZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsK
ICAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5n
bG9iYWxEYXRhKCkuZXhjZXB0aW9uOwotICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uID0gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXhjZXB0
aW9uKTsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CisgICAgICAgICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgICAgICAgICAg
KnJldHVybmVkRXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IEpTVmFsdWUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGlmICghdGhp
c1ZhbHVlIHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICB0aGlzVmFs
dWUgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmog
PSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwotCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBl
eGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW0sIGV4ZWMsIHNjb3BlQ2hhaW4sIHRo
aXNPYmopOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFs
dWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgeworICAgICAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGNl
cHRpb247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICB9CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBUaHJv
dzsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbi5pc09iamVjdCgpKQotICAgICAgICAgICAgZXhjZXB0
aW9uVHlwZSA9IGFzT2JqZWN0KGV4Y2VwdGlvbiktPmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAg
cmV0dXJuIENvbXBsZXRpb24oZXhjZXB0aW9uVHlwZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwg
cmVzdWx0KTsKKworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uaAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMyICszMSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNvdXJj
ZUNvZGU7CiAKLSAgICBlbnVtIENvbXBsVHlwZSB7IE5vcm1hbCwgQnJlYWssIENvbnRpbnVlLCBS
ZXR1cm5WYWx1ZSwgVGhyb3csIEludGVycnVwdGVkLCBUZXJtaW5hdGVkIH07Ci0KLSAgICAvKgot
ICAgICAqIENvbXBsZXRpb24gb2JqZWN0cyBhcmUgdXNlZCB0byBjb252ZXkgdGhlIHJldHVybiBz
dGF0dXMgYW5kIHZhbHVlCi0gICAgICogZnJvbSBmdW5jdGlvbnMuCi0gICAgICovCi0gICAgY2xh
c3MgQ29tcGxldGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlw
ZSB0eXBlID0gTm9ybWFsLCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQotICAgICAgICAgICAg
OiBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQotICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgdikgeyBtX3ZhbHVlID0gdjsgfQot
ICAgICAgICBib29sIGlzVmFsdWVDb21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNW
YWx1ZSBtX3ZhbHVlOwotICAgIH07Ci0KLSAgICBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1Zh
bHVlID0gSlNWYWx1ZSgpKTsKKyAgICBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKKyAgICBKU1ZhbHVlIGV2YWx1
YXRlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFs
dWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw1NCArNDEsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEludGVycnVw
dGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQot
ICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIHN0YXRpYyBJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQot
ICAgIHsKLSAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFs
bG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwotICAgICAgICBlcnJvci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Citj
b25zdCBDbGFzc0luZm8gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvID0geyAiSW50
ZXJydXB0ZWRFeGVjdXRpb25FcnJvciIsIDAsIDAsIDAgfTsKIAotICAgIHZpcnR1YWwgQ29tcGxU
eXBlIGV4Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQorVVN0cmlu
ZyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAor
eworICAgIHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOwor
fQogCi0gICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0
dXJuICJKYXZhU2NyaXB0IGV4ZWN1dGlvbiBleGNlZWRlZCB0aW1lb3V0LiI7IH0KLX07Citjb25z
dCBDbGFzc0luZm8gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8gPSB7ICJUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IiLCAwLCAwLCAwIH07CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitVU3RyaW5n
IFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6dG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKIHsK
LSAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRh
KTsKKyAgICByZXR1cm4gIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIjsKIH0KIAot
Y2xhc3MgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewotcHJpdmF0ZToKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS50ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgewotICAg
IH0KLQotcHVibGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAg
c3RhdGljIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKLSAgICB7Ci0gICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3Ig
PSBuZXcgKGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEu
aGVhcCkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKLSAgICAgICAgZXJy
b3ItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIFRlcm1pbmF0ZWQ7IH0KIAotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3Rh
dGUqKSBjb25zdCB7IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iOyB9
Ci19OworSlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKK30KIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAko
cmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDM0ICsyOSw3OSBAQAogI2lmbmRlZiBF
eGNlcHRpb25IZWxwZXJzX2gKICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKLSNpbmNsdWRl
ICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LSAgICBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIElk
ZW50aWZpZXI7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwotICAgIGNsYXNzIEpTTm90QW5PYmplY3RFcnJvclN0dWI7Ci0gICAgY2xhc3MgSlNPYmpl
Y3Q7Ci0gICAgY2xhc3MgTm9kZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0gICAgCi0gICAg
SlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0
YSopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
R2xvYmFsRGF0YSopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhl
Y1N0YXRlKik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0dsb2Jh
bE9iamVjdCopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9i
amVjdEVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZh
bGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSk7Ci0gICAg
SlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLSAgICBKU09iamVjdCogY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVu
dChFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlSW50ZXJydXB0
ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKK0pTT2JqZWN0KiBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7CitKU09iamVjdCogY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7CitKU09iamVjdCogY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihKU0dsb2JhbE9iamVjdCopOworSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOworSlNPYmplY3QqIGNyZWF0
ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CitKU09iamVjdCogY3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgY2hhciogb3AsIEpTVmFsdWUpOwor
SlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OworSlNPYmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OworSlNPYmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0
YXRlKiwgY29uc3QgVVN0cmluZyYpOworCitKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVycm9y
KEV4ZWNTdGF0ZSopOworSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0
ZSopOworCisKK2NsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7Citwcml2YXRlOgorICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgp
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRl
KikgY29uc3Q7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KworICAgIHN0YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
ciogZXJyb3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihn
bG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwor
ICAgICAgICBlcnJvci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVy
biBlcnJvcjsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0K
KworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9Owor
CitjbGFzcyBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7Citwcml2YXRlOgorICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0Owor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0
aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgIHsKKyAgICAgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5l
dyAoYWxsb2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFw
KSkgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBlcnJvci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KIAotICAgIEpTT2JqZWN0
KiB0aHJvd091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAgSlNPYmplY3QqIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU19FWFBPUlREQVRB
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw4ICsyMTYsOCBAQCBKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgq
dGhpcywgU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFj
dGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNl
dCgqdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7Ci0gICAgaW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpT
Tm9uRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAg
ICB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vbkZpbmFs
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW50ZXJy
dXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB0ZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdGF0
aWNTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdHJpY3RFdmFsQWN0aXZhdGlvblN0
cnVjdHVyZS5zZXQoKnRoaXMsIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNT
dHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzSW5m
by5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29tcGxldGlv
bi5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIlByb3BlcnR5U2xvdC5oIgpAQCAtMjE5LDggKzIxOCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmUtPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRl
bnNpYmxlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlzRXh0ZW5zaWJsZSgpOyB9CiAKLSAgICAg
ICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRocm93
OyB9Ci0KICAgICAgICAgdm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgICAgICBib29sIGlzVXNpbmdJbmxpbmVTdG9yYWdlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fcHJvcGVydHlTdG9yYWdl
KSA9PSBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4odGhpcyArIDEpOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEds
dWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDktMDcg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIENvbXBs
ZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAg
IChKU1J1bjo6RXZhbHVhdGUpOgorICAgICAgICAoSlNSdW46OkNoZWNrU3ludGF4KToKKyAgICAg
ICAgKiBKU1J1bi5oOgorICAgICAgICAqIEphdmFTY3JpcHRHbHVlLmNwcDoKKyAgICAgICAgKEpT
UnVuRXZhbHVhdGUpOgorCiAyMDExLTA5LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2Mjcg
YW5kIHI5NDYzMi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gOTQ3MTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NywxMiArNjcsMTIgQEAgSlNHbG9iYWxPYmplY3QqIEpTUnVuOjpHbG9iYWxPYmplY3QoKSBjbwog
ICAgIHJldHVybiBmR2xvYmFsT2JqZWN0LmdldCgpOwogfQogCi1Db21wbGV0aW9uIEpTUnVuOjpF
dmFsdWF0ZSgpCitKU1ZhbHVlIEpTUnVuOjpFdmFsdWF0ZShKU1ZhbHVlKiBleHBjZXB0aW9uKQog
ewotICAgIHJldHVybiBKU0M6OmV2YWx1YXRlKGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
Zkdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsK
KyAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZH
bG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291cmNlKSwgSlNW
YWx1ZSgpLCBleHBjZXB0aW9uKTsKIH0KIAogYm9vbCBKU1J1bjo6Q2hlY2tTeW50YXgoKQogewot
ICAgIHJldHVybiBKU0M6OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
bWFrZVNvdXJjZShmU291cmNlKSkuY29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgcmV0dXJuIEpT
Qzo6Y2hlY2tTeW50YXgoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKGZT
b3VyY2UpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCShyZXZpc2lvbiA5NDcxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2
MSw3IEBAIGNsYXNzIEpTUnVuIDogcHVibGljIEpTQmFzZSB7CiAKICAgICAgICAgVVN0cmluZyBH
ZXRTb3VyY2UoKSBjb25zdDsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIEdsb2JhbE9iamVjdCgp
IGNvbnN0OwotICAgICAgICBDb21wbGV0aW9uIEV2YWx1YXRlKCk7CisgICAgICAgIEpTVmFsdWUg
RXZhbHVhdGUoSlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAgYm9vbCBDaGVja1N5bnRheCgp
OwogICAgICAgICBKU0ZsYWdzIEZsYWdzKCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0R2x1ZS9KYXZhU2NyaXB0R2x1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkocmV2aXNpb24gOTQ3MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTIsMTQgKzI5MiwxNCBAQCBKU09iamVjdFJlZiBKU1J1bkV2YWx1YXRlKEpTUnVuUmVm
IHJlZikKICAgICBpZiAocHRyKQogICAgIHsKICAgICAgICAgSlNHbHVlQVBJRW50cnkgZW50cnk7
Ci0gICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IHB0ci0+RXZhbHVhdGUoKTsKLSAgICAg
ICAgaWYgKGNvbXBsZXRpb24uaXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChjb21wbGV0aW9u
LnZhbHVlKCksIHB0ci0+R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBUaHJvdykKKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSBy
ZXR1cm5WYWx1ZSA9IHB0ci0+RXZhbHVhdGUoJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAg
ICAKKyAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IChKU09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QoZXZhbHVhdGlvbkV4
Y2VwdGlvbiwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgSlNGbGFncyBmbGFncyA9IHB0ci0+RmxhZ3MoKTsKICAgICAgICAgICAg
IGlmIChmbGFncyAmIGtKU0ZsYWdEZWJ1ZykKICAgICAgICAgICAgIHsKQEAgLTMxMSw2ICszMTEs
MTAgQEAgSlNPYmplY3RSZWYgSlNSdW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChy
ZXR1cm5WYWx1ZSwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
OTQ3NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMSBAQAorMjAxMS0wOS0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZl
ciBsaWtlZCBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njc3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4ZWNT
dGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxk
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViU2Ny
aXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29i
amVjdC5jcHA6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisKIDIwMTEt
MDktMDcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDY3NCBhbmQgcjk0Njg5LgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA5NDcx
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJYUGF0aEV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNGdW5jdGlvbi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTcwLDcgKzE3
MSw3IEBAIGRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCBy
ZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikKIHsKLSAg
ICBpZiAoZXhjZXB0aW9uLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+ZXhjZXB0
aW9uVHlwZSgpID09IFRlcm1pbmF0ZWQpCisgICAgaWYgKGV4Y2VwdGlvbi5pbmhlcml0cygmVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICBV
U3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNFdmVudFRh
cmdldC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0Nv
dW50ZXIuaD4KIApAQCAtMTMzLDcgKzEzNCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudChTY3JpcHQKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGJvb2wg
dGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVj
LT5leGNlcHRpb24oKS5pc09iamVjdCgpICYmIGFzT2JqZWN0KGV4ZWMtPmV4Y2VwdGlvbigpKS0+
ZXhjZXB0aW9uVHlwZSgpID09IFRlcm1pbmF0ZWQpOworICAgICAgICAgICAgYm9vbCB0ZXJtaW5h
dG9yQ2F1c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2Vw
dGlvbigpLmluaGVyaXRzKCZUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpOwogICAg
ICAgICAgICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgZ2xvYmFsRGF0YS50ZXJt
aW5hdG9yLnNob3VsZFRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdv
cmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmZvcmJpZEV4
ZWN1dGlvbigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiA5NDcxNykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgbG9uZyBp
ZCkKIHsKLSAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0cmluZ1RvVVN0
cmluZyhzb3VyY2UpKTsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
CisgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmco
c291cmNlKSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7CiAgICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xvYmFsVGhp
c1ZhbHVlKCk7Ci0gICAgQ29tcGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpl
dmFsdWF0ZShzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNv
dXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSk7Ci0gICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgIT0g
SlNDOjpOb3JtYWwgJiYgY29tcC5jb21wbFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKQorCisg
ICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgZXZhbHVhdGlvblJl
dHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShzY3JpcHRTdGF0ZSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNW
YWx1ZSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9u
KQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZh
bHVlID0gY29tcC52YWx1ZSgpOworCisgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVh
dGlvblJldHVyblZhbHVlOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb25WYWx1ZSwgY2FsbERhdGEpOwogICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24gOTQ3MTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBKU01haW5UaHJlYWRFeGVjU3RhdGVf
aAogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9Db21wbGV0
aW9uLmg+CiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjZW5k
aWYKQEAgLTUxLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OmNhbGwo
ZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdz
KTsKICAgICB9OwogCi0gICAgc3RhdGljIEpTQzo6Q29tcGxldGlvbiBldmFsdWF0ZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291
cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKQorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFpbk5v
ZGUqIGNoYWluLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01haW5U
aHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpl
dmFsdWF0ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUpOworICAgICAgICByZXR1cm4g
SlNDOjpldmFsdWF0ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7
CiAgICAgfTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCwyMiArMTM4LDIyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
SW4KIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkws
IHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkpOwogCisgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0
aW9uOworCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0g
ICAgQ29tcGxldGlvbiBjb21wID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVj
LCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwganNTb3Vy
Y2VDb2RlLCBzaGVsbCk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9i
YWxTY29wZUNoYWluKCksIGpzU291cmNlQ29kZSwgc2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKICAgICBleGVjLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdChjb29raWUpOwogCi0g
ICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAuY29tcGxUeXBlKCkgPT0g
UmV0dXJuVmFsdWUpIHsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgeworICAgICAgICBy
ZXBvcnRFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIG1fc291
cmNlVVJMID0gc2F2ZWRTb3VyY2VVUkw7Ci0gICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVj
LT5nbG9iYWxEYXRhKCksIGNvbXAudmFsdWUoKSk7CisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1
ZSgpOwogICAgIH0KIAotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93IHx8IGNvbXAu
Y29tcGxUeXBlKCkgPT0gSW50ZXJydXB0ZWQpCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVj
LCBjb21wLnZhbHVlKCkpOwotCiAgICAgbV9zb3VyY2VVUkwgPSBzYXZlZFNvdXJjZVVSTDsKLSAg
ICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCByZXR1cm5WYWx1ZSk7CiB9CiAKIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRl
cnByZXRlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvQ29tcGxldGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgogCkBAIC0xMzEsMzEgKzEzMSwzMCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpldmFsCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsK
LSAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIu
c3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLmpz
U291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgpKTsKLSAgICBtX3dvcmtl
ckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCisg
ICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRp
b25UeXBlID0gY29tcC5jb21wbFR5cGUoKTsKKyAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5n
bG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmds
b2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250
ZXh0V3JhcHBlci5nZXQoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIG1fd29ya2VyQ29u
dGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBp
ZiAoY29tcGxldGlvblR5cGUgPT0gVGVybWluYXRlZCB8fCBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LT5nbG9iYWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgeworICAgIGlmICgo
ZXZhbHVhdGlvbkV4Y2VwdGlvbiAmJiBldmFsdWF0aW9uRXhjZXB0aW9uLmluaGVyaXRzKCZUZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3I6OnNfaW5mbykpIHx8ICBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LT5nbG9iYWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgewogICAgICAgICBm
b3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQog
Ci0gICAgaWYgKGNvbXBsZXRpb25UeXBlID09IE5vcm1hbCB8fCBjb21wbGV0aW9uVHlwZSA9PSBS
ZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCptX2dsb2JhbERhdGEsIGNv
bXAudmFsdWUoKSk7Ci0KLSAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gVGhyb3cpIHsKKyAgICBp
ZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwog
ICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBz
b3VyY2VDb2RlLnVybCgpLnN0cmluZygpOwogICAgICAgICBpZiAobV93b3JrZXJDb250ZXh0LT5z
YW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSkK
ICAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3JpcHRWYWx1ZSgqbV9nbG9i
YWxEYXRhLCBjb21wLnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFNjcmlwdFZh
bHVlKCptX2dsb2JhbERhdGEsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIH0KLSAgICByZXR1
cm4gU2NyaXB0VmFsdWUoKTsKKworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRh
LCByZXR1cm5WYWx1ZSk7CisKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRF
eGNlcHRpb24oU2NyaXB0VmFsdWUgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDk0NzE3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMyNSwyOCArMzI1LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0
cmluZyAqKXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24g
Y29tcGxldGlvbiA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoW3NlbGYgX3Jvb3RP
YmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBbc2VsZiBfcm9vdE9iamVjdF0t
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNj
cmlwdCkpLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQp
KSwgSlNDOjpKU1ZhbHVlKCksIDApOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7Ci0gICAgQ29tcGxUeXBl
IHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotICAgIAotICAgIGlmICh0eXBlID09IE5v
cm1hbCkgewotICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwot
ICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotICAgIH0KLSAgICAKLSAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0
IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBf
b3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOworCisgICAg
aWQgcmVzdWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6
cmV0dXJuVmFsdWUgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9v
dE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwogICAgIAogICAgIF9kaWRFeGVjdXRlKHNlbGYp
OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lv
biA5NDcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3NCwyMCArMjc0LDEyIEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAgaW5z
dGFuY2UsIE5QT2JqZWMKICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZlcnROUFN0cmluZ1RvVVRGMTYo
cyk7CiAgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEoJmV4ZWMtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIAogICAgICAgICBnbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dGFydCgpOwotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwg
SlNDOjpKU1ZhbHVlKCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFs
dWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0
cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNr
ZXIuc3RvcCgpOwotICAgICAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBl
KCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKHR5cGUg
PT0gTm9ybWFsKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVk
KCk7CiAKLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0LCB2YXJp
YW50KTsKKyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUs
IHZhcmlhbnQpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29i
amVjdC5tbQkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2LDggKzMwNiw2IEBAIGpvYmplY3Qg
SmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KIGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpl
dmFsKGpzdHJpbmcgc2NyaXB0KSBjb25zdAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFK
U09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkpOwot
ICAgIAotICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICAKQEAgLTMxNiwxOCArMzE0LDEwIEBAIGpvYmplY3QgSmF2YUpTT2Jq
ZWN0OjpldmFsKGpzdHJpbmcgc2NyaXAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7
Ci0gICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2NyaXB0KS5pbXBsKCkp
LCBKU0M6OkpTVmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3Jp
cHQpLmltcGwoKSkpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlv
bi5jb21wbFR5cGUoKTsKLSAgICAKLSAgICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKLSAgICAgICAg
cmVzdWx0ID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVj
dCAocmVzdWx0KTsKKworICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsK
IH0KIAogam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIG1lbWJlck5hbWUp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDc0MikKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTA3ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBDb21wbGV0
aW9uIG9iamVjdCBmcm9tIEpTQywgSSBoYXZlIG5ldmVyIGxpa2VkIGl0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGlt
ZU9iamVjdE1hcDo6ZXZhbHVhdGUpOgorCiAyMDExLTA5LTA3ICBBbGV4ZWkgU3ZpdGtpbmUgIDxh
c3ZpdGtpbmVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCB0ZXN0IGluZnJhc3RydWN0dXJl
IHRvIHRlc3QgcnViYmVyLWJhbmRpbmcgb3ZlcmhhbmcgZHJhd2luZyBhbG9uZyB3aXRoIGxheW91
dCB0ZXN0cyBmb3IgZXhpc3RpbmcgQ2hyb21pdW0gTWFjIG92ZXJoYW5nIGRyYXdpbmcgaW4gdGhl
IG5vbi1ncHUgcGF0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShy
ZXZpc2lvbiA5NDcxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9D
b21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VDb2RlLmg+CkBAIC0xODgsMjEgKzE4OSw5IEBAIGJvb2wgTlBSdW50aW1lT2JqZWN0TWFwOjpl
dmFsdWF0ZShOUE9iamUKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmpl
Y3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIENvbXBsZXRpb24gY29tcGxl
dGlvbiA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWlu
KCksIG1ha2VTb3VyY2UoVVN0cmluZyhzY3JpcHRTdHJpbmcuaW1wbCgpKSksIHRoaXNWYWx1ZSk7
CisgICAgSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoVVN0cmluZyhzY3JpcHRTdHJpbmcu
aW1wbCgpKSksIHRoaXNWYWx1ZSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGlt
ZW91dENoZWNrZXIuc3RvcCgpOwogCi0gICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlID0gY29t
cGxldGlvbi5jb21wbFR5cGUoKTsKLQotICAgIEpTVmFsdWUgcmVzdWx0VmFsdWU7Ci0gICAgaWYg
KGNvbXBsZXRpb25UeXBlID09IE5vcm1hbCkgewotICAgICAgICByZXN1bHRWYWx1ZSA9IGNvbXBs
ZXRpb24udmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkKLSAgICAgICAgICAgIHJl
c3VsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0VmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwotCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAK
ICAgICBjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFZhbHVlLCAqcmVzdWx0
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0
NzQyKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTEtMDktMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZW1vdmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2
ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorCiAy
MDExLTA5LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5NDYzMi4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDk0NzE3KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0ICJXZWJVSURlbGVnYXRl
LmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNMb2Nr
Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgpAQCAtODc1
LDE3ICs4NzYsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQog
ICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAK
ICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8g
RGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKGV4ZWMs
IGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdCkpOwot
Ci0gICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwot
ICAgIENvbXBsVHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKLQotICAgIEpTVmFs
dWUgcmVzdWx0OwotICAgIGlmICh0eXBlID09IE5vcm1hbCkKLSAgICAgICAgcmVzdWx0ID0gY29t
cGxldGlvbi52YWx1ZSgpOwogICAgIAotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQg
PSBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVj
LCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHQpKTsK
KyAgICAKKyAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9w
KCk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ3MTcpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
I2lmIFVTRShKU0MpCisjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCkBAIC03ODksMTYgKzc5MCwxNCBAQCBRVmFyaWFudCBRV2ViRWxlbWVudDo6ZXZhbHVhdGVK
YXZhU2NyaXB0CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluID0gc3RhdGUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpOwog
ICAgIEpTQzo6VVN0cmluZyBzY3JpcHQocmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIq
PihzY3JpcHRTb3VyY2UuZGF0YSgpKSwgc2NyaXB0U291cmNlLmxlbmd0aCgpKTsKLSAgICBKU0M6
OkNvbXBsZXRpb24gY29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUoc3RhdGUsIHNjb3BlQ2hhaW4s
IEpTQzo6bWFrZVNvdXJjZShzY3JpcHQpLCB0aGlzVmFsdWUpOwotICAgIGlmICgoY29tcGxldGlv
bi5jb21wbFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKSAmJiAoY29tcGxldGlvbi5jb21wbFR5
cGUoKSAhPSBKU0M6Ok5vcm1hbCkpCi0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogCi0gICAg
SlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICBpZiAoIXJlc3Vs
dCkKKyAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OkpTVmFs
dWUgZXZhbHVhdGlvblJlc3VsdCA9IEpTQzo6ZXZhbHVhdGUoc3RhdGUsIHNjb3BlQ2hhaW4sIEpT
Qzo6bWFrZVNvdXJjZShzY3JpcHQpLCB0aGlzVmFsdWUsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsK
KyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7
CiAKICAgICBpbnQgZGlzdGFuY2UgPSAwOwotICAgIHJldHVybiBKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0VmFsdWVUb1FWYXJpYW50KHN0YXRlLCByZXN1bHQsIFFNZXRhVHlwZTo6Vm9pZCwgJmRpc3Rh
bmNlKTsKKyAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudChz
dGF0ZSwgZXZhbHVhdGlvblJlc3VsdCwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOwogI2Vs
aWYgVVNFKFY4KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFFWYXJpYW50KCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106794</attachid>
            <date>2011-09-08 14:56:19 -0700</date>
            <delta_ts>2011-09-08 15:08:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67755-20110908145617.patch</filename>
            <type>text/plain</type>
            <size>50962</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTEtMDktMDggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIENvbXBsZXRpb24gb2JqZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBSZW1vdmVz
IHRoZSBDb21wbGV0aW9uIG9iamVjdCBhbmQgcmVwbGFjZXMgaXRzIHVzZSB3aXRoIG91dCBwYXJh
bWV0ZXIgZXhjZXB0aW9ucy4KKyAgICAgICAgLSBSZW1vdmUgQ29tcGxUeXBlIGFuZCB2aXJ0dWFs
IGV4Y2VwdGlvblR5cGUoKSBmdW5jdGlvbiBvbiBKU09iamVjdC4gUmVwbGFjZSB3aXRoCisgICAg
ICAgICAgQ2xhc3NJbmZvIGZvciBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yIGFuZCBUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAg
KEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1NjcmlwdFN5bnRheCk6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dGhyb3dFeGNl
cHRpb24pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAg
ICAgICAoZnVuY3Rpb25DaGVja1N5bnRheCk6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6Cisg
ICAgICAgIChydW5JbnRlcmFjdGl2ZSk6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisgICAgICAgICogcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
cjo6dG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OnRv
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oOgorICAgICAgICAoSlND
OjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yOjpJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKToK
KyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisKIDIwMTEtMDktMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQnVpbGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCShyZXZpc2lvbiA5NDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBfX1pOM0pTQzExSlNC
eXRlQXJyYXkxM3NfZGVmYXVsdEluZm9FCiBfX1pOM0pTQzExSlNCeXRlQXJyYXkxNWNyZWF0ZVN0
cnVjdHVyZUVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzE0SlNHbG9iYWxPYmplY3RFTlNfN0pTVmFs
dWVFUEtOU185Q2xhc3NJbmZvRQogX19aTjNKU0MxMUpTQnl0ZUFycmF5QzFFUE5TXzlFeGVjU3Rh
dGVFUE5TXzlTdHJ1Y3R1cmVFUE4zV1RGOUJ5dGVBcnJheUUKIF9fWk4zSlNDMTFQYXJzZXJBcmVu
YTVyZXNldEV2Ci1fX1pOM0pTQzExY2hlY2tTeW50YXhFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNv
dXJjZUNvZGVFCitfX1pOM0pTQzExY2hlY2tTeW50YXhFUE5TXzlFeGVjU3RhdGVFUktOU18xMFNv
dXJjZUNvZGVFUE5TXzdKU1ZhbHVlRQogX19aTjNKU0MxMWNyZWF0ZUVycm9yRVBOU185RXhlY1N0
YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzExcmVnRXhwRmxhZ3NFUktOU183VVN0cmluZ0UK
IF9fWk4zSlNDMTJEYXRlSW5zdGFuY2U2c19pbmZvRQpAQCAtMTM1LDYgKzEzNSw3IEBAIF9fWk4z
SlNDMTJKU0dsb2JhbERhdGExNHJlc2V0RGF0ZUNhY2hlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERh
dGExNHNoYXJlZEluc3RhbmNlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGExNWR1bXBSZWdFeHBU
cmFjZUV2CiBfX1pOM0pTQzEySlNHbG9iYWxEYXRhMjJjbGVhckJ1aWx0aW5TdHJ1Y3R1cmVzRXYK
K19fWk4zSlNDMTJKU0dsb2JhbERhdGEyM3JlbGVhc2VFeGVjdXRhYmxlTWVtb3J5RXYKIF9fWk4z
SlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzE1VGhyZWFkU3RhY2tUeXBlRU5TXzhIZWFwU2l6
ZUUKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGFEMUV2CiBfX1pOM0pTQzEyUmVnRXhwT2JqZWN0NnNf
aW5mb0UKQEAgLTIxNyw2ICsyMTgsNyBAQCBfX1pOM0pTQzIzQWJzdHJhY3RTYW1wbGluZ0NvdW50
ZXI0ZHVtcEV2CiBfX1pOM0pTQzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlFeGVjU3Rh
dGVFCiBfX1pOM0pTQzIzc2V0VXBTdGF0aWNGdW5jdGlvblNsb3RFUE5TXzlFeGVjU3RhdGVFUEtO
U185SGFzaEVudHJ5RVBOU184SlNPYmplY3RFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVy
dHlTbG90RQogX19aTjNKU0MyNER5bmFtaWNHbG9iYWxPYmplY3RTY29wZUMxRVJOU18xMkpTR2xv
YmFsRGF0YUVQTlNfMTRKU0dsb2JhbE9iamVjdEUKK19fWk4zSlNDMjRUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3I2c19pbmZvRQogX19aTjNKU0MyNGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvckVQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMjVldmFsdWF0ZUluR2xvYmFsQ2FsbEZyYW1lRVJLTlNfN1VT
dHJpbmdFUk5TXzdKU1ZhbHVlRVBOU18xNEpTR2xvYmFsT2JqZWN0RQogX19aTjNKU0MzNWNyZWF0
ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uRVBOU18xMkpTR2xvYmFsRGF0YUUKQEAgLTMy
Niw3ICszMjgsNyBAQCBfX1pOM0pTQzhKU09iamVjdDZzX2luZm9FCiBfX1pOM0pTQzhQcm9maWxl
cjEzc3RvcFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M4
UHJvZmlsZXIxNHN0YXJ0UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBf
X1pOM0pTQzhQcm9maWxlcjhwcm9maWxlckV2Ci1fX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNT
dGF0ZUVQTlNfMTRTY29wZUNoYWluTm9kZUVSS05TXzEwU291cmNlQ29kZUVOU183SlNWYWx1ZUUK
K19fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVJL
TlNfMTBTb3VyY2VDb2RlRU5TXzdKU1ZhbHVlRVBTN18KIF9fWk4zSlNDOGlzWm9tYmllRVBLTlNf
NkpTQ2VsbEUKIF9fWk4zSlNDOUNvZGVCbG9ja0QxRXYKIF9fWk4zSlNDOUNvZGVCbG9ja0QyRXYK
QEAgLTYxNyw3ICs2MTksMyBAQCBfX1pUVk4zSlNDOEpTT2JqZWN0RQogX19aVFZOM0pTQzhKU1N0
cmluZ0UKIF9qc2NvcmVfZmFzdG1hbGxvY19pbnRyb3NwZWN0aW9uCiBfa0pTQ2xhc3NEZWZpbml0
aW9uRW1wdHkKLQotI2lmbmRlZiBOREVCVUcKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGEyM3JlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5RXYKLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDk0ODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2MSwxMCArMjYxLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Mb2EKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSk7CiAKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwotICAgIENvbXBsZXRpb24gcmVzdWx0ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlw
dC5kYXRhKCksIGZpbGVOYW1lKSk7Ci0gICAgaWYgKHJlc3VsdC5jb21wbFR5cGUoKSA9PSBUaHJv
dykKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCByZXN1bHQudmFsdWUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQudmFsdWUoKSk7CisgICAgCisgICAgSlNWYWx1ZSBldmFs
dWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtl
U291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CisgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgIHRocm93RXJy
b3IoZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hl
Y2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjc4LDExICsyODAsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZQogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRj
aDsKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBDb21wbGV0aW9uIHJlc3VsdCA9IGNoZWNr
U3ludGF4KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNjcmlwdC5kYXRh
KCksIGZpbGVOYW1lKSk7CisKKyAgICBKU1ZhbHVlIHN5bnRheEV4Y2VwdGlvbjsKKyAgICBib29s
IHZhbGlkU3ludGF4ID0gY2hlY2tTeW50YXgoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1h
a2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCAmc3ludGF4RXhjZXB0aW9uKTsKICAg
ICBzdG9wV2F0Y2guc3RvcCgpOwogCi0gICAgaWYgKHJlc3VsdC5jb21wbFR5cGUoKSA9PSBUaHJv
dykKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCByZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCF2
YWxpZFN5bnRheCkKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBzeW50YXhFeGNlcHRpb24pOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRN
UygpKSk7CiB9CiAKQEAgLTQzNiwxMyArNDQwLDE0IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3Jp
cHRzKEdsb2JhbE9iamVjdCoKIAogICAgICAgICBnbG9iYWxEYXRhLnN0YXJ0U2FtcGxpbmcoKTsK
IAotICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBldmFsdWF0ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3Vy
Y2Uoc2NyaXB0LCBmaWxlTmFtZSkpOwotICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb21w
bGV0aW9uLmNvbXBsVHlwZSgpICE9IFRocm93OworICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRp
b24pOworICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
ICAgICAgICAgaWYgKGR1bXApIHsKLSAgICAgICAgICAgIGlmIChjb21wbGV0aW9uLmNvbXBsVHlw
ZSgpID09IFRocm93KQotICAgICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwg
Y29tcGxldGlvbi52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlv
bi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCBjb21w
bGV0aW9uLnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFs
dWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgZ2xvYmFsRGF0YS5zdG9wU2FtcGxpbmcoKTsKQEAgLTQ3Myw3
ICs0NzgsOCBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGxpbmVbMF0pCiAgICAgICAgICAgICBhZGRfaGlz
dG9yeShsaW5lKTsKLSAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigp
LCBtYWtlU291cmNlKGxpbmUsIGludGVycHJldGVyTmFtZSkpOworICAgICAgICBKU1ZhbHVlIGV2
YWx1YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0
ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNo
YWluKCksIG1ha2VTb3VyY2UobGluZSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1ZSgpLCAmZXZh
bHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIGZyZWUobGluZSk7CiAjZWxzZQogICAgICAgICBw
cmludGYoIiVzIiwgaW50ZXJhY3RpdmVQcm9tcHQpOwpAQCAtNDg4LDEyICs0OTQsMTQgQEAgc3Rh
dGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICBpZiAobGluZS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbGluZS5hcHBlbmQoJ1wwJyk7
Ci0gICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShsaW5lLmRhdGEoKSwgaW50ZXJwcmV0ZXJOYW1lKSk7CisKKyAgICAgICAgSlNWYWx1ZSBldmFs
dWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFp
bigpLCBtYWtlU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCks
ICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgotICAgICAgICBpZiAoY29tcGxldGlvbi5j
b21wbFR5cGUoKSA9PSBUaHJvdykKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xu
IiwgY29tcGxldGlvbi52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAg
ICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24udG9T
dHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIiVzXG4iLCBjb21wbGV0aW9uLnZhbHVlKCkudG9T
dHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDk0ODA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNp
bmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiQVBJU2hpbXMuaCIKLSNpbmNsdWRlICJDb21w
bGV0aW9uLmgiCiAjaW5jbHVkZSAiT3BhcXVlSlNTdHJpbmcuaCIKICNpbmNsdWRlICJTb3VyY2VD
b2RlLmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CkBAIC01MiwxNyArNTEs
MTkgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgIC8vIGV2
YWx1YXRlIHNldHMgInRoaXMiIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGlmIGl0IGlzIE5VTEwKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpOwogICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnVzdHJpbmco
KSwgc291cmNlVVJMLT51c3RyaW5nKCksIHN0YXJ0aW5nTGluZU51bWJlcik7Ci0gICAgQ29tcGxl
dGlvbiBjb21wbGV0aW9uID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGds
b2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2UsIGpzVGhpc09iamVjdCk7CiAK
LSAgICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBUaHJvdykgeworICAgIEpTVmFsdWUg
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFp
bigpLCBzb3VyY2UsIGpzVGhpc09iamVjdCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworCisgICAg
aWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBjb21wbGV0aW9uLnZhbHVlKCkpOworICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24pOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoY29tcGxldGlvbi52YWx1ZSgpKQot
ICAgICAgICByZXR1cm4gdG9SZWYoZXhlYywgY29tcGxldGlvbi52YWx1ZSgpKTsKLSAgICAKKyAg
ICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgIHJldHVybiB0b1JlZihleGVjLCByZXR1cm5WYWx1
ZSk7CisKICAgICAvLyBoYXBwZW5zLCBmb3IgZXhhbXBsZSwgd2hlbiB0aGUgb25seSBzdGF0ZW1l
bnQgaXMgYW4gZW1wdHkgKCc7Jykgc3RhdGVtZW50CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpz
VW5kZWZpbmVkKCkpOwogfQpAQCAtNzMsMTMgKzc0LDE2IEBAIGJvb2wgSlNDaGVja1NjcmlwdFN5
bnRheChKU0NvbnRleHRSZWYgY3QKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOwog
CiAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+dXN0cmluZygpLCBz
b3VyY2VVUkwtPnVzdHJpbmcoKSwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKLSAgICBDb21wbGV0aW9u
IGNvbXBsZXRpb24gPSBjaGVja1N5bnRheChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSwgc291cmNlKTsKLSAgICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBU
aHJvdykgeworICAgIAorICAgIEpTVmFsdWUgc3ludGF4RXhjZXB0aW9uOworICAgIGJvb2wgaXNW
YWxpZFN5bnRheCA9IGNoZWNrU3ludGF4KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBzb3VyY2UsICZzeW50YXhFeGNlcHRpb24pOworCisgICAgaWYgKCFpc1ZhbGlk
U3ludGF4KSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgY29tcGxldGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihleGVjLCBzeW50YXhFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiA5
NDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw4IEBAIEVYUE9SVFMKICAgICA/PzFXZWFrSGFuZGxlT3duZXJASlNDQEBVQUVAWFoKICAgICA/
PzhKU0NAQFlBX05BQlZVU3RyaW5nQDBAMEBaCiAgICAgPz84V1RGQEBZQV9OQUJWQ1N0cmluZ0Aw
QDBAWgorICAgID9jaGVja1N5bnRheEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VD
b2RlQDFAUEFWSlNWYWx1ZUAxQEBaCisgICAgP2V2YWx1YXRlQEpTQ0BAWUE/QVZKU1ZhbHVlQDFA
UEFWRXhlY1N0YXRlQDFAUEFWU2NvcGVDaGFpbk5vZGVAMUBBQlZTb3VyY2VDb2RlQDFAVjIxQFBB
VjIxQEBaCiAgICAgP0VjbWFTY3JpcHRDb252ZXJ0ZXJARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJA
ZG91YmxlX2NvbnZlcnNpb25AV1RGQEBTQUFCVjEyM0BYWgogICAgID9Ub0V4cG9uZW50aWFsQERv
dWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0
cmluZ0J1aWxkZXJAMjNAQFoKICAgICA/VG9GaXhlZEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCkBAIC04
MCw3ICs4Miw2IEBAIEVYUE9SVFMKICAgICA/Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkBTdHJ1
Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQFBBVjEyQFZKU1ZhbHVlQDJAQFoK
ICAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZF
eGVjU3RhdGVAMkBAWgogICAgID9jaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmll
ckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0YUAyQEBaCi0gICAgP2NoZWNrU3ludGF4QEpTQ0BAWUE/
QVZDb21wbGV0aW9uQDFAUEFWRXhlY1N0YXRlQDFAQUJWU291cmNlQ29kZUAxQEBaCiAgICAgP2No
ZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/JFZlY3RvckBFJDBCQUBAMkBAWgogICAgID9jbGFzc05h
bWVASlNPYmplY3RASlNDQEBVQkU/QVZVU3RyaW5nQDJAWFoKICAgICA/Y2xlYXJAU291cmNlUHJv
dmlkZXJDYWNoZUBKU0NAQFFBRVhYWgpAQCAtMTYwLDcgKzE2MSw2IEBAIEVYUE9SVFMKICAgICA/
ZXF1YWxASWRlbnRpZmllckBKU0NAQFNBX05QQlZTdHJpbmdJbXBsQFdURkBAUEJEQFoKICAgICA/
ZXF1YWxVVEYxNldpdGhVVEY4QFVuaWNvZGVAV1RGQEBZQV9OUEJfVzBQQkQxQFoKICAgICA/ZXZh
bHVhdGVARGVidWdnZXJDYWxsRnJhbWVASlNDQEBRQkU/QVZKU1ZhbHVlQDJAQUJWVVN0cmluZ0Ay
QEFBVjMyQEBaCi0gICAgP2V2YWx1YXRlQEpTQ0BAWUE/QVZDb21wbGV0aW9uQDFAUEFWRXhlY1N0
YXRlQDFAUEFWU2NvcGVDaGFpbk5vZGVAMUBBQlZTb3VyY2VDb2RlQDFAVkpTVmFsdWVAMUBAWgog
ICAgID9leGNsdWRlQFByb2ZpbGVASlNDQEBRQUVYUEJWUHJvZmlsZU5vZGVAMkBAWgogICAgID9m
YXN0Q2FsbG9jQFdURkBAWUFQQVhJSUBaCiAgICAgP2Zhc3RGcmVlQFdURkBAWUFYUEFYQFoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDgsOCArNzA4LDcgQEAgTkVW
RVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dAogICAgICAgICAgICAgYWRkRXJy
b3JJbmZvKGNhbGxGcmFtZSwgZXhjZXB0aW9uLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkt
PnNvdXJjZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIENvbXBsVHlwZSBleGNlcHRpb25UeXBl
ID0gZXhjZXB0aW9uLT5leGNlcHRpb25UeXBlKCk7Ci0gICAgICAgIGlzSW50ZXJydXB0ID0gZXhj
ZXB0aW9uVHlwZSA9PSBJbnRlcnJ1cHRlZCB8fCBleGNlcHRpb25UeXBlID09IFRlcm1pbmF0ZWQ7
CisgICAgICAgIGlzSW50ZXJydXB0ID0gKGV4Y2VwdGlvbi0+aW5oZXJpdHMoJkludGVycnVwdGVk
RXhlY3V0aW9uRXJyb3I6OnNfaW5mbykgfHwgZXhjZXB0aW9uLT5pbmhlcml0cygmVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKTsKICAgICB9CiAKICAgICBpZiAoRGVidWdnZXIqIGRl
YnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShy
ZXZpc2lvbiA5NDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0NyArMzQsNTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLUNvbXBsZXRpb24gY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpCitib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBK
U0xvY2sgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZp
ZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKIAog
ICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0
ZShleGVjLCBzb3VyY2UpOwogICAgIEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNoZWNrU3lu
dGF4KGV4ZWMpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhy
b3csIGVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0
aW9uKQorICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXJyb3I7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwpOworICAg
IHJldHVybiB0cnVlOwogfQogCi1Db21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNW
YWx1ZSB0aGlzVmFsdWUpCitKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9jayBsb2Nr
KGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09
IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3Jh
bUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNv
dXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0
aW9uKQorICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbjsKKwogICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gSlNW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXhjZXB0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgaWYgKCF0aGlzVmFsdWUg
fHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHRoaXNWYWx1ZSA9IGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7Ci0KICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmlu
dGVycHJldGVyKCktPmV4ZWN1dGUocHJvZ3JhbSwgZXhlYywgc2NvcGVDaGFpbiwgdGhpc09iaik7
CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQorICAgICAgICAgICAgKnJldHVybmVk
RXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAKLSAgICAgICAgQ29tcGxUeXBlIGV4Y2Vw
dGlvblR5cGUgPSBUaHJvdzsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbi5pc09iamVjdCgpKQotICAg
ICAgICAgICAgZXhjZXB0aW9uVHlwZSA9IGFzT2JqZWN0KGV4Y2VwdGlvbiktPmV4Y2VwdGlvblR5
cGUoKTsKLSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oZXhjZXB0aW9uVHlwZSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgcmVzdWx0KTsK
KworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uaAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDMyICszMSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAK
LSAgICBlbnVtIENvbXBsVHlwZSB7IE5vcm1hbCwgQnJlYWssIENvbnRpbnVlLCBSZXR1cm5WYWx1
ZSwgVGhyb3csIEludGVycnVwdGVkLCBUZXJtaW5hdGVkIH07Ci0KLSAgICAvKgotICAgICAqIENv
bXBsZXRpb24gb2JqZWN0cyBhcmUgdXNlZCB0byBjb252ZXkgdGhlIHJldHVybiBzdGF0dXMgYW5k
IHZhbHVlCi0gICAgICogZnJvbSBmdW5jdGlvbnMuCi0gICAgICovCi0gICAgY2xhc3MgQ29tcGxl
dGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBlID0g
Tm9ybWFsLCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQotICAgICAgICAgICAgOiBtX3R5cGUo
dHlwZSkKLSAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgQ29tcGxUeXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAg
ICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUgdikgeyBtX3ZhbHVlID0gdjsgfQotICAgICAgICBi
b29sIGlzVmFsdWVDb21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgQ29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNWYWx1ZSBtX3Zh
bHVlOwotICAgIH07Ci0KLSAgICBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNv
bnN0IFNvdXJjZUNvZGUmKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNW
YWx1ZSgpKTsKKyAgICBib29sIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNv
ZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1Zh
bHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5NDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw1
NCArNDEsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci1wcml2YXRlOgotICAgIEludGVy
cnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICA6
IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1
dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQotICAgIHsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICB0
eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgIHN0YXRpYyBJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsKLSAg
ICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFsbG9jYXRlQ2Vs
bDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwotICAgICAgICBlcnJvci0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Citjb25zdCBDbGFz
c0luZm8gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvID0geyAiSW50ZXJydXB0ZWRF
eGVjdXRpb25FcnJvciIsIDAsIDAsIDAgfTsKIAotICAgIHZpcnR1YWwgQ29tcGxUeXBlIGV4Y2Vw
dGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQorVVN0cmluZyBJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAoreworICAgIHJl
dHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOworfQogCi0gICAg
dmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuICJKYXZh
U2NyaXB0IGV4ZWN1dGlvbiBleGNlZWRlZCB0aW1lb3V0LiI7IH0KLX07Citjb25zdCBDbGFzc0lu
Zm8gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8gPSB7ICJUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3IiLCAwLCAwLCAwIH07CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitVU3RyaW5nIFRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvcjo6dG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICByZXR1
cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKKyAgICBy
ZXR1cm4gIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIjsKIH0KIAotY2xhc3MgVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHJpdmF0
ZToKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS50ZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgewotICAgIH0KLQotcHVi
bGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgc3RhdGljIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
LSAgICB7Ci0gICAgICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogZXJyb3IgPSBuZXcgKGFs
bG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKLSAgICAgICAgZXJyb3ItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRlcm1p
bmF0ZWQ7IH0KIAotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25z
dCB7IHJldHVybiAiSmF2YVNjcmlwdCBleGVjdXRpb24gdGVybWluYXRlZC4iOyB9Ci19OworSlNP
YmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlKCpnbG9iYWxEYXRhKTsKK30KIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRp
b25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNpb24g
OTQ4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDM0ICsyOSw3OSBAQAogI2lmbmRlZiBFeGNlcHRpb25I
ZWxwZXJzX2gKICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKLSNpbmNsdWRlICJKU1ZhbHVl
LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFz
cyBDb2RlQmxvY2s7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIElkZW50aWZpZXI7
Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAg
IGNsYXNzIEpTTm90QW5PYmplY3RFcnJvclN0dWI7Ci0gICAgY2xhc3MgSlNPYmplY3Q7Ci0gICAg
Y2xhc3MgTm9kZTsKLSAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0gICAgCi0gICAgSlNPYmplY3Qq
IGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOwotICAg
IEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0
YSopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7
Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0dsb2JhbE9iamVjdCop
OwotICAgIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVycm9y
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1F
cnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSk7Ci0gICAgSlNPYmplY3Qq
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpT
T2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAg
ICBKU09iamVjdCogY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChFeGVjU3Rh
dGUqLCBjb25zdCBVU3RyaW5nJik7CitKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRp
b25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CitKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKK0pTT2JqZWN0KiBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7CitKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKEpTR2xvYmFsT2JqZWN0Kik7CitKU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihK
U0dsb2JhbE9iamVjdCopOworSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOworSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2Jq
ZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CitKU09iamVjdCogY3JlYXRlSW52YWxpZFBh
cmFtRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgY2hhciogb3AsIEpTVmFsdWUpOworSlNPYmplY3Qq
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNPYmpl
Y3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiwgY29u
c3QgVVN0cmluZyYpOworCitKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0
ZSopOworSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSopOworCisK
K2NsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7Citwcml2YXRlOgorICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0
YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgIHsKKyAgICAgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogZXJyb3Ig
PSBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRh
LmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBl
cnJvci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsK
KyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KKworICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjbGFzcyBU
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citwcml2
YXRlOgorICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworCitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgVGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAg
IHsKKyAgICAgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBlcnJvciA9IG5ldyAoYWxsb2Nh
dGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgVGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgICAgICBlcnJvci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9u
eW1vdXNTbG90Q291bnQsICZzX2luZm8pOworICAgIH0KIAotICAgIEpTT2JqZWN0KiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAgSlNPYmplY3QqIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5
NDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNiw4ICsyMTYsOCBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFs
RGF0YShHbG9iYWxEYXRhVHlwCiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgU3Ry
dWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25T
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywg
SlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAg
aW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm9uRmluYWxP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICB0ZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vbkZpbmFsT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW50ZXJydXB0ZWRFeGVj
dXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB0ZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdGF0aWNTY29wZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2lu
Y2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3Bl
cnR5U2xvdC5oIgpAQCAtMjE5LDggKzIxOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gbV9zdHJ1Y3R1
cmUtPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkg
eyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlzRXh0ZW5zaWJsZSgpOyB9CiAKLSAgICAgICAgdmlydHVh
bCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRocm93OyB9Ci0KICAg
ICAgICAgdm9pZCBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpOwogICAgICAgICBib29sIGlzVXNpbmdJbmxpbmVTdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fcHJvcGVydHlTdG9yYWdlKSA9PSBzdGF0
aWNfY2FzdDxjb25zdCB2b2lkKj4odGhpcyArIDEpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0No
YW5nZUxvZwkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDktMDggIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIENvbXBsZXRpb24gb2Jq
ZWN0IGZyb20gSlNDLCBJIGhhdmUgbmV2ZXIgbGlrZWQgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1bjo6
RXZhbHVhdGUpOgorICAgICAgICAoSlNSdW46OkNoZWNrU3ludGF4KToKKyAgICAgICAgKiBKU1J1
bi5oOgorICAgICAgICAqIEphdmFTY3JpcHRHbHVlLmNwcDoKKyAgICAgICAgKEpTUnVuRXZhbHVh
dGUpOgorCiAyMDExLTA5LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2MjcgYW5kIHI5NDYz
Mi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMiArNjcs
MTIgQEAgSlNHbG9iYWxPYmplY3QqIEpTUnVuOjpHbG9iYWxPYmplY3QoKSBjbwogICAgIHJldHVy
biBmR2xvYmFsT2JqZWN0LmdldCgpOwogfQogCi1Db21wbGV0aW9uIEpTUnVuOjpFdmFsdWF0ZSgp
CitKU1ZhbHVlIEpTUnVuOjpFdmFsdWF0ZShKU1ZhbHVlKiBleHBjZXB0aW9uKQogewotICAgIHJl
dHVybiBKU0M6OmV2YWx1YXRlKGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZkdsb2JhbE9i
amVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsKKyAgICByZXR1
cm4gSlNDOjpldmFsdWF0ZShmR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZHbG9iYWxPYmpl
Y3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShmU291cmNlKSwgSlNWYWx1ZSgpLCBl
eHBjZXB0aW9uKTsKIH0KIAogYm9vbCBKU1J1bjo6Q2hlY2tTeW50YXgoKQogewotICAgIHJldHVy
biBKU0M6OmNoZWNrU3ludGF4KGZHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJj
ZShmU291cmNlKSkuY29tcGxUeXBlKCkgIT0gVGhyb3c7CisgICAgcmV0dXJuIEpTQzo6Y2hlY2tT
eW50YXgoZkdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKGZTb3VyY2UpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCShyZXZpc2lvbiA5NDgwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9KU1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGNs
YXNzIEpTUnVuIDogcHVibGljIEpTQmFzZSB7CiAKICAgICAgICAgVVN0cmluZyBHZXRTb3VyY2Uo
KSBjb25zdDsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIEdsb2JhbE9iamVjdCgpIGNvbnN0Owot
ICAgICAgICBDb21wbGV0aW9uIEV2YWx1YXRlKCk7CisgICAgICAgIEpTVmFsdWUgRXZhbHVhdGUo
SlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAgYm9vbCBDaGVja1N5bnRheCgpOwogICAgICAg
ICBKU0ZsYWdzIEZsYWdzKCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0R2x1ZS9KYXZhU2NyaXB0R2x1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIs
MTQgKzI5MiwxNCBAQCBKU09iamVjdFJlZiBKU1J1bkV2YWx1YXRlKEpTUnVuUmVmIHJlZikKICAg
ICBpZiAocHRyKQogICAgIHsKICAgICAgICAgSlNHbHVlQVBJRW50cnkgZW50cnk7Ci0gICAgICAg
IENvbXBsZXRpb24gY29tcGxldGlvbiA9IHB0ci0+RXZhbHVhdGUoKTsKLSAgICAgICAgaWYgKGNv
bXBsZXRpb24uaXNWYWx1ZUNvbXBsZXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVz
dWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChjb21wbGV0aW9uLnZhbHVlKCks
IHB0ci0+R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoY29tcGxldGlvbi5jb21wbFR5cGUoKSA9PSBUaHJvdykKKyAgICAgICAgCisgICAgICAg
IEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IHB0ci0+RXZhbHVhdGUoJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICAKKyAgICAg
ICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IChKU09iamVjdFJlZilLSlNWYWx1ZVRvSlNPYmplY3QoZXZhbHVhdGlvbkV4Y2VwdGlvbiwg
cHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgSlNGbGFncyBmbGFncyA9IHB0ci0+RmxhZ3MoKTsKICAgICAgICAgICAgIGlmIChmbGFn
cyAmIGtKU0ZsYWdEZWJ1ZykKICAgICAgICAgICAgIHsKQEAgLTMxMSw2ICszMTEsMTAgQEAgSlNP
YmplY3RSZWYgSlNSdW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgcmVzdWx0ID0gKEpTT2JqZWN0UmVmKUtKU1ZhbHVlVG9KU09iamVjdChyZXR1cm5WYWx1
ZSwgcHRyLT5HbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBA
QAorMjAxMS0wOS0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
bW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBp
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAq
IGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAg
ICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6
ZXZhbCk6CisKIDIwMTEtMDktMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDc4MS4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24g
OTQ4MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiWFBhdGhFeGNlcHRpb24u
aCIKICNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTRnVuY3Rpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTE3MCw3
ICsxNzEsNyBAQCBkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZv
aWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pCiB7
Ci0gICAgaWYgKGV4Y2VwdGlvbi5pc09iamVjdCgpICYmIGFzT2JqZWN0KGV4Y2VwdGlvbiktPmV4
Y2VwdGlvblR5cGUoKSA9PSBUZXJtaW5hdGVkKQorICAgIGlmIChleGNlcHRpb24uaW5oZXJpdHMo
JlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDk0ODA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkpTRXZl
bnRUYXJnZXQuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExl
YWtDb3VudGVyLmg+CiAKQEAgLTEzMyw3ICsxMzQsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6
aGFuZGxlRXZlbnQoU2NyaXB0CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgaWYgKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBi
b29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYg
ZXhlYy0+ZXhjZXB0aW9uKCkuaXNPYmplY3QoKSAmJiBhc09iamVjdChleGVjLT5leGNlcHRpb24o
KSktPmV4Y2VwdGlvblR5cGUoKSA9PSBUZXJtaW5hdGVkKTsKKyAgICAgICAgICAgIGJvb2wgdGVy
bWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5l
eGNlcHRpb24oKS5pbmhlcml0cygmVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKTsK
ICAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IGdsb2JhbERhdGEu
dGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCktPnNjcmlwdCgpLT5mb3Ji
aWRFeGVjdXRpb24oKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkocmV2aXNpb24gOTQ4
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVk
U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGxv
bmcgaWQpCiB7Ci0gICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdU
b1VTdHJpbmcoc291cmNlKSk7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKworICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc3RyaW5nVG9VU3Ry
aW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIEpTVmFsdWUgZ2xvYmFsVGhpc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmdsb2Jh
bFRoaXNWYWx1ZSgpOwotICAgIENvbXBsZXRpb24gY29tcCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigp
LCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUpOwotICAgIGlmIChjb21wLmNvbXBsVHlwZSgp
ICE9IEpTQzo6Tm9ybWFsICYmIGNvbXAuY29tcGxUeXBlKCkgIT0gSlNDOjpSZXR1cm5WYWx1ZSkK
KworICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIGV2YWx1YXRp
b25SZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoc2NyaXB0U3Rh
dGUsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBzb3VyY2VDb2RlLCBnbG9iYWxU
aGlzVmFsdWUsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2Vw
dGlvbikKICAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwotICAgIEpTVmFsdWUgZnVuY3Rp
b25WYWx1ZSA9IGNvbXAudmFsdWUoKTsKKworICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2
YWx1YXRpb25SZXR1cm5WYWx1ZTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uVmFsdWUsIGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDk0ODA2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgSlNNYWluVGhyZWFkRXhlY1N0
YXRlX2gKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvQ29t
cGxldGlvbi5oPgogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2VuZGlmCkBAIC01MSwxMCArNTIsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjpj
YWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwg
YXJncyk7CiAgICAgfTsKIAotICAgIHN0YXRpYyBKU0M6OkNvbXBsZXRpb24gZXZhbHVhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFpbk5vZGUqIGNoYWluLCBjb25zdCBKU0M6
OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSkKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNjb3BlQ2hh
aW5Ob2RlKiBjaGFpbiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1
ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNN
YWluVGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6ZXZhbHVhdGUoZXhlYywgY2hhaW4sIHNvdXJjZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgY2hhaW4sIHNvdXJjZSwgdGhpc1ZhbHVlLCBleGNlcHRp
b24pOwogICAgIH07CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NDgwNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzgsMjIgKzEzOCwyMiBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZUluCiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQobV9mcmFtZSwgc291cmNl
VVJMLCBzb3VyY2VDb2RlLnN0YXJ0TGluZSgpKTsKIAorICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKKwogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwotICAgIENvbXBsZXRpb24gY29tcCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUo
ZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIGpz
U291cmNlQ29kZSwgc2hlbGwpOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+
Z2xvYmFsU2NvcGVDaGFpbigpLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCAmZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29va2llKTsK
IAotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IE5vcm1hbCB8fCBjb21wLmNvbXBsVHlwZSgp
ID09IFJldHVyblZhbHVlKSB7CisgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKKyAgICAg
ICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgICAgICBt
X3NvdXJjZVVSTCA9IHNhdmVkU291cmNlVVJMOwotICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb21wLnZhbHVlKCkpOworICAgICAgICByZXR1cm4gU2NyaXB0
VmFsdWUoKTsKICAgICB9CiAKLSAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBUaHJvdyB8fCBj
b21wLmNvbXBsVHlwZSgpID09IEludGVycnVwdGVkKQotICAgICAgICByZXBvcnRFeGNlcHRpb24o
ZXhlYywgY29tcC52YWx1ZSgpKTsKLQogICAgIG1fc291cmNlVVJMID0gc2F2ZWRTb3VyY2VVUkw7
Ci0gICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcmV0dXJuVmFsdWUpOwogfQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKSAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5NDgwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBACiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRl
IDxydW50aW1lL0NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xv
Y2suaD4KIApAQCAtMTMxLDMxICsxMzEsMzAgQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVj
KCk7Ci0gICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVj
a2VyLnN0YXJ0KCk7Ci0gICAgQ29tcGxldGlvbiBjb21wID0gSlNDOjpldmFsdWF0ZShleGVjLCBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29k
ZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7Ci0gICAgbV93
b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsK
IAorICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKIAotICAgIENvbXBsVHlwZSBjb21w
bGV0aW9uVHlwZSA9IGNvbXAuY29tcGxUeXBlKCk7CisgICAgbV93b3JrZXJDb250ZXh0V3JhcHBl
ci0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CisgICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2Vy
Q29udGV4dFdyYXBwZXIuZ2V0KCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBtX3dvcmtl
ckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCi0g
ICAgaWYgKGNvbXBsZXRpb25UeXBlID09IFRlcm1pbmF0ZWQgfHwgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci0+Z2xvYmFsRGF0YSgpLnRlcm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpIHsKKyAgICBp
ZiAoKGV2YWx1YXRpb25FeGNlcHRpb24gJiYgZXZhbHVhdGlvbkV4Y2VwdGlvbi5pbmhlcml0cygm
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpzX2luZm8pKSB8fCAgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci0+Z2xvYmFsRGF0YSgpLnRlcm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpIHsKICAgICAg
ICAgZm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwogICAg
IH0KIAotICAgIGlmIChjb21wbGV0aW9uVHlwZSA9PSBOb3JtYWwgfHwgY29tcGxldGlvblR5cGUg
PT0gUmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRh
LCBjb21wLnZhbHVlKCkpOwotCi0gICAgaWYgKGNvbXBsZXRpb25UeXBlID09IFRocm93KSB7Cisg
ICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwogICAgICAgICBTdHJpbmcgc291cmNlVVJM
ID0gc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKTsKICAgICAgICAgaWYgKG1fd29ya2VyQ29udGV4
dC0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVS
TCkpCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gU2NyaXB0VmFsdWUoKm1f
Z2xvYmFsRGF0YSwgY29tcC52YWx1ZSgpKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBTY3Jp
cHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICB9Ci0gICAg
cmV0dXJuIFNjcmlwdFZhbHVlKCk7CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKm1fZ2xvYmFs
RGF0YSwgcmV0dXJuVmFsdWUpOworCiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
c2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlIGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiA5NDgwNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjUsMjggKzMyNSwxMyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDoo
TlNTdHJpbmcgKilzY3JpCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBDb21wbGV0
aW9uIGNvbXBsZXRpb24gPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmlu
ZyhzY3JpcHQpKSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBK
U01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIFtzZWxmIF9yb290T2JqZWN0XS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShTdHJpbmcoc2Ny
aXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwotICAgIENvbXBs
VHlwZSB0eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKLSAgICAKLSAgICBpZiAodHlwZSA9
PSBOb3JtYWwpIHsKLSAgICAgICAgcmVzdWx0ID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVj
KTsKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgaWQgcmVzdWx0T2JqID0gW1dlYlNjcmlwdE9i
amVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0IG9yaWdpblJvb3RPYmplY3Q6W3Nl
bGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKKwor
ICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3Rd
IHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKICAgICAKICAgICBfZGlkRXhlY3V0ZShz
ZWxmKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2
aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQsMjAgKzI3NCwxMiBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQ
IGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VU
RjE2KHMpOwogICAgICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhKCZleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICAKICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNr
ZXIuc3RhcnQoKTsKLSAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0
ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmlu
ZyksIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6
ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3Jp
cHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CiAgICAgICAgIGdsb2JhbERhdGEtPnRpbWVvdXRD
aGVja2VyLnN0b3AoKTsKLSAgICAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBs
VHlwZSgpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIGlmICh0
eXBlID09IE5vcm1hbCkgewotICAgICAgICAgICAgcmVzdWx0ID0gY29tcGxldGlvbi52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwogCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwg
dmFyaWFudCk7CisgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZh
bHVlLCB2YXJpYW50KTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0JKHJldmlzaW9uIDk0ODA2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwNiw4ICszMDYsNiBAQCBqb2Jq
ZWN0IEphdmFKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvCiBqb2JqZWN0IEphdmFKU09iamVj
dDo6ZXZhbChqc3RyaW5nIHNjcmlwdCkgY29uc3QKIHsKICAgICBMT0coTGl2ZUNvbm5lY3QsICJK
YXZhSlNPYmplY3Q6OmV2YWwgc2NyaXB0ID0gJXMiLCBKYXZhU3RyaW5nKHNjcmlwdCkudXRmOCgp
KTsKLSAgICAKLSAgICBKU1ZhbHVlIHJlc3VsdDsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgCkBAIC0zMTYsMTggKzMxNCwxMCBAQCBqb2JqZWN0IEphdmFK
U09iamVjdDo6ZXZhbChqc3RyaW5nIHNjcmlwCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOwotICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShKYXZhU3RyaW5nKHNjcmlwdCkuaW1w
bCgpKSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0
ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmco
c2NyaXB0KS5pbXBsKCkpKTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKLSAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBs
ZXRpb24uY29tcGxUeXBlKCk7Ci0gICAgCi0gICAgaWYgKHR5cGUgPT0gTm9ybWFsKSB7Ci0gICAg
ICAgIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZQotICAgICAgICBy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pP
YmplY3QgKHJlc3VsdCk7CisKKyAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3Vs
dCk7CiB9CiAKIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyBtZW1iZXJO
YW1lKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0w
OCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgQ29t
cGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1
bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKToKKwogMjAxMS0wOS0wOCAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IHJlbGVhc2UgdGhlIG1vZGFs
IHBsYWNlaG9sZGVyIHdpbmRvdyBpZiBpdCdzIGNsb3NlZApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDk0ODA2KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9FcnJvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KQEAgLTE4OCwyMSArMTg5LDkgQEAgYm9vbCBO
UFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZQogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5wT2JqZWN0KTsKIAog
ICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0g
ICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSlNDOjpldmFsdWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShVU3RyaW5nKHNjcmlwdFN0cmluZy5p
bXBsKCkpKSwgdGhpc1ZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gSlNDOjpldmFs
dWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShV
U3RyaW5nKHNjcmlwdFN0cmluZy5pbXBsKCkpKSwgdGhpc1ZhbHVlKTsKICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBDb21wbFR5cGUg
Y29tcGxldGlvblR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwotCi0gICAgSlNWYWx1ZSBy
ZXN1bHRWYWx1ZTsKLSAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gTm9ybWFsKSB7Ci0gICAgICAg
IHJlc3VsdFZhbHVlID0gY29tcGxldGlvbi52YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlKQotICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgIH0gZWxz
ZQotICAgICAgICByZXN1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotICAgIAogICAgIGNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoZXhlYywg
cmVzdWx0VmFsdWUsICpyZXN1bHQpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0wOCAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3Qg
ZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpldmFsdWF0ZSk6CisKIDIwMTEtMDktMDcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDYy
NyBhbmQgcjk0NjMyLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNp
b24gOTQ4MDYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgi
CiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Nv
bXBsZXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+CiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5
TmFtZUFycmF5Lmg+CkBAIC04NzUsMTcgKzg3NiwxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkudGltZW91
dENoZWNrZXIuc3RhcnQoKTsKIAogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRp
Y2F0b3IoYWxsb3dQb3B1cHMgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9z
c2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9
IEpTQzo6ZXZhbHVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIG1h
a2VTb3VyY2Uoc2NyaXB0KSk7Ci0KLSAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1l
b3V0Q2hlY2tlci5zdG9wKCk7Ci0gICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBs
VHlwZSgpOwotCi0gICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgaWYgKHR5cGUgPT0gTm9ybWFsKQot
ICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7CiAgICAgCi0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU0M6OmV2YWx1YXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpLCBt
YWtlU291cmNlKHNjcmlwdCkpOworICAgIAorICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgp
LnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgcmVz
dWx0LCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTA4
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBDb21w
bGV0aW9uIG9iamVjdCBmcm9tIEpTQywgSSBoYXZlIG5ldmVyIGxpa2VkIGl0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNw
cDoKKyAgICAgICAgKFFXZWJFbGVtZW50OjpldmFsdWF0ZUphdmFTY3JpcHQpOgorCiAyMDExLTA5
LTA1ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAg
ICAgICAgW1F0XVtXSzJdIE1ha2UgVGlsZWREcmF3aW5nQXJlYSByZXF1ZXN0IHRpbGVzIG9ubHkg
aW4gdGhlIGRpcmVjdGlvbiB0aGUgdmlld3BvcnQgaXMgcGFubmVkIHRvLgpJbmRleDogU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2lmIFVTRShKU0MpCisjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCkBAIC03ODksMTYgKzc5MCwxNCBAQCBRVmFyaWFudCBRV2ViRWxlbWVudDo6ZXZhbHVh
dGVKYXZhU2NyaXB0CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gc3RhdGUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigp
OwogICAgIEpTQzo6VVN0cmluZyBzY3JpcHQocmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNo
YXIqPihzY3JpcHRTb3VyY2UuZGF0YSgpKSwgc2NyaXB0U291cmNlLmxlbmd0aCgpKTsKLSAgICBK
U0M6OkNvbXBsZXRpb24gY29tcGxldGlvbiA9IEpTQzo6ZXZhbHVhdGUoc3RhdGUsIHNjb3BlQ2hh
aW4sIEpTQzo6bWFrZVNvdXJjZShzY3JpcHQpLCB0aGlzVmFsdWUpOwotICAgIGlmICgoY29tcGxl
dGlvbi5jb21wbFR5cGUoKSAhPSBKU0M6OlJldHVyblZhbHVlKSAmJiAoY29tcGxldGlvbi5jb21w
bFR5cGUoKSAhPSBKU0M6Ok5vcm1hbCkpCi0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogCi0g
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICBpZiAoIXJl
c3VsdCkKKyAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OkpT
VmFsdWUgZXZhbHVhdGlvblJlc3VsdCA9IEpTQzo6ZXZhbHVhdGUoc3RhdGUsIHNjb3BlQ2hhaW4s
IEpTQzo6bWFrZVNvdXJjZShzY3JpcHQpLCB0aGlzVmFsdWUsICZldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFFWYXJpYW50
KCk7CiAKICAgICBpbnQgZGlzdGFuY2UgPSAwOwotICAgIHJldHVybiBKU0M6OkJpbmRpbmdzOjpj
b252ZXJ0VmFsdWVUb1FWYXJpYW50KHN0YXRlLCByZXN1bHQsIFFNZXRhVHlwZTo6Vm9pZCwgJmRp
c3RhbmNlKTsKKyAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFu
dChzdGF0ZSwgZXZhbHVhdGlvblJlc3VsdCwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOwog
I2VsaWYgVVNFKFY4KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFFWYXJpYW50
KCk7Cg==
</data>
<flag name="review"
          id="103308"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>