<?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>159461</bug_id>
          
          <creation_ts>2016-07-06 03:42:42 -0700</creation_ts>
          <short_desc>Generate WebCore builtin wrapper files</short_desc>
          <delta_ts>2016-07-14 08:09:19 -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>Tools / Tests</component>
          <version>WebKit 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>
          <dependson>159765</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1208160</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-06 03:42:42 -0700</bug_when>
    <thetext>We should be able to generate Source/WebCore/bindings/jsWebCoreJSBuiltin* files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208173</commentid>
    <comment_count>1</comment_count>
      <attachid>282879</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-06 05:04:58 -0700</bug_when>
    <thetext>Created attachment 282879
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208176</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-06 05:07:51 -0700</bug_when>
    <thetext>Attachment 282879 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:79:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:80:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:82:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:83:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:41:  [BuiltinsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:45:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:50:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:69:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:72:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:95:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:103:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:117:  [BuiltinsWrapperHeaderGenerator.generate_accessors] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:129:  [BuiltinsWrapperHeaderGenerator.generate_members] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:42:  [BuiltinsInternalsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:46:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:51:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:73:  [BuiltinsInternalsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:41:  [BuiltinsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:45:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:50:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:59:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:62:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:42:  [BuiltinsInternalsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:46:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:51:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:53:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:80:  [BuiltinsInternalsWrapperImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
Total errors found: 27 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208200</commentid>
    <comment_count>3</comment_count>
      <attachid>282888</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-06 06:58:23 -0700</bug_when>
    <thetext>Created attachment 282888
Trying to fix win build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208203</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-06 07:03:57 -0700</bug_when>
    <thetext>Attachment 282888 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:79:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:80:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:82:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:83:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:41:  [BuiltinsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:45:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:50:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:69:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:72:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:95:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:103:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:117:  [BuiltinsWrapperHeaderGenerator.generate_accessors] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:129:  [BuiltinsWrapperHeaderGenerator.generate_members] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:42:  [BuiltinsInternalsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:46:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:51:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:73:  [BuiltinsInternalsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:41:  [BuiltinsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:45:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:50:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:59:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:62:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:42:  [BuiltinsInternalsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:46:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:51:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:53:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:80:  [BuiltinsInternalsWrapperImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
Total errors found: 27 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208270</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-07-06 10:29:54 -0700</bug_when>
    <thetext>Could you please document what this change will allow you to do that you couldn&apos;t do before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208278</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-06 10:49:26 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Could you please document what this change will allow you to do that you
&gt; couldn&apos;t do before?

This change allows developers to add new JS built-in files without messing up with the wrapper files, since they are now automatically generated.

I can beef up the change log if that helps, at landing time or in a later version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208283</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-07-06 11:08:02 -0700</bug_when>
    <thetext>That&apos;s what I figured.
This patch seems good, but has way too much python for me to be an effective reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208316</commentid>
    <comment_count>8</comment_count>
      <attachid>282888</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-06 12:08:51 -0700</bug_when>
    <thetext>Comment on attachment 282888
Trying to fix win build

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Generating WebCore wrapper files

This line seems out of place.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +

Put the &quot;why&quot; here.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:76
&gt; +        lines = [&quot;class JSDOMGlobalObject;&quot;, &quot;&quot;, &quot;class JSBuiltinInternalFunctions {&quot;, &quot;public:&quot;]

Please split across multiple newlines so it&apos;s easier to read/see indentation.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:104
&gt; +            if conditional_guard is not None:

Please use this method (copied from Source/JavaScriptCore/inspector/scripts/codegen/generator.py).

    @staticmethod
    def wrap_with_guard(guard, text):
        return &apos;\n&apos;.join([
            &apos;#if %s&apos; % guard,
            text,
            &apos;#endif // %s&apos; % guard,
        ])

You can put it on the generator base class.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:116
&gt; +            if conditional_guard is not None:

See above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:39
&gt; +        self.internals = [object for object in model.objects if &apos;internal&apos; in object.annotations]

I would write this as a call to filter() since we don&apos;t need to extract anything from `object`.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:103
&gt; +                lines.append(&quot;#if %s&quot; % conditional_guard)

See above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:116
&gt; +                lines.append(&quot;#if %s&quot; % conditional_guard)

See above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:127
&gt; +            lines.append(&quot;    &quot; + self.member_name(object) + &quot;.init(globalObject);&quot;)

See above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:135
&gt; +            if conditional_guard is not None:

See above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:159
&gt; +                lines.append(&quot;#if %s&quot; % conditional_guard)

See above.

&gt; Source/JavaScriptCore/Scripts/generate-js-builtins.py:125
&gt; +    cli_parser.add_option(&quot;--with-wrapper-files&quot;, action=&quot;store_true&quot;, help=&quot;Produce .h/.cpp wrapper files to ease integration of the builtins.&quot;)

I would rename this to --builtins-wrappers or just --wrappers.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:358
&gt; + * Copyright (c) 2015 Canon Inc. All rights reserved.

Please update the copyright block template to have Apple copyright too.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:413
&gt; +          globalObject.addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));

Nit: bad indent.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:231
&gt; +#ifndef WebCoreJSBuiltins_h

Please make it use #pragma once (in this patch or another one)

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:327
&gt; +

Nit: extra newline.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:385
&gt; +    UNUSED_PARAM(vm);

This looks wrong. Shouldn&apos;t the argument be `v`?

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:399
&gt; +    UNUSED_PARAM(clientData);

Can we just omit generating clientData if it&apos;s not going to be used (presumably by staticGlobals)?

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:340
&gt; +    JSC::VM&amp; vm;

I think this should be m_vm to be consistent.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:504
&gt; +    UNUSED_PARAM(visitor);

This should be in an #else .. #endif, right? You might want to bake that into the helper formatting function that wraps code in a guard.

&gt; Source/WebCore/CMakeLists.txt:3747
&gt; +    list(APPEND WebCore_Generated_Builtins ${DERIVED_SOURCES_WEBCORE_DIR}/${_objectName}Builtins.h)

I think the variable name style we try to stick to is to uppercase everything but the project prefix (I.e., WebCore).

&gt; Source/WebCore/CMakeLists.txt:3758
&gt; +    COMMAND ${PYTHON_EXECUTABLE} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py --with-wrapper-files --framework WebCore --output-directory ${DERIVED_SOURCES_WEBCORE_DIR} ${WebCore_BUILTINS_SOURCES}

Should the script itself be able to infer whether to perform the effect of --with-wrapper-files based on the target framework?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208360</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-06 13:03:22 -0700</bug_when>
    <thetext>Thanks for the review.

Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:104
&gt; &gt; +            if conditional_guard is not None:
&gt; 
&gt; Please use this method (copied from
&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py).
&gt; 
&gt;     @staticmethod
&gt;     def wrap_with_guard(guard, text):
&gt;         return &apos;\n&apos;.join([
&gt;             &apos;#if %s&apos; % guard,
&gt;             text,
&gt;             &apos;#endif // %s&apos; % guard,
&gt;         ])
&gt; 
&gt; You can put it on the generator base class.

OK, I&apos;ll refactor that.

Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:39
&gt; &gt; +        self.internals = [object for object in model.objects if &apos;internal&apos; in object.annotations]
&gt; 
&gt; I would write this as a call to filter() since we don&apos;t need to extract
&gt; anything from `object`.

OK

&gt; &gt; Source/JavaScriptCore/Scripts/generate-js-builtins.py:125
&gt; &gt; +    cli_parser.add_option(&quot;--with-wrapper-files&quot;, action=&quot;store_true&quot;, help=&quot;Produce .h/.cpp wrapper files to ease integration of the builtins.&quot;)
&gt; 
&gt; I would rename this to --builtins-wrappers or just --wrappers.

OK

&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:231
&gt; &gt; +#ifndef WebCoreJSBuiltins_h
&gt; 
&gt; Please make it use #pragma once (in this patch or another one)

You might like https://bugs.webkit.org/show_bug.cgi?id=159462, if you have some spare review time...

&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:385
&gt; &gt; +    UNUSED_PARAM(vm);
&gt; 
&gt; This looks wrong. Shouldn&apos;t the argument be `v`?

&apos;v&apos; is used but some bots may complain about vm being not used anywhere.

&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:399
&gt; &gt; +    UNUSED_PARAM(clientData);
&gt; 
&gt; Can we just omit generating clientData if it&apos;s not going to be used
&gt; (presumably by staticGlobals)?

In real cases, clientData is used but in #if blocks.
Some bots may be compiling without all these #if blocks and will complain of clientData being not used.

&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:340
&gt; &gt; +    JSC::VM&amp; vm;
&gt; 
&gt; I think this should be m_vm to be consistent.

OK

&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:504
&gt; &gt; +    UNUSED_PARAM(visitor);
&gt; 
&gt; This should be in an #else .. #endif, right? You might want to bake that
&gt; into the helper formatting function that wraps code in a guard.

In real generated code, we have several #if blocks.
We could add something like #if!ENABLE(...) &amp;&amp; !ENABLE(...) but I am not sure this is with the effort.

&gt; &gt; Source/WebCore/CMakeLists.txt:3747
&gt; &gt; +    list(APPEND WebCore_Generated_Builtins ${DERIVED_SOURCES_WEBCORE_DIR}/${_objectName}Builtins.h)
&gt; 
&gt; I think the variable name style we try to stick to is to uppercase
&gt; everything but the project prefix (I.e., WebCore).

OK

&gt; &gt; Source/WebCore/CMakeLists.txt:3758
&gt; &gt; +    COMMAND ${PYTHON_EXECUTABLE} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py --with-wrapper-files --framework WebCore --output-directory ${DERIVED_SOURCES_WEBCORE_DIR} ${WebCore_BUILTINS_SOURCES}
&gt; 
&gt; Should the script itself be able to infer whether to perform the effect of
&gt; --with-wrapper-files based on the target framework?

I was not sure about whether adding an option or using the framework.
I went with the option to be consistent with the combined option.
But I don&apos;t really mind either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208580</commentid>
    <comment_count>10</comment_count>
      <attachid>283001</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-07 02:15:48 -0700</bug_when>
    <thetext>Created attachment 283001
Updated according review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208581</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-07 02:18:03 -0700</bug_when>
    <thetext>Attachment 283001 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:42:  [BuiltinsInternalsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:46:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:51:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:53:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:80:  [BuiltinsInternalsWrapperImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:79:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:80:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:82:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:83:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:41:  [BuiltinsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:45:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:50:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:67:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:70:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:93:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:96:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:105:  [BuiltinsWrapperHeaderGenerator.generate_accessors] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:112:  [BuiltinsWrapperHeaderGenerator.generate_members] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:42:  [BuiltinsInternalsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:46:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:51:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:71:  [BuiltinsInternalsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:41:  [BuiltinsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:45:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:50:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:59:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:62:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
Total errors found: 27 in 24 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>1208583</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-07 02:41:30 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created attachment 283001 [details]
&gt; Updated according review

Patch is updated according comments.
I did not fixed some style comments for &quot;empty classes&quot; as the real code does not suffer from those.

I forgot to fix the option name but will do it. --wrappers is fine by me.

As for the copyright thing, I&apos;ll address it in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208655</commentid>
    <comment_count>13</comment_count>
      <attachid>283001</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-07 09:58:41 -0700</bug_when>
    <thetext>Comment on attachment 283001
Updated according review

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

I think it&apos;s almost ready. Let&apos;s try to clean up code generation a little more.

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        * Scripts/builtins/builtins_generate_wrapper_implementation.py: Added  to generate WebCoreJSBuiltins.cpp.

Nit: extra space

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +

&quot;Rebaseline builtins generator test results.&quot;

&gt; Source/WebCore/ChangeLog:10
&gt; +        Updating build system to handle new built-in generators without modifying WebCoreJSBuiltins* files..

Nit: extra &apos;.&apos;

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:105
&gt; +            lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get(&apos;conditional&apos;), &quot;    &quot; + self.member_type(object) + &quot;&amp; &quot; + self.accessor_name(object) + &quot;() { return &quot; + self.member_name(object) + &quot;; }&quot;))

(Applies throughout) Please put the expression to be wrapped into a string, like so. It is a lot easier to follow than using the overloaded + operator.

accessor_body = &quot;%s&amp; %s() { return %s; }&quot; % (self.member_type(object), self.accessor_name(object), self.member_name(object))
lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get(&apos;conditional&apos;), accessor_body)

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:112
&gt; +            lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get(&apos;conditional&apos;), &quot;    &quot; + self.member_type(object) + &quot; &quot; + self.member_name(object) + &quot;;&quot;))

See above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:39
&gt; +        self.internals = filter(lambda object:  &apos;internal&apos; in object.annotations, model.objects)

Nit: extra space after &apos;:&apos;

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:109
&gt; +        for object in self.internals:

if len(self.internals) &gt; 0:
 ... append each ...
else:
  ... append UNUSED_PARAM ...

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:113
&gt; +        lines.append(&quot;void JSBuiltinInternalFunctions::initialize(JSDOMGlobalObject&amp; globalObject)\n{&quot;)

Please don&apos;t put newline literals in `lines`. I know its tedious but let&apos;s be consistent.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:115
&gt; +            lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get(&apos;conditional&apos;), &quot;    &quot; + self.member_name(object) + &quot;.init(globalObject);&quot;))

Same thing here, check len(self.internals).

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:121
&gt; +&quot;&quot;&quot;#define DECLARE_GLOBAL_STATIC(name)\\

Please extract this into a separate variable. In general we don&apos;t wrap function arguments to newlines in Python code.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:130
&gt; +    UNUSED_PARAM(clientData);

I think you can check if not len(self.internals) &gt; 0 here.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:137
&gt; +            lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get(&apos;conditional&apos;), &quot;        &quot; + self.member_type(object) + &quot; &quot; + self.member_name(object) + &quot;;&quot;))

See comment above.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:92
&gt; +        lines = [&quot;    explicit JSBuiltinFunctions(JSC::VM&amp; v)&quot;, &quot;        : m_vm(v)&quot;]

Needs line wrap.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:94
&gt; +            lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get(&apos;conditional&apos;), &quot;        , &quot; + self.member_name(object) + &quot;(&amp;m_vm)&quot;))

Same comments as above: extract the formatted string into a local.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:41
&gt; +        return self.model().framework.setting(&apos;namespace&apos;) + &quot;JSBuiltins.cpp&quot;

I would use format strings even for this. There are very few cases where using an overloaded + is more clear.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:60
&gt; +            header_includes.append(([&quot;WebCore&quot;], (&quot;WebCore&quot;, object.object_name + &quot;Builtins.cpp&quot;)))

... I think this is an example of where it&apos;s ok: only one level of dereference, so it&apos;s not too big of an expression to see at once.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:236
&gt; +    explicit JSBuiltinFunctions(JSC::VM&amp; v)

Argument name should be &apos;vm&apos;.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:399
&gt; +    if (sizeof(staticGlobals))

I don&apos;t think this conditional is necessary. We can statically determine the length and add the following line or not. The same is true for clientData. In fact, maybe the generator for this method should have a separate code path if there are no internals, that just prints UNUSED_PARAM(globalObject). I don&apos;t think there is anything meaningful to do in initialize() if there are no internals.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:501
&gt; +#define DECLARE_GLOBAL_STATIC(name)\

Nit: should have one space between things and a trailing continuation &apos;\&apos;

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:509
&gt; +          globalObject.addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));

This generated code can be cleaned up as noted above in the case where there are no builtins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208658</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-07 10:10:35 -0700</bug_when>
    <thetext>
Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:130
&gt; &gt; +    UNUSED_PARAM(clientData);
&gt; 
&gt; I think you can check if not len(self.internals) &gt; 0 here.

The issue here is not in the case where there is no internals.
The issue is that all internals may be guarded and guard being disabled.
In that case, compilers will issue warnings or errors because of unused parameters.

As I sad previously, we could wrap the UNUSED_PARAM in an &quot;#if not any guard&quot;.
But I am not sure this is worth the effort.


&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:399
&gt; &gt; +    if (sizeof(staticGlobals))
&gt; 
&gt; I don&apos;t think this conditional is necessary. We can statically determine the
&gt; length and add the following line or not. The same is true for clientData.
&gt; In fact, maybe the generator for this method should have a separate code
&gt; path if there are no internals, that just prints UNUSED_PARAM(globalObject).
&gt; I don&apos;t think there is anything meaningful to do in initialize() if there
&gt; are no internals.

This is the same principle as above.
I found it a bit better to have an if statement statically-resolvable, then an UNUSED_PARAM.
But I am fine using UNUSED_PARAM(globalObject) as is currently the case in the hand-written code.

&gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:509
&gt; &gt; +          globalObject.addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));
&gt; 
&gt; This generated code can be cleaned up as noted above in the case where there
&gt; are no builtins.

I am not sure it is worth handling the no-builtin case.
In such case, the cpp file should not even be compiled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208659</commentid>
    <comment_count>15</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-07 10:14:44 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Source/JavaScriptCore/Scripts/builtins/
&gt; builtins_generate_internals_wrapper_implementation.py:130
&gt; &gt; &gt; +    UNUSED_PARAM(clientData);
&gt; &gt; 
&gt; &gt; I think you can check if not len(self.internals) &gt; 0 here.
&gt; 
&gt; The issue here is not in the case where there is no internals.
&gt; The issue is that all internals may be guarded and guard being disabled.
&gt; In that case, compilers will issue warnings or errors because of unused
&gt; parameters.

Ah, ok, then I guess we might always need it.

&gt; As I sad previously, we could wrap the UNUSED_PARAM in an &quot;#if not any
&gt; guard&quot;.
&gt; But I am not sure this is worth the effort.

No, that&apos;s too annoying. I agree.

&gt; &gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:399
&gt; &gt; &gt; +    if (sizeof(staticGlobals))
&gt; &gt; 
&gt; &gt; I don&apos;t think this conditional is necessary. We can statically determine the
&gt; &gt; length and add the following line or not. The same is true for clientData.
&gt; &gt; In fact, maybe the generator for this method should have a separate code
&gt; &gt; path if there are no internals, that just prints UNUSED_PARAM(globalObject).
&gt; &gt; I don&apos;t think there is anything meaningful to do in initialize() if there
&gt; &gt; are no internals.
&gt; 
&gt; This is the same principle as above.
&gt; I found it a bit better to have an if statement statically-resolvable, then
&gt; an UNUSED_PARAM.
&gt; But I am fine using UNUSED_PARAM(globalObject) as is currently the case in
&gt; the hand-written code.

I prefer an unconditional UNUSED_PARAM.

&gt; &gt; &gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:509
&gt; &gt; &gt; +          globalObject.addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));
&gt; &gt; 
&gt; &gt; This generated code can be cleaned up as noted above in the case where there
&gt; &gt; are no builtins.
&gt; 
&gt; I am not sure it is worth handling the no-builtin case.
&gt; In such case, the cpp file should not even be compiled.

Ok.

Please address other comments and send through EWS again before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208660</commentid>
    <comment_count>16</comment_count>
      <attachid>283001</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-07 10:14:55 -0700</bug_when>
    <thetext>Comment on attachment 283001
Updated according review

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209002</commentid>
    <comment_count>17</comment_count>
      <attachid>283118</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-08 00:56:30 -0700</bug_when>
    <thetext>Created attachment 283118
Updated according comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209003</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-08 00:58:54 -0700</bug_when>
    <thetext>Attachment 283118 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:42:  [BuiltinsInternalsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:46:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:51:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:53:  [BuiltinsInternalsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_primary_header_includes&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:80:  [BuiltinsInternalsWrapperImplementationGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:79:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:80:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:82:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:83:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsInternalsWrapperImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:41:  [BuiltinsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:45:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:50:  [BuiltinsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:67:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:70:  [BuiltinsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:95:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:99:  [BuiltinsWrapperHeaderGenerator.generate_constructor] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:109:  [BuiltinsWrapperHeaderGenerator.generate_accessors] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py:117:  [BuiltinsWrapperHeaderGenerator.generate_members] Instance of &apos;BuiltinsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:42:  [BuiltinsInternalsWrapperHeaderGenerator.output_filename] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:46:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:51:  [BuiltinsInternalsWrapperHeaderGenerator.generate_output] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_header.py:71:  [BuiltinsInternalsWrapperHeaderGenerator.generate_secondary_header_includes] Instance of &apos;BuiltinsInternalsWrapperHeaderGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:41:  [BuiltinsWrapperImplementationGenerator.output_filename] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:45:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:50:  [BuiltinsWrapperImplementationGenerator.generate_output] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:59:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py:62:  [BuiltinsWrapperImplementationGenerator.generate_section_for_object] Instance of &apos;BuiltinsWrapperImplementationGenerator&apos; has no &apos;generate_includes_from_entries&apos; member  [pylint/E1101] [5]
Total errors found: 27 in 24 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>1209016</commentid>
    <comment_count>19</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-08 01:40:55 -0700</bug_when>
    <thetext>Ossy, I plan to land this patch sometimes today.
Hopefully, it should not break any of your bots that disable all use of WebCore JS built-in internals (streams &amp; webrtc).
Just in case, please let me know if you would prefer the landing to be postponed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209021</commentid>
    <comment_count>20</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-07-08 01:47:43 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Ossy, I plan to land this patch sometimes today.
&gt; Hopefully, it should not break any of your bots that disable all use of
&gt; WebCore JS built-in internals (streams &amp; webrtc).
&gt; Just in case, please let me know if you would prefer the landing to be
&gt; postponed.

ALL EWS are green, so I can&apos;t see any blocker issue, feel free to land it. ;)
Don&apos;t worry about non default configurations, we can fix them later
if they had some problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209041</commentid>
    <comment_count>21</comment_count>
      <attachid>283118</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-08 03:43:04 -0700</bug_when>
    <thetext>Comment on attachment 283118
Updated according comments

Clearing flags on attachment: 283118

Committed r202975: &lt;http://trac.webkit.org/changeset/202975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209042</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-08 03:43:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282879</attachid>
            <date>2016-07-06 05:04:58 -0700</date>
            <delta_ts>2016-07-06 06:58:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159461-20160706140423.patch</filename>
            <type>text/plain</type>
            <size>129568</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MDVkMjY0NmExOTcyZGM2NjkxYzQyN2IyOGI5YWY2ZDI5MjAyOWNiLi40YmJjOWFjZmY0YzYxODY0
ZGQzNWI4YzU1MjU4MTE4M2FhYWM2MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxNi0wNy0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgR2VuZXJhdGluZyBXZWJDb3JlIHdyYXBwZXIgZmlsZXMKKworICAgICAgICBH
ZW5lcmF0ZSBXZWJDb3JlIGJ1aWx0aW4gd3JhcHBlciBmaWxlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NDYxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGlucy5w
eTogQWRkaW5nIG5ldyBnZW5lcmF0b3JzLgorICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OiBBZGRlZCB0byBnZW5l
cmF0ZSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmguCisgICAgICAgICogU2NyaXB0cy9idWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eTogQWRkZWQgdG8gZ2VuZXJhdGUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAuCisgICAg
ICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5w
eTogQWRkZWQgdG8gZ2VuZXJhdGUgV2ViQ29yZUpTQnVpbHRpbnMuaC4KKyAgICAgICAgKiBTY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHk6
IEFkZGVkICB0byBnZW5lcmF0ZSBXZWJDb3JlSlNCdWlsdGlucy5jcHAuCisgICAgICAgICogU2Ny
aXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weTogQWRkaW5nIG5ldyBvcHRpb24gdG8gYWN0aXZh
dGUgZ2VuZXJhdGlvbiBvZiB0aGUgd3JhcHBlciBmaWxlcy4KKyAgICAgICAgKGdlbmVyYXRlX2Jp
bmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyk6CisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWls
dGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUu
anMtcmVzdWx0OgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2Vi
Q29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6CisgICAgICAgICogU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0OgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdDoKKyAgICAg
ICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVz
dC1TZXBhcmF0ZS5qcy1yZXN1bHQ6CisKIDIwMTYtMDctMDUgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2tWaXNpdG9yOjp1bndpbmRUb01hY2hpbmVDb2Rl
QmxvY2tGcmFtZSgpIG1heSB1bndpbmQgcGFzdCBhIFZNIGVudHJ5IGZyYW1lIHdoZW4gY2F0Y2hp
bmcgYW4gZXhjZXB0aW9uIGFuZCB0aGUgZnJhbWUgaGFzIGlubGluZWQgdGFpbCBjYWxscwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDM5MmY2ZTkyM2MxMTk1MjVkYjA4YzYxNjBlM2FhYzM3ZTBmNGViNzguLjY4NmIx
N2VhMWM4YmMwMzdjOWNhNDVjYWZmNWY1YTdhZjdjNjVkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNyBAQAorMjAxNi0wNy0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisK
KyAgICAgICAgR2VuZXJhdGUgV2ViQ29yZSBidWlsdGluIHdyYXBwZXIgZmlsZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTQ2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBiZWhh
dmlvci4KKworICAgICAgICBVcGRhdGluZyBidWlsZCBzeXN0ZW0gdG8gaGFuZGxlIG5ldyBidWls
dC1pbiBnZW5lcmF0b3JzLgorICAgICAgICBUaGUgZ2VuZXJhdG9yIGlzIG5vdyBwYXNzZWQgYWxs
IGJ1aWx0LWlucyBhdCBvbmNlIHNvIHRoYXQgd3JhcHBlciBmaWxlcyBjYW4gYmUgZ2VuZXJhdGVk
LgorICAgICAgICBSZW1vdmluZyBjaGVja2VkLWluIHdyYXBwZXIgZmlsZXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2Jh
bE9iamVjdDo6YWRkQnVpbHRpbkdsb2JhbHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVK
U0J1aWx0aW5zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNC
dWlsdGlucy5oOiBSZW1vdmVkLgorCiAyMDE2LTA3LTA1ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9s
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBMYXlvdXQgVGVzdCBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9zb3VyY2UtbGlzdC1wYXJzaW5nLTEwLmh0bWwg
aXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc2ZjY4YmVm
MmY5NzY2ZWUzY2ZiMjU5ZjcyYTJiOTdjZjQyZDk2YmMuLjI2NjJjOGQ4MTRjNTVhNmI3NjY1NmRj
ZTNiZDY1YTUzNTE3OWVmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTEyMDYsNiArMTIwNiwxMCBAQCBzZXQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMKICAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9p
bXBsZW1lbnRhdGlvbi5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0
aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NS
SVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5Cisg
ICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBl
cl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19n
ZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5
CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfaW50
ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQogICAgICR7SmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVJ9L2xhenl3cml0ZXIucHkKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKaW5kZXggZWNkZDg3ZWJkNGUzMjU5NGQ1ZTljNzMwMTYzMGFhNWE2YjBi
NzY1NS4uYTVmMDJiMGFlYjE4NWU5NDNhY2M2ZDI2ZjFmMzUzZTI4MTY5NTE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTc2LDYgKzc2LDEwIEBAIEJV
SUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBU
U19ESVIpL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9u
LnB5IFwKICAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NS
SVBUU19ESVIpL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0
aW9uLnB5IFwKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlucy9idWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weSBcCisgICAgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRh
dGlvbi5weSBcCisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IFwKKyAgICAke0phdmFT
Y3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJ
UFRTX0RJUikvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL2xhenl3cml0ZXIucHkgXAogIwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAyZDJiYzM0MDkzMmQxOGI2YTZkNjcxYzA1NWRhNjk3ZmRhNWNhNGU0Li40OTM4Zjc0
MWRjNzFiNmUyYzMzYTg3N2I5MDBjMzFkOTNmYjg0NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTQ3NCw2ICsxNDc0LDEwIEBACiAJCTk5REEwMEE4MUJENTk5MzEwMEY0NTc1
QyAvKiBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5REEwMDlGMUJENTk5Mjcw
MEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBB
OTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQTAx
QkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBB
QTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50
YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
OURBMDBBMTFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1w
bGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNDEyOTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dl
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTI5NTI3ODFEMkNGNkJDMDBFNzhCODkgLyog
YnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1Mjc0MUQy
Q0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTI5NTI3OTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3Jh
cHBlcl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxMjk1Mjc1MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFw
cGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk0MTI5NTI3QTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3Jh
cHBlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDEyOTUyNzYxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVy
YXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTlEQTAwQUYxQkQ1OTk0RTAwRjQ1NzVDIC8qIGdlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTlEQTAwQUMxQkQ1OTkzRTAwRjQ1NzVDIC8qIGdlbmVyYXRlLWpzLWJ1aWx0aW5z
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk5
REEwMEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQUQxQkQ1OTkzRTAwRjQ1NzVDIC8q
IGxhenl3cml0ZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOTlEQTAwQjExQkQ1OTk0RTAwRjQ1NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQUUxQkQ1
OTkzRTAwRjQ1NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMjg3LDYgKzMyOTEsMTAgQEAKIAkJMkFGNzM4
MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJBRjczODJCMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJ
RFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNG
OTk0IC8qIGxpYnouZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnouZHlsaWI7IHBh
dGggPSB1c3IvbGliL2xpYnouZHlsaWI7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQk0MTI5
NTI3MzFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gYnVpbHRp
bnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJh
dGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEyOTUyNzUx
RDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJhdGVfd3Jh
cHBlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMjk1Mjc2MUQy
Q0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9u
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJh
dGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDFERUExMzExQjlGMzE1NDAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWlsdGluVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDMxOURBMDExQzFCRTNDMTAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRl
ck9wdGltaXphdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHA7IHBhdGggPSBiMy9CM0xvd2VyTWFj
cm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDMxOURBMDIxQzFCRTNDMTAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlck1hY3Jvc0FmdGVy
T3B0aW1pemF0aW9ucy5oOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjcxMCw2ICs2NzE4LDEwIEBACiAJ
CQkJOTlEQTAwOUYxQkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVk
X2ltcGxlbWVudGF0aW9uLnB5ICovLAogCQkJCTk5REEwMEEwMUJENTk5MjcwMEY0NTc1QyAvKiBi
dWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkgKi8sCiAJCQkJOTlEQTAwQTExQkQ1
OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9u
LnB5ICovLAorCQkJCTQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0
ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi8sCisJCQkJNDEyOTUyNzQxRDJDRjZBQzAw
RTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0
aW9uLnB5ICovLAorCQkJCTQxMjk1Mjc1MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5l
cmF0ZV93cmFwcGVyX2hlYWRlci5weSAqLywKKwkJCQk0MTI5NTI3NjFEMkNGNkFDMDBFNzhCODkg
LyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKIAkJCQk5
OURBMDA5QTFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdG9yLnB5ICovLAogCQkJ
CTk5REEwMDlCMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19tb2RlbC5weSAqLywKIAkJCQk5
OURBMDA5QzFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5ICovLApAQCAt
NzEyNCw2ICs3MTM2LDEwIEBACiAJCQkJRkVBMEM0MDMxQ0REN0QxRDAwNDgxOTkxIC8qIEZ1bmN0
aW9uV2hpdGVsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBQTFCRDU5OTMxMDBGNDU3
NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQk5OURBMDBBMzFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJh
dG9yLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJNDEyOTUyNzgxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1
aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhl
YWRlcnMgKi8sCisJCQkJNDEyOTUyNzkxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVy
YXRlX3dyYXBwZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJNDEyOTUyN0ExRDJDRjZC
QzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKKwkJCQk0MTI5NTI3NzFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkUzQTA2QTYxQzEwQjcyRDAwMzkwRkREIC8qIEpJVEJpdE9yR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkg
aW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNf
dGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlucy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zLnB5CmluZGV4IDkzNDllZWVmNjUzNDBhMjJhZGQw
YWMyMjYwZjZjZjYwYjMyMjA2N2QuLmE5YWZmMmIxY2ZmNGYyNTM1MGI3NjU4ZGRhNDljMGE1MTIz
ZTljMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5z
L2J1aWx0aW5zLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5z
L2J1aWx0aW5zLnB5CkBAIC05LDMgKzksNyBAQCBmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJp
bmVkX2hlYWRlciBpbXBvcnQgKgogZnJvbSBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgogZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFk
ZXIgaW1wb3J0ICoKIGZyb20gYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIgaW1wb3J0
ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIgaW1wb3J0
ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzA4M2EwZTQwNjU1NjNhYjAz
YzBmODJiY2M0NzBiYjE5NDU0OThiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTIxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMK
KyMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcK
K2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBp
bXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKK2Zyb20gYnVp
bHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1w
bGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQnVp
bHRpbnNJbnRlcm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBCdWlsdGluc0dlbmVyYXRv
ci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBbb2JqZWN0
IGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5v
dGF0aW9uc10KKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpICsgIkpTQnVpbHRp
bkludGVybmFscy5oIgorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAg
YXJncyA9IHsKKyAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ25hbWVzcGFjZScpLAorICAgICAgICAgICAgJ2hlYWRlckd1YXJkJzogc2VsZi5v
dXRwdXRfZmlsZW5hbWUoKS5yZXBsYWNlKCcuJywgJ18nKSwKKyAgICAgICAgfQorCisgICAgICAg
IHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGlj
ZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90
RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkVG9wKS5zdWJzdGl0dXRlKGFyZ3Mp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
TmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQorCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFy
Z3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkhlYWRlcklu
Y2x1ZGVHdWFyZEJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAgICByZXR1cm4gIlxu
XG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9p
bmNsdWRlcyhzZWxmKToKKyAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWworICAgICAgICAgICAg
KFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVudGlt
ZS9WTS5oIiksCisgICAgICAgICAgICApLAorICAgICAgICBdCisgICAgICAgIGZvciBvYmplY3Qg
aW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBoZWFkZXJfaW5jbHVkZXMuYXBwZW5kKChb
IldlYkNvcmUiXSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1aWx0aW5zLmgi
KSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zy
b21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQorCisgICAgZGVmIGdlbmVyYXRlX3NlY3Rpb25f
Zm9yX29iamVjdChzZWxmKToKKyAgICAgICAgbGluZXMgPSBbImNsYXNzIEpTRE9NR2xvYmFsT2Jq
ZWN0OyIsICIiLCAiY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgeyIsICJwdWJsaWM6
Il0KKworICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9ucyhKU0M6OlZNJik7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9hY2Nlc3NvcnMoKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWV0aG9kcygpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgicHJpdmF0ZToiKQorICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9tZW1iZXJzKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgifTsiKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGFjY2Vzc29yX25hbWUoc2Vs
Ziwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuIFdLX2xjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1l
KQorCisgICAgZGVmIG1lbWJlcl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiAi
bV8iICsgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkKKworICAgIGRlZiBtZW1iZXJfdHlwZShz
ZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gV0tfdWNmaXJzdChvYmplY3Qub2JqZWN0X25h
bWUpICsgIkJ1aWx0aW5GdW5jdGlvbnMiCisKKyAgICBkZWYgZ2VuZXJhdGVfbWV0aG9kcyhzZWxm
KToKKyAgICAgICAgcmV0dXJuICIgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7XG4g
ICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7IgorCisgICAgZGVmIGdlbmVy
YXRlX2FjY2Vzc29ycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3Igb2Jq
ZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgY29uZGl0aW9uYWxfZ3VhcmQgPSBv
YmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCisgICAgICAgICAgICBpZiBjb25k
aXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
IiNpZiAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgi
ICAgICIgKyBzZWxmLm1lbWJlcl90eXBlKG9iamVjdCkgKyAiJiAiICsgc2VsZi5hY2Nlc3Nvcl9u
YW1lKG9iamVjdCkgKyAiKCkgeyByZXR1cm4gIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSAr
ICI7IH0iKQorICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxf
Z3VhcmQpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiIikKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9tZW1iZXJzKHNlbGYpOgorICAgICAgICBsaW5l
cyA9IFsiICAgIEpTQzo6Vk0mIHZtOyJdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRl
cm5hbHM6CisgICAgICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9IG9iamVjdC5hbm5vdGF0aW9u
cy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2lmICVzIiAlIGNvbmRp
dGlvbmFsX2d1YXJkKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgIiArIHNlbGYubWVt
YmVyX3R5cGUob2JqZWN0KSArICIgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICI7IikK
KyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9i
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMTMxNGQ3N2NlMzY5ZDAxMTdiOGJjYThkNmY1ZmE5NjgxYzUwN2Uz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkK
QEAgLTAsMCArMSwxNjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGlu
c0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tfdWNmaXJzdAorZnJvbSBidWlsdGluc190ZW1wbGF0
ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCdWlsdGluc0ludGVybmFs
c1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19p
bml0X18oc2VsZiwgbW9kZWwpCisgICAgICAgIHNlbGYuaW50ZXJuYWxzID0gW29iamVjdCBmb3Ig
b2JqZWN0IGluIG1vZGVsLm9iamVjdHMgaWYgJ2ludGVybmFsJyBpbiBvYmplY3QuYW5ub3RhdGlv
bnNdCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSArICJKU0J1aWx0aW5JbnRl
cm5hbHMuY3BwIgorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgYXJn
cyA9IHsKKyAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNl
dHRpbmcoJ25hbWVzcGFjZScpLAorICAgICAgICAgICAgJ2hlYWRlckd1YXJkJzogc2VsZi5vdXRw
dXRfZmlsZW5hbWUoKS5yZXBsYWNlKCcuJywgJ18nKSwKKyAgICAgICAgfQorCisgICAgICAgIHNl
Y3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5z
ZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRp
dFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKworICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCkuc3Vic3Rp
dHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlv
bl9mb3Jfb2JqZWN0KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCisgICAgICAgICAg
ICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIkpTRE9NR2xvYmFs
T2JqZWN0LmgiKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisg
ICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIldlYkNvcmVKU0NsaWVudERhdGEuaCIpLAorICAg
ICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAo
IkphdmFTY3JpcHRDb3JlIiwgImhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgiKSwKKyAgICAgICAg
ICAgICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZh
U2NyaXB0Q29yZSIsICJydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2Ny
aXB0Q29yZSIsICJydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAorICAgICAgICAgICAgKSwK
KyAgICAgICAgXQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2Vj
dGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfY29uc3RydWN0b3IoKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuZ2VuZXJhdGVfbWV0aG9kcygpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQorCisgICAgZGVmIGFjY2Vzc29yX25hbWUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0
dXJuIFdLX2xjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKQorCisgICAgZGVmIG1lbWJlcl9uYW1l
KHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiAibV8iICsgc2VsZi5hY2Nlc3Nvcl9uYW1l
KG9iamVjdCkKKworICAgIGRlZiBtZW1iZXJfdHlwZShzZWxmLCBvYmplY3QpOgorICAgICAgICBy
ZXR1cm4gV0tfdWNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpICsgIkJ1aWx0aW5GdW5jdGlvbnMi
CisKKyAgICBkZWYgZ2VuZXJhdGVfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGxpbmVzID0g
WyJKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMo
SlNDOjpWTSYgdikiLCAiICAgIDogdm0odikiXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYu
aW50ZXJuYWxzOgorICAgICAgICAgICAgY29uZGl0aW9uYWxfZ3VhcmQgPSBvYmplY3QuYW5ub3Rh
dGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCisgICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFy
ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNpZiAlcyIgJSBj
b25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICwgIiArIHNl
bGYubWVtYmVyX25hbWUob2JqZWN0KSArICIodm0pIikKKyAgICAgICAgICAgIGlmIGNvbmRpdGlv
bmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2Vu
ZGlmIC8vICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICBsaW5lcy5hcHBlbmQoIntc
biAgICBVTlVTRURfUEFSQU0odm0pO1xufSIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiIikKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9tZXRob2Rz
KHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
czo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikiLCAieyJdCisgICAgICAgIGZvciBv
YmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9
IG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAgICAgICAgICAgIGlmIGNv
bmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCIgICAgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICIudmlzaXQodmlzaXRvcik7IikK
KyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7XG59IikKKwor
ICAgICAgICBsaW5lcy5hcHBlbmQoInZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6Omlu
aXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdClcbnsiKQorICAgICAgICBm
b3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgY29uZGl0aW9uYWxfZ3Vh
cmQgPSBvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCisgICAgICAgICAgICBp
ZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoIiNpZiAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgiICAgICIgKyBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkgKyAiLmluaXQoZ2xvYmFsT2Jq
ZWN0KTsiKQorICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxf
Z3VhcmQpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgSlNWTUNsaWVudERhdGEmIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsiKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVy
dHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsiKQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYu
aW50ZXJuYWxzOgorICAgICAgICAgICAgY29uZGl0aW9uYWxfZ3VhcmQgPSBvYmplY3QuYW5ub3Rh
dGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCisgICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFy
ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNpZiAlcyIgJSBj
b25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSBERUNM
QVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcXCIpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAg
ICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFxcIikKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgiICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS4iICsg
c2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkgKyAiQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFt
ZSgpLCAiICsgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkgKyAiKCkubV8jI25hbWUjI0Z1bmN0
aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFkT25seSksIikKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiICAgIFdFQkNPUkVfRk9SRUFDSF8iICsgb2JqZWN0Lm9iamVjdF9u
YW1lLnVwcGVyKCkgKyAiX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFU
SUMpIikKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NU
QVRJQyIpCisKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlvbmFs
X2d1YXJkKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIH07IikKKyAgICAgICAgbGluZXMu
YXBwZW5kKCIgICAgaWYgKHNpemVvZihzdGF0aWNHbG9iYWxzKSkiKQorICAgICAgICBsaW5lcy5h
cHBlbmQoIiAgICAgICAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9i
YWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsiKQorICAgICAgICBsaW5lcy5h
cHBlbmQoIiAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7IikKKworICAgICAgICBsaW5lcy5h
cHBlbmQoIn0iKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdl
bmVyYXRlX21lbWJlcnMoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIG9i
amVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGNvbmRpdGlvbmFsX2d1YXJkID0g
b2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQorICAgICAgICAgICAgaWYgY29u
ZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
IiAgICAgICAgIiArIHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSArICIgIiArIHNlbGYubWVtYmVy
X25hbWUob2JqZWN0KSArICI7IikKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAl
IGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dy
YXBwZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0M2QzNTk1ZTU0NDliMDkyMWY4MTdhYWQ2MDY0
NjA1NmUyM2FiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQpAQCAtMCww
ICsxLDEzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKKworZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJh
dG9yLCBXS19sY2ZpcnN0LCBXS191Y2ZpcnN0Citmcm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBv
cnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJ1aWx0aW5zV3JhcHBlckhlYWRlckdl
bmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
KToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCisKKyAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSArICJKU0J1aWx0aW5zLmgiCisKKyAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAg
J25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyks
CisgICAgICAgICAgICAnaGVhZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgpLnJlcGxh
Y2UoJy4nLCAnXycpLAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0
ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFk
ZXJJbmNsdWRlR3VhcmRUb3ApLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1
dGUoYXJncykpCisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlv
bl9mb3Jfb2JqZWN0KCkpCisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5OYW1lc3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkQm90dG9tKS5zdWJz
dGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKwor
ICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgorICAgICAg
ICBoZWFkZXJfaW5jbHVkZXMgPSBbCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAg
ICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSwKKyAgICAgICAgICAg
ICksCisgICAgICAgIF0KKyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0
czoKKyAgICAgICAgICAgIGhlYWRlcl9pbmNsdWRlcy5hcHBlbmQoKFsiV2ViQ29yZSJdLCAoIldl
YkNvcmUiLCBvYmplY3Qub2JqZWN0X25hbWUgKyAiQnVpbHRpbnMuaCIpKSkKKworICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRl
cl9pbmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYp
OgorICAgICAgICBsaW5lcyA9IFsiY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsiLCAicHVibGlj
OiJdCisKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfY29uc3RydWN0b3IoKSkK
KyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfYWNjZXNzb3JzKCkpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgicHJpdmF0ZToiKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9tZW1iZXJzKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgifTsiKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGFjY2Vzc29yX25hbWUoc2VsZiwgb2JqZWN0
KToKKyAgICAgICAgcmV0dXJuIFdLX2xjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKSArICJCdWls
dGlucyIKKworICAgIGRlZiBtZW1iZXJfbmFtZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1
cm4gIm1fIiArIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpCisKKyAgICBkZWYgbWVtYmVyX3R5
cGUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuIFdLX3VjZmlyc3Qob2JqZWN0Lm9iamVj
dF9uYW1lKSArICJCdWlsdGluc1dyYXBwZXIiCisKKyAgICBkZWYgZ2VuZXJhdGVfY29uc3RydWN0
b3Ioc2VsZik6CisgICAgICAgIGxpbmVzID0gWyIgICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rp
b25zKEpTQzo6Vk0mIHYpIiwgIiAgICAgICAgOiB2bSh2KSJdCisgICAgICAgIGZvciBvYmplY3Qg
aW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CisgICAgICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9
IG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAgICAgICAgICAgIGlmIGNv
bmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCIgICAgICAgICwgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICIoJnZtKSIpCisgICAg
ICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoIiNlbmRpZiAvLyAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCIgICAgeyIpCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2Rl
bCgpLm9iamVjdHM6CisgICAgICAgICAgICBpZiBub3QgJ2ludGVybmFsJyBpbiBvYmplY3QuYW5u
b3RhdGlvbnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvbmRpdGlv
bmFsX2d1YXJkID0gb2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQorICAgICAg
ICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoIiAgICAgICAgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICIuZXhw
b3J0TmFtZXMoKTsiKQorICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0
aW9uYWxfZ3VhcmQpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIH1cbiIpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfYWNjZXNzb3JzKHNlbGYp
OgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgp
Lm9iamVjdHM6CisgICAgICAgICAgICBjb25kaXRpb25hbF9ndWFyZCA9IG9iamVjdC5hbm5vdGF0
aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJk
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2lmICVzIiAlIGNv
bmRpdGlvbmFsX2d1YXJkKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgIiArIHNlbGYu
bWVtYmVyX3R5cGUob2JqZWN0KSArICImICIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KSAr
ICIoKSB7IHJldHVybiAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsgIjsgfSIpCisgICAg
ICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoIiNlbmRpZiAvLyAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCIiKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisg
ICAgZGVmIGdlbmVyYXRlX21lbWJlcnMoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyIgICAgSlND
OjpWTSYgdm07Il0KKyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoK
KyAgICAgICAgICAgIGNvbmRpdGlvbmFsX2d1YXJkID0gb2JqZWN0LmFubm90YXRpb25zLmdldCgn
Y29uZGl0aW9uYWwnKQorICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxf
Z3VhcmQpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICAiICsgc2VsZi5tZW1iZXJfdHlw
ZShvYmplY3QpICsgIiAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsgIjsiKQorICAgICAg
ICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Mzc0YjZkNDM3
ZTliNjkyM2E5Mjk3MWU4YTJhODc5N2Y4NDFiNmYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDYyIEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxv
Z2dpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVy
YXRvciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IKK2Zyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGlt
cG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQnVpbHRpbnNXcmFwcGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCk6CisgICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1v
ZGVsKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykgKyAiSlNCdWlsdGlucy5j
cHAiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBhcmdzID0gewor
ICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVhZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxl
bmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMg
PSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2Fybmlu
Zykuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4o
c2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgor
ICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYu
bW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAgaGVhZGVyX2luY2x1ZGVzLmFwcGVuZCgoWyJX
ZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5vYmplY3RfbmFtZSArICJCdWlsdGlucy5jcHAi
KSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zy
b21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQppbmRleCA1NTRhNzJjY2MwNTIz
MmNhMzY3ZTM4OTQ1YWI2MjAxZjQ1MjNlMDRhLi42ZmY1MmNkYzUxNmY1NmNmNjkyOTg0NTA1YTRl
NzMyODg3NzA3N2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9n
ZW5lcmF0ZS1qcy1idWlsdGlucy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQpAQCAtNDUsNiArNDUsNyBAQCBkZWYgZ2VuZXJhdGVf
YmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFs
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkX291
dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVfd3JhcHBlcl9maWxlcz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSk6CiAKQEAgLTc0LDYgKzc1LDEzIEBA
IGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9
W10sCiAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSGVhZGVy
R2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQogICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
QnVpbHRpbnNTZXBhcmF0ZUltcGxlbWVudGF0aW9uR2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQog
CisgICAgICAgIGlmIGdlbmVyYXRlX3dyYXBwZXJfZmlsZXM6CisgICAgICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChCdWlsdGluc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IobW9kZWwpKQorICAgICAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IobW9kZWwpKQorCisgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0lu
dGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IobW9kZWwpKQorICAgICAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoQnVpbHRpbnNJbnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IobW9kZWwpKQorCiAgICAgbG9nLmRlYnVnKCIiKQogICAgIGxvZy5kZWJ1ZygiR2VuZXJhdGlu
ZyBiaW5kaW5ncyBmb3IgYnVpbHRpbnMuIikKIApAQCAtMTE0LDYgKzEyMiw3IEBAIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29y
ayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9
IkRlc3RpbmF0aW9uIGZyYW1ld29yayBmb3IgZ2VuZXJhdGVkIGZpbGVzLiIpCiAgICAgY2xpX3Bh
cnNlci5hZGRfb3B0aW9uKCItLWZvcmNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRm9y
Y2Ugb3V0cHV0IG9mIGdlbmVyYXRlZCBzY3JpcHRzLCBldmVuIGlmIG5vdGhpbmcgY2hhbmdlZC4i
KQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1jb21iaW5lZCIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGhlbHA9IlByb2R1Y2Ugb25lIC5oLy5jcHAgZmlsZSBpbnN0ZWFkIG9mIHByb2R1Y2lu
ZyBvbmUgcGVyIGJ1aWx0aW4gb2JqZWN0LiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCIt
LXdpdGgtd3JhcHBlci1maWxlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByb2R1Y2Ug
LmgvLmNwcCB3cmFwcGVyIGZpbGVzIHRvIGVhc2UgaW50ZWdyYXRpb24gb2YgdGhlIGJ1aWx0aW5z
LiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVnIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdnaW5nIHRoZSBnZW5l
cmF0b3IgaXRzZWxmLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3Qi
LCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiIpCiAKQEAgLTEz
OCw2ICsxNDcsNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAnb3V0cHV0
X3BhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXRfZGlyZWN0b3J5LAogICAgICAgICAnZnJhbWV3b3Jr
X25hbWUnOiBhcmdfb3B0aW9ucy5mcmFtZXdvcmssCiAgICAgICAgICdjb21iaW5lZF9vdXRwdXQn
OiBhcmdfb3B0aW9ucy5jb21iaW5lZCwKKyAgICAgICAgJ2dlbmVyYXRlX3dyYXBwZXJfZmlsZXMn
OiBhcmdfb3B0aW9ucy53aXRoX3dyYXBwZXJfZmlsZXMsCiAgICAgICAgICdmb3JjZV9vdXRwdXQn
OiBhcmdfb3B0aW9ucy5mb3JjZSwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFyZ19v
cHRpb25zLnRlc3QsCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25h
bEd1YXJkLVNlcGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFy
ZC1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggNGUyNTUxNTBiZTM2YmQzMmM0ZTQwNmNjNWQ1Y2Vk
Y2NjYWRmZTM0OS4uN2E3OWVhN2M3Y2IyYjJiZjI0MDRkNjJlMWJhMjEyNDE5YWU2NjQ2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBl
Y3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0
CkBAIC0xOTcsMyArMTk3LDIyMiBAQCBXRUJDT1JFX0ZPUkVBQ0hfQVJCSVRSQVJZQ09ORElUSU9O
QUxHVUFSRF9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQogCiAjIyMgRW5kIEZpbGU6IEFyYml0cmFy
eUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5zLmgKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9y
CisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaWZuZGVmIFdlYkNvcmVKU0J1aWx0aW5zX2gK
KyNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbnNfaAorCisjaW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0
aW9uYWxHdWFyZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgICAgIDogdm0odikK
KyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICAgICAgLCBtX2FyYml0cmFy
eUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucygmdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKSB8fCBVU0UoQ0YpCisgICAgeworICAgIH0KKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkg
fHwgVVNFKENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIm
IGFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucygpIHsgcmV0dXJuIG1fYXJiaXRyYXJ5
Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KSB8fCBVU0UoQ0YpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgdm07CisjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisgICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0
aW5zV3JhcHBlciBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsKKyNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5zX2gKKworIyMjIEVuZCBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWls
dGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0
ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1
aWx0aW5zLmNwcCIKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisj
aWZuZGVmIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzX2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xhc3MgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK3ByaXZhdGU6
CisgICAgSlNDOjpWTSYgdm07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKKworIyMjIEVuZCBGaWxlOiBXZWJDb3Jl
SlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5J
bnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZv
cgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFs
T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQorICAgIDogdm0odikKK3sKKyAgICBVTlVTRURfUEFS
QU0odm0pOworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKK30K
K3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIEpTRE9N
R2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geworICAg
IH07CisgICAgaWYgKHNpemVvZihzdGF0aWNHbG9iYWxzKSkKKyAgICAgICAgICBnbG9iYWxPYmpl
Y3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRp
Y0dsb2JhbHMpKTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0
aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2Vi
Q29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggODNkZWM1Nzg4Nzk1
ZjMwZTc5Nzk5ZWQyOWFkNDUzYTkyZWVlNDM4Ni4uZjUxNjBlMzE3ZmFiYzZlM2RiMjYyZmI2YjVm
NjhlOTc2MGRlMDRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5q
cy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRp
bnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAg
LTE5NywzICsxOTcsMjIyIEBAIFdFQkNPUkVfRk9SRUFDSF9HVUFSREVEQlVJTFRJTl9CVUlMVElO
X0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKIAogIyMjIEVuZCBGaWxlOiBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
NSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYg
V2ViQ29yZUpTQnVpbHRpbnNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluc19oCisKKyNpbmNs
dWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgICAg
IDogdm0odikKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgICwgbV9ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zKCZ2bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgewor
ICAgIH0KKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0
aW5zV3JhcHBlciYgZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEJ1
aWx0aW5CdWlsdGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0
ZToKKyAgICBKU0M6OlZNJiB2bTsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRl
ZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOworI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5zX2gKKworIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWls
dGlucy5weQorCisjaW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjIyMgRW5k
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZp
bGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lmbmRlZiBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzX2gKKyNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCisKKyNp
bmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNE
T01HbG9iYWxPYmplY3Q7CisKK2NsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7
CisKKworICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlh
bGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIHZtOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRp
bkludGVybmFsc19oCisKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0
aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgiCisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpW
TSYgdikKKyAgICA6IHZtKHYpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKK30KKwordm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cit9Cit2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFs
UHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKKyAgICB9OworICAgIGlmIChzaXplb2Yo
c3RhdGljR2xvYmFscykpCisgICAgICAgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMo
c3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5V
U0VEX1BBUkFNKGNsaWVudERhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMg
RW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3Jl
LUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVk
SW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCAxYzYxYWFiMGYyYWRiYmQ1
YTYxZjE2NGUzNWZmMTU4ZmFjY2MzM2NlLi43MzkwZWUzZjQwZjA4ZTY4M2M3MTlhZmVmYTE0Njlh
OTNlZjVkMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0
cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJh
dGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1
aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5q
cy1yZXN1bHQKQEAgLTIyOSwzICsyMjksMjQ4IEBAIFdFQkNPUkVfRk9SRUFDSF9HVUFSREVESU5U
RVJOQUxCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWls
dGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0
ZS1qcy1idWlsdGlucy5weQorCisjaWZuZGVmIFdlYkNvcmVKU0J1aWx0aW5zX2gKKyNkZWZpbmUg
V2ViQ29yZUpTQnVpbHRpbnNfaAorCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1
aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNC
dWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgICAgIDogdm0odikKKyNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCisgICAgICAgICwgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMo
JnZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB7CisjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgICAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5leHBv
cnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9CisKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3Jh
cHBlciYgZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgdm07CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQor
ICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJu
YWxCdWlsdGluQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRpbnNfaAor
CisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJHdWFyZGVkSW50
ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwIgorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1
aWx0aW5zLnB5CisKKyNpZm5kZWYgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCisjZGVmaW5l
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFs
QnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zJiBndWFyZGVkSW50ZXJuYWxCdWls
dGluKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOyB9CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQorCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK3ByaXZhdGU6CisgICAg
SlNDOjpWTSYgdm07CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbjsKKyNlbmRp
ZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKKworIyMjIEVuZCBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZp
bGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1
ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQorICAgIDogdm0odikKKyNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCisgICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4odm0pCisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7Cit9CisKK3Zv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZEludGVybmFs
QnVpbHRpbi52aXNpdCh2aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworfQordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4uaW5pdChn
bG9iYWxPYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBKU1ZNQ2xp
ZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3Rh
dGljR2xvYmFsc1tdID0geworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNkZWZpbmUgREVDTEFS
RV9HTE9CQUxfU1RBVElDKG5hbWUpXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9w
ZXJ0eUluZm8oXAorICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5ndWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBndWFyZGVkSW50
ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRl
IHwgSlNDOjpSZWFkT25seSksCisgICAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURJTlRFUk5BTEJV
SUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKKyN1bmRl
ZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgfTsKKyAgICBpZiAoc2l6ZW9mKHN0YXRpY0dsb2JhbHMpKQorICAgICAgICAgIGdsb2JhbE9i
amVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3Rh
dGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVp
bHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggY2VkZjhm
YjRiZWFhYTMzY2ZmYzMxYTlhYjUzNzA3NzcyNTUwM2IzMS4uZDBlOGY0OTA5MDc3OTE2YjMyNWEy
NGFkZjJkNTAyNzgwZDNjOTBjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNl
cGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0
cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMt
cmVzdWx0CkBAIC0xODgsMyArMTg4LDIxNiBAQCBXRUJDT1JFX0ZPUkVBQ0hfVU5HVUFSREVEQlVJ
TFRJTl9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAjIyMgRW5kIEZpbGU6IFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisj
aWZuZGVmIFdlYkNvcmVKU0J1aWx0aW5zX2gKKyNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbnNfaAor
CisjaW5jbHVkZSAiVW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9u
cyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYp
CisgICAgICAgIDogdm0odikKKyAgICAgICAgLCBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygm
dm0pCisgICAgeworICAgIH0KKworICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIm
IHVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fdW5ndWFyZGVkQnVpbHRpbkJ1
aWx0aW5zOyB9CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgdm07CisgICAgVW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zV3JhcHBlciBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5zX2gKKwor
IyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJD
b3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAiVW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zLmNwcCIKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICog
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eQorCisjaWZuZGVmIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorI2RlZmluZSBXZWJDb3Jl
SlNCdWlsdGluSW50ZXJuYWxzX2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xhc3MgSlNCdWls
dGluSW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK3By
aXZhdGU6CisgICAgSlNDOjpWTSYgdm07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKKworIyMjIEVuZCBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZp
bGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1
ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQorICAgIDogdm0odikKK3sKKyAgICBVTlVT
RURfUEFSQU0odm0pOworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKK30KK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAg
IEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0g
eworICAgIH07CisgICAgaWYgKHNpemVvZihzdGF0aWNHbG9iYWxzKSkKKyAgICAgICAgICBnbG9i
YWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RI
KHN0YXRpY0dsb2JhbHMpKTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IDE1NDRkZmI0
NTAyNGM4YmExZmIzMzBiMWE1NzYyNWZhYTM1MDdkYzMuLjBiNDNkNzcxYzBhNjFjZTFiMDk4M2I1
N2I2Y2U2OGExZTRmYWFmNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0
ZS5qcy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVp
bHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJlc3VsdApA
QCAtMjgwLDMgKzI4MCwyNDggQEAgV0VCQ09SRV9GT1JFQUNIX1hNTENBU0lOR1RFU1RfQlVJTFRJ
Tl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCiAKICMjIyBFbmQgRmlsZTogeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
NSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYg
V2ViQ29yZUpTQnVpbHRpbnNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluc19oCisKKyNpbmNs
dWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuaCIKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdikKKyAgICAgICAg
OiB2bSh2KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAgLCBtX3htbENhc2luZ1Rl
c3RCdWlsdGlucygmdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIHsKKyNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmV4
cG9ydE5hbWVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIH0KKworI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbnNXcmFwcGVyJiB4
bWxDYXNpbmdUZXN0QnVpbHRpbnMoKSB7IHJldHVybiBtX3htbENhc2luZ1Rlc3RCdWlsdGluczsg
fQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0ZToKKyAgICBKU0M6OlZN
JiB2bTsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5z
V3JhcHBlciBtX3htbENhc2luZ1Rlc3RCdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJDb3Jl
SlNCdWlsdGluc19oCisKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1
ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRp
bnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkKKworI2lmbmRlZiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKKyNk
ZWZpbmUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCisKKyNpbmNsdWRlICJ4bWxDYXNpbmdU
ZXN0QnVpbHRpbnMuaCIKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CisKK2NsYXNzIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1
bmN0aW9ucyhKU0M6OlZNJik7CisKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2Fz
aW5nVGVzdEJ1aWx0aW5GdW5jdGlvbnMmIHhtbENhc2luZ1Rlc3QoKSB7IHJldHVybiBtX3htbENh
c2luZ1Rlc3Q7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisKKyAgICB2b2lkIHZp
c2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxP
YmplY3QmKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2bTsKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5GdW5jdGlvbnMgbV94bWxDYXNpbmdUZXN0
OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorCisjIyMgRW5k
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVnaW4gRmlsZTogV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFT
Y3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgorCisjaW5jbHVk
ZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgOiB2bSh2KQorI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAsIG1feG1sQ2FzaW5nVGVzdCh2bSkKKyNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKK30KKwordm9p
ZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV94bWxDYXNpbmdUZXN0LnZp
c2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7Cit9Cit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0
aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgIG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Cisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFt
ZSlcCisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhcCisgICAgICAg
IGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlucygpLm5h
bWUjI1ByaXZhdGVOYW1lKCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0
KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAgICBXRUJDT1JFX0ZPUkVB
Q0hfWE1MQ0FTSU5HVEVTVF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RB
VElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICB9OworICAgIGlmIChzaXplb2Yoc3RhdGljR2xvYmFscykpCisgICAgICAg
ICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZ
X0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDk1ZWI5Yzg4NWY0ZjY2ZWYx
NjUwNjIxNTEyODdhYTM1NTI1OWM1ZmYuLmQ3YjVkN2VkMTc1NjAyMGQzZDRlZWMyOGI2NmQ5NWNh
ODNiYTAwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjM5LDggKzEyMzksNiBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAog
ICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAogICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKLSAgICBiaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcAotICAgIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcAogICAgIGJpbmRp
bmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKICAgICBiaW5kaW5ncy9qcy9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAogCkBAIC0zNzM2LDI1ICszNzM0LDMyIEBAIHNldChC
VUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUwogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5CiAgICAgJHtK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVh
ZGVyLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJh
dGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQ
VFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQorICAgICR7SmF2YVNj
cmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50
YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRh
dGlvbi5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWpzLWJ1
aWx0aW5zLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vbGF6eXdyaXRlci5w
eQogKQogCithZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5jcHAKKyAgICAgICAgICAgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmgKKyAgICAgICAgICAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3Bw
CisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmgKKyAgICBNQUlOX0RFUEVOREVOQ1kgJHtXZWJDb3JlX0JVSUxUSU5TX1NP
VVJDRVN9CisgICAgREVQRU5EUyAke0JVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTfQorICAgIENP
TU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0v
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13aXRoLXdyYXBwZXItZmlsZXMgLS1mcmFtZXdvcmsg
V2ViQ29yZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
ICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfQorICAgIFZFUkJBVElNKQorCiBmb3JlYWNoIChf
YnVpbHRpblNvdXJjZSAke1dlYkNvcmVfQlVJTFRJTlNfU09VUkNFU30pCiAgICAgZ2V0X2ZpbGVu
YW1lX2NvbXBvbmVudChfb2JqZWN0TmFtZSAke19idWlsdGluU291cmNlfSBOQU1FX1dFKQotICAg
IGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcAotICAgICAgICAgICAgICAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuaAotICAg
ICAgICBNQUlOX0RFUEVOREVOQ1kgJHtfYnVpbHRpblNvdXJjZX0KLSAgICAgICAgREVQRU5EUyAk
e0JVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTfQotICAgICAgICBDT01NQU5EICR7UFlUSE9OX0VY
RUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWpzLWJ1aWx0
aW5zLnB5IC0tZnJhbWV3b3JrIFdlYkNvcmUgLS1vdXRwdXQtZGlyZWN0b3J5ICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfSAke19idWlsdGluU291cmNlfQotICAgICAgICBWRVJCQVRJTSkK
LSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUwotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oCi0gICAgKQot
ICAgIEFERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElS
fS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5jcHAgJHtfb2JqZWN0TmFtZX1CdWlsdGlu
cy5jcHApCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuaCkKKyAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5jcHApCiBlbmRmb3JlYWNoICgpCi0KK2xpc3Qo
QVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9XZWJDb3JlSlNCdWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NP
VVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCkKIAogQURE
X1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2h0bWwv
SFRNTFRyZWVCdWlsZGVyLmNwcCBNYXRoTUxOYW1lcy5jcHApCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCmluZGV4IGNhMWIwNzg3MTNlYzdjMDE0ZTAzNzc0MDg2ZDliYTdlMzMyNGQ4MWYu
Ljk3YzNiNGI4MjU2NjA4ZWViZWY1N2QwNDVhOGNhZTMyZjcyNmFjMGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQpAQCAtMTMxMCwyMSArMTMxMCwyNiBAQCBCVUlMVElOU19HRU5FUkFU
T1JfU0NSSVBUUyA9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGlu
c19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSBcCiAgICAgJChKYXZhU2NyaXB0
Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5IFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGluc19nZW5lcmF0ZV9zZXBh
cmF0ZV9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJ
UikvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IFwKKyAgICAk
KEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRT
X0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkgXAorICAgICQoSmF2YVNj
cmlwdENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50
YXRpb24ucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5IFwKICAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9sYXp5d3Jp
dGVyLnB5IFwKICMKIAogIyBBZGRpbmcvcmVtb3Zpbmcgc2NyaXB0cyBzaG91bGQgdHJpZ2dlciBy
ZWdlbmVyYXRpb24sIGJ1dCBjaGFuZ2luZyB3aGljaCBidWlsdGlucyBhcmUKICMgZ2VuZXJhdGVk
IHNob3VsZCBub3QgYWZmZWN0IG90aGVyIGJ1aWx0aW5zIHdoZW4gbm90IHBhc3NpbmcgJy0tY29t
YmluZWQnIHRvIHRoZSBnZW5lcmF0b3IuCisjIFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFX0xJU1Qg
PSAkKHNoZWxsIGVjaG8gJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpIHwgcGVybCAtZSAncHJp
bnQgIiAiIC4gam9pbigiIC1JIiwgc3BsaXQoIiAiLCA8PikpOycpCiAKIC5QSE9OWTogZm9yY2UK
IFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QgOiAkKEphdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSKS9VcGRhdGVDb250ZW50cy5weSBmb3JjZQogCSQoUFlUSE9OKSAkKEphdmFTY3Jp
cHRDb3JlX1NDUklQVFNfRElSKS9VcGRhdGVDb250ZW50cy5weSAnJChCVUlMVElOU19HRU5FUkFU
T1JfU0NSSVBUUyknICRACiAKLSVCdWlsdGlucy5oOiAlLmpzICQoQlVJTFRJTlNfR0VORVJBVE9S
X1NDUklQVFMpIFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QKLQkkKFBZVEhPTikg
JChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1v
dXRwdXQtZGlyZWN0b3J5IC4gLS1mcmFtZXdvcmsgV2ViQ29yZSAkPAorCSQoUFlUSE9OKSAkKEph
dmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAtLXdpdGgt
d3JhcHBlci1maWxlcyAtLW91dHB1dC1kaXJlY3RvcnkgLiAtLWZyYW1ld29yayBXZWJDb3JlICQo
V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKQogCi1hbGwgOiAkKG5vdGRpciAkKFdlYkNvcmVfQlVJ
TFRJTlNfU09VUkNFUzolLmpzPSVCdWlsdGlucy5oKSkKKworYWxsIDogV2ViQ29yZV9CVUlMVElO
U19ERVBFTkRFTkNJRVNfTElTVAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZDUyM2MyZjM2NjEwNDNjZGNhMDY3NWEyMjVkNmYyY2EzNmJmMjY3MC4uNDMzZjJkOTFlM2E4Nzc4
ODBmYzdiNDk5ZDA1OTk4MWYxNmUzNjhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTU2MCw3ICsxNTYwLDYgQEAKIAkJNDBF
Q0FFN0UxNkI4QjY3MjAwQzM2MTAzIC8qIEpTRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQwRUNBRTdEMTZCOEI2NzIwMEMzNjEwMyAvKiBK
U0RPTUVycm9yLmggKi87IH07CiAJCTQwRUNBRTgxMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVy
cm9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQw
RUNBRTgwMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNwcCAqLzsgfTsKIAkJNDEwQjdF
NzIxMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMEI3RTcxMTA0NUZBQjAwMEQ4
MjI0RiAvKiBKU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAgKi87IH07Ci0JCTQxMEQzMzI0MUMxOTk4
NTAwMEY3RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMEQzMzIzMUMxOTk4NDEwMEY3RkRF
MiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCAqLzsgfTsKIAkJNDEyMzA4MUIxMzhD
NDI5NzAwQkNDRkNBIC8qIFdlYkNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdl
YkNvcmUuZnJhbWV3b3JrICovOyB9OwogCQk0MTIzMDkxMzEzOEM0MkZGMDBCQ0NGQ0EgLyogSmF2
YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayAqLzsgfTsKIAkJNDEyN0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
MjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi87IH07CkBAIC0xNjEx
LDkgKzE2MTAsNiBAQAogCQk0MThGODgwNTBGRjk1N0FGMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdv
cmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4
Rjg4MDMwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuaCAqLzsgfTsKIAkJNDE5
QkMyREUxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkMyREMxNjg1MzI5OTAwRDY0
RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuY3BwICovOyB9OwogCQk0MTlCQzJERjE2ODUzMjk5MDBE
NjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE5QkMyREQxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5r
U3RhdGUuaCAqLzsgfTsKLQkJNDE5QkU3NTYxQkM3RjQxQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxOUJFNzUzMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
NDE5QkU3NTcxQkM3RjQyMTAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxOUJFNzU0MUJDN0YzREIw
MEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgKi87IH07Ci0JCTQxOUJFNzU4MUJDN0Y0
MjcwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkU3NTUxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNv
cmVKU0J1aWx0aW5zLmggKi87IH07CiAJCTQxOUJFNzU5MUJDN0Y0MkIwMEUxQzg1QiAvKiBXZWJD
b3JlQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MTlCRTc1MjFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUJ1aWx0aW5OYW1lcy5o
ICovOyB9OwogCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
QTNENThDMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwICovOyB9
OwogCQk0MUEzRDU4RjEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUEzRDU4RDEw
MUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmggKi87IH07CkBAIC01NTQ0
LDcgKzU1NDAsMTEgQEAKIAkJQkMzM0ZCMUIwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVC
b3hMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMzNGQjFBMEYzMEVFODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi87IH07
CiAJCUJDMzQ4QkJFMERCN0Y1MzEwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzQ4QkJE
MERCN0Y1MzEwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJ
QkMzNDhCRDMwREI3RjgwNDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCRDEwREI3RjgwNDAw
NEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OworCQlCQzM0OEJEMzBEQjdGODA0
MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNv
cmVKU0J1aWx0aW5zLmNwcCAqLzsgfTsKKwkJQkMzNDhCRDMwREI3RjgwNDAwNEFCQUJCIC8qIFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwICovOyB9OwogCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQjkgLyog
SlNYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMzNDhCRDIwREI3RjgwNDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAq
LzsgfTsKKwkJQkMzNDhCRDQwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJEMjBE
QjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCAqLzsgfTsKKwkJQkMzNDhCRDQw
REI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzQ4QkQyMERCN0Y4MDQwMDRB
QkFCQiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMzQkMyOUMwRTkxQUIwRjAwODM1NTg4IC8q
IEhvc3RXaW5kb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDM0JDMjlCMEU5MUFCMEYwMDgzNTU4OCAvKiBIb3N0V2luZG93LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMzQkUxMkIwRTk4MDkyRjAw
ODM1NTg4IC8qIFBvcHVwTWVudVN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzNCRTEyQTBFOTgwOTJGMDA4MzU1ODggLyogUG9wdXBNZW51U3R5
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
QzNCRTk5MzBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDM0JFOTkwMEU5QzFDN0MwMDgz
NTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3BwICovOyB9OwpAQCAtOTEyNyw3ICs5MTI3LDYgQEAK
IAkJNDBFQ0FFN0QxNkI4QjY3MjAwQzM2MTAzIC8qIEpTRE9NRXJyb3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01FcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MEVDQUU4MDE2QjhCNjhBMDBDMzYxMDMgLyogSlNET01FcnJvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUVycm9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwQjdFNzExMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEw
RDMzMjMxQzE5OTg0MTAwRjdGREUyIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMTg5RUY3MUFEODIzMjgw
MEI5MEEwRCAvKiBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGF0ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMjlERjgzMUJCNUI3RjcwMDMyMkExNiAvKiBKU1Jl
YWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MTkxLDkgKzkxOTAsNiBAQAogCQk0MTlC
QzJEQzE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpdGVkTGlua1N0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE5QkMyREQxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRM
aW5rU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTlCRTc1MjFCQzdGM0RCMDBF
MUM4NUIgLyogV2ViQ29yZUJ1aWx0aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDb3JlQnVpbHRpbk5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQxOUJFNzUzMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE5QkU3NTQxQkM3RjNEQjAw
RTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDE5QkU3NTUxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOUJFNzVBMUJDQkQzRUQwMEUxQzg1QiAvKiBO
YXZpZ2F0b3JVc2VyTWVkaWEuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBh
dGggPSBOYXZpZ2F0b3JVc2VyTWVkaWEuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxOUZBRkFEMUFCQUJDRDUwMDVCODI4QiAvKiBSZWFkYWJsZVN0cmVhbVJlYWRlci5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1SZWFkZXIuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUEwMjNFRDFBMzlEQjc5MDBGNzIyQ0YgLyogUmVhZGFibGVT
dHJlYW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNTQ4LDcgKzEzNTQ0LDExIEBACiAJCUJDMzQ4
QkE3MERCN0YxQjgwMDRBQkFCOSAvKiBYTUxIdHRwUmVxdWVzdC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gWE1MSHR0cFJlcXVlc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzM0OEJCRDBEQjdGNTMxMDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0Q3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzNDhCRDEwREI3RjgwNDAw
NEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNYTUxIdHRwUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDMzQ4QkQxMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlSlNCdWlsdGlucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMzQ4QkQxMERCN0Y4MDQwMDRBQkFC
QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzM0OEJEMjBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRw
UmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hNTEh0dHBSZXF1
ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMzQ4QkQyMERCN0Y4MDQwMDRB
QkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlSlNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
QzM0OEJEMjBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDM0JDMjlCMEU5MUFCMEYwMDgzNTU4
OCAvKiBIb3N0V2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhvc3RX
aW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzQkUxMkEwRTk4MDkyRjAw
ODM1NTg4IC8qIFBvcHVwTWVudVN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBvcHVwTWVudVN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDM0JF
OTkwMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU2Nyb2xsYmFyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MTQxLDYgKzE2MTQxLDEwIEBACiAJCTE0REZCMzNGMEE3REY3
NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUJDMzQ4QkQxMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3Jl
SlNCdWlsdGlucy5jcHAgKi8sCisJCQkJQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICovLAorCQkJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFC
QSAvKiBXZWJDb3JlSlNCdWlsdGlucy5oICovLAorCQkJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFC
QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggKi8sCiAJCQkJMTIyMUUwNTgxQzAyQjQw
OTAwNkExQTAwIC8qIEFuaW1hdGlvbiAqLywKIAkJCQkxQUU5NkE3OTFEMUEwQTVDMDBCODY3Njgg
LyogQXBwbGVQYXkgKi8sCiAJCQkJQTgzQjc5MTAwQ0NCMDAxQjAwMEIwODI1IC8qIENvcmUgKi8s
CkBAIC0yMjYwNSwxMCArMjI2MDksNiBAQAogCQkJCUE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5NiAv
KiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICovLAogCQkJCUE3NUU0OTc0MTA3NTJBQ0IwMEM5
Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLywKIAkJCQk0MTlCRTc1MjFCQzdGM0RC
MDBFMUM4NUIgLyogV2ViQ29yZUJ1aWx0aW5OYW1lcy5oICovLAotCQkJCTQxMEQzMzIzMUMxOTk4
NDEwMEY3RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCAqLywKLQkJCQk0MTlC
RTc1MzFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oICovLAot
CQkJCTQxOUJFNzU0MUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgKi8s
Ci0JCQkJNDE5QkU3NTUxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggKi8s
CiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4MTdFIC8qIFdlYkNvcmVKU0NsaWVudERhdGEuaCAq
LywKIAkJCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcCAqLywKIAkJCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCkBAIC0yNzM1Myw2ICsyNzM1Myw4IEBACiAJCQkJN0M0
Qzk2REQxQUQ0NDgzNTAwMzY1QTYwIC8qIEpTV3JpdGFibGVTdHJlYW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTgzNThDQjcwMUM1MzI3NzUwMEUwQzJEOCAvKiBKU1hNTERvY3VtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzNDhCRDQwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNv
cmVKU0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzM0OEJENDBEQjdGODA0MDA0QUJB
QkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNE
MzVBRjIxQzcxOEQ5MDAwRjcwRDVBIC8qIEpTWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjkxNkM0OEUwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RGRDQ5NjBFMzA1OTJG
MDA5RDEwQUQgLyogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
ODgyOSw4ICsyODgzMSw2IEBACiAJCQkJQ0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREM2OURE
NjE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0QxMjdERUUxNEYzMDk4NDAwRTg0Nzc5IC8qIFdlYkNvcmVGdWxsU2Ny
ZWVuV2luZG93LmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTlCRTc1NjFCQzdGNDFCMDBFMUM4NUIg
LyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDE5QkU3
NTgxQkM3RjQyNzAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzUzRDkxMTExNDMxMENDMDAwRDgxN0UgLyogV2ViQ29yZUpTQ2xpZW50RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QkIwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXli
b2FyZFVJTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0MDM3OUIxMjRCRUE3RjAwQUY0MEU0
IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTg1LDYgKzMx
MTg1LDggQEAKIAkJCQk4MzU4Q0I2RjFDNTMyNzcyMDBFMEMyRDggLyogSlNYTUxEb2N1bWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4M0E0QTlGOTFDRTdGRDgxMDA3MDlCMDAgLyogSlNYTUxE
b2N1bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzM0OEJEMzBEQjdGODA0MDA0
QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzM0OEJE
MzBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQkMzNDhCRDMwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzNDhCQkUwREI3RjUzMTAwNEFCQUI5IC8qIEpT
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODNEMzVBRjExQzcx
OEQ5MDAwRjcwRDVBIC8qIEpTWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGOTE2QzQ4RDBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjM1NSw4ICszMjM1Nyw2IEBACiAJ
CQkJQ0RDNjlEREIxNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xk
ZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDNjlERDcxNjMyMDI2QzAwN0MzOERGIC8q
IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDEy
N0RFRDE0RjMwOTdEMDBFODQ3NzkgLyogV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cubW0gaW4gU291
cmNlcyAqLywKLQkJCQk0MTBEMzMyNDFDMTk5ODUwMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0MTlCRTc1NzFCQzdGNDIxMDBFMUM4
NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE0MDM3OUMx
MjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RDOTc5RjQxQzQ5OEMwOTAwREI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RDlCQTUwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVO
U1N0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDhkYTgzMjRlNjZlZmNlZjc3M2Vk
ZThmZTM3N2JhNjZmMGY2ZjcwZWEuLmZiNTY3NDA5ZDYwODNhMjYxZmEzOWRlOGJjM2U4ZmRlM2Q0
Y2VmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9i
YWxzKFZNJiB2bSkKIHsKLSAgICBtX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy5pbml0aWFsaXpl
KCp0aGlzLCB2bSk7CisgICAgbV9idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMuaW5pdGlhbGl6ZSgq
dGhpcyk7CiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAgICAgSlNPYmplY3QqIHByaXZhdGVS
ZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDb25zdHJ1Y3RvciA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFt
Q29udHJvbGxlclByaXZhdGVDb25zdHJ1Y3Rvcih2bSwgKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKaW5kZXggNGRhMGRhOTBlODlmMWQz
MTk2ZWVkOTFiZTQ3MWU3NjNkM2I0N2EzYS4uMjA4NjA0MWI0NDU0YTY4Zjk2ZDI5YTI2YjAxZTcx
OWZiZmIyOGExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5oCkBAIC05Miw3ICs5Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQgYWRkQnVpbHRpbkdsb2JhbHMoSlNDOjpWTSYpOwotICAgICAg
ICBmcmllbmQgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6Vk0mKTsKKyAgICAgICAgZnJpZW5kIHZvaWQgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKIAogICAg
ICAgICBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyBtX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
czsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWRjMzVhN2Q4NzY3MmViMTcxOGE1M2ZmYjMzNDg4OTRjOWI1OWJiMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSwgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0
OgotICogIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FO
T04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiAgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotICogIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqICBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAotICogIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNs
dWRlICJKU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5oIgotI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1KU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdikKLSAgICA6IHZtKHYpCi0jaWYgRU5BQkxFKFdFQl9S
VEMpCi0gICAgLCBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQotI2Vu
ZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICwgbV9yZWFkYWJsZVN0cmVhbUludGVy
bmFsc0Z1bmN0aW9ucyh2bSkKLSAgICAsIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQot
ICAgICwgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucyh2bSkKLSNlbmRpZgotewot
I2lmICFFTkFCTEUoU1RSRUFNU19BUEkpICYmICFFTkFCTEUoV0VCX1JUQykKLSAgICAvLyBGSVhN
RTogV2hlbiBub25lIG9mIHRoZSBmZWF0dXJlcyB0aGF0IHVzZSB0aGlzIGNsYXNzIGFyZSBlbmFi
bGVkLCB3ZQotICAgIC8vIGRvbid0IGV2ZXIgdXNlIHRoZSB2bSBtZW1iZXIuIEhvd2V2ZXIsIHRo
ZSBsb2dpYyBvZiBpbml0aWFsaXppbmcKLSAgICAvLyBpdCB3aGVuIGFueSBvZiB0aGUgZmVhdHVy
ZXMgYXJlIGVuYWJsZWQgZ2V0cyBwcmV0dHkgbWVzc3kuCi0gICAgKHZvaWQpdm07Ci0jZW5kaWYK
LX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBtX3J0Y1BlZXJDb25u
ZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmCi0jaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQotICAgIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMu
dmlzaXQodmlzaXRvcik7Ci0gICAgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlz
aXRvcik7Ci0gICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNp
dG9yKTsKLSNlbmRpZgotI2lmICFFTkFCTEUoU1RSRUFNU19BUEkpICYmICFFTkFCTEUoV0VCX1JU
QykKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBWTSYgdm0pCi17Ci0jaWYgRU5BQkxFKFdFQl9SVEMpCi0gICAgbV9ydGNQZWVyQ29u
bmVjdGlvbkludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0
aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7Ci0gICAgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMu
aW5pdChnbG9iYWxPYmplY3QpOwotICAgIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlv
bnMuaW5pdChnbG9iYWxPYmplY3QpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
IHx8IEVOQUJMRShXRUJfUlRDKQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0KLSAgICBKU0RPTUds
b2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSNpZiBF
TkFCTEUoV0VCX1JUQykKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAotICAg
ICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFwKLSAgICAgICAgICAg
IGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnJ0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxz
QnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBydGNQZWVyQ29ubmVjdGlvbkludGVybmFs
cygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCi0g
ICAgICAgIFdFQkNPUkVfRk9SRUFDSF9SVENQRUVSQ09OTkVDVElPTklOVEVSTkFMU19CVUlMVElO
X0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xP
QkFMX1NUQVRJQwotI2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotI2RlZmluZSBERUNM
QVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCi0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9i
YWxQcm9wZXJ0eUluZm8oXAotICAgICAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25z
KCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCks
IHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1JFQURBQkxFU1RS
RUFNSU5URVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMp
Ci0jdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NU
QVRJQyhuYW1lKVwKLSAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5m
byhcCi0gICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5zdHJlYW1JbnRl
cm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHN0cmVhbUludGVybmFscygpLm1f
IyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAg
IFdFQkNPUkVfRk9SRUFDSF9TVFJFQU1JTlRFUk5BTFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERF
Q0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNkZWZp
bmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAotICAgICAgICBKU0RPTUdsb2JhbE9iamVj
dDo6R2xvYmFsUHJvcGVydHlJbmZvKFwKLSAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1
bmN0aW9ucygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRl
TmFtZSgpLCB3cml0YWJsZVN0cmVhbUludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQo
KSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIFdFQkNPUkVfRk9SRUFDSF9XUklU
QUJMRVNUUkVBTUlOVEVSTkFMU19CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxf
U1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmCi0gICAgfTsKLQot
ICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJB
WV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotI2VuZGlmCi0jaWYgIUVOQUJMRShTVFJFQU1TX0FQ
SSkgJiYgIUVOQUJMRShXRUJfUlRDKQotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwot
ICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzFmZTFlNTE5NDBhMDE0YmExYTcwMjFhMTYwZWQ3M2Q3
Nzc2N2JhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0gKiAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSAqICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgotICogIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViQ29yZUpTQnVpbHRp
bkludGVybmFsc19oCi0jZGVmaW5lIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAotCi0jaW5j
bHVkZSA8cnVudGltZS9WTS5oPgotCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiUlRD
UGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
IgotI2luY2x1ZGUgIlN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiV3JpdGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLS8vIEZJWE1FOiBNYWtlIGJ1aWx0aW4g
Z2VuZXJhdG9yIGdlbmVyYXRlIHRoaXMgY2xhc3MKLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
cyhKU0M6OlZNJik7Ci0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBSVENQZWVyQ29ubmVjdGlv
bkludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMoKSB7
IHJldHVybiBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zOyB9Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGluRnVuY3Rpb25zIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkgeyByZXR1cm4gbV9yZWFkYWJs
ZVN0cmVhbUludGVybmFsc0Z1bmN0aW9uczsgfQotICAgIFN0cmVhbUludGVybmFsc0J1aWx0aW5G
dW5jdGlvbnMgc3RyZWFtSW50ZXJuYWxzKCkgeyByZXR1cm4gbV9zdHJlYW1JbnRlcm5hbHNGdW5j
dGlvbnM7IH0KLSAgICBXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgd3Jp
dGFibGVTdHJlYW1JbnRlcm5hbHMoKSB7IHJldHVybiBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zOyB9Ci0jZW5kaWYKLQotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYp
OwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6Vk0mKTsKLQot
cHJpdmF0ZToKLSAgICBKU0M6OlZNJiB2bTsKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBSVENQ
ZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9ydGNQZWVyQ29ubmVjdGlv
bkludGVybmFsc0Z1bmN0aW9uczsKLSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAg
ICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9yZWFkYWJsZVN0cmVh
bUludGVybmFsc0Z1bmN0aW9uczsKLSAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25z
IG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwotICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbkZ1bmN0aW9ucyBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwotI2Vu
ZGlmCi0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzEyOTAzNjJhYjAzZmUwMzViYmY5ZTljOGJl
YjRmNDAyMThkOGUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0gKiAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSAqICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgotICogIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIkJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucy5jcHAiCi0jaW5jbHVk
ZSAiQ291bnRRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiRmV0Y2hIZWFk
ZXJzQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIkZldGNoUmVzcG9uc2VCdWlsdGlucy5jcHAiCi0j
aW5jbHVkZSAiTWVkaWFEZXZpY2VzQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIk5hdmlnYXRvclVz
ZXJNZWRpYUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5z
LmNwcCIKLSNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCIK
LSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSZWFkYWJs
ZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1SZWFkZXJCdWls
dGlucy5jcHAiCi0jaW5jbHVkZSAiU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwIgotI2luY2x1
ZGUgIldyaXRhYmxlU3RyZWFtQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIldyaXRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0J1aWx0aW5zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMTc2NjQ1
NjdiMDU4YzkwZDE5ODcwY2QyNGJhYzExM2Y1YmZjMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQnVpbHRpbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAoYykgMjAxNSwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
ICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0OgotICogIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqICAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqICBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0gKiAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqICBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAotICogIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFdlYkNvcmVKU0J1aWx0aW5zX2gKLSNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbnNfaAotCi0j
aW5jbHVkZSAiQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAi
Q291bnRRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucy5oIgotI2luY2x1ZGUgIkZldGNoSGVhZGVyc0J1
aWx0aW5zLmgiCi0jaW5jbHVkZSAiRmV0Y2hSZXNwb25zZUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAi
TWVkaWFEZXZpY2VzQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFCdWls
dGlucy5oIgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCIKLSNpbmNsdWRl
ICJSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVhZGFi
bGVTdHJlYW1CdWlsdGlucy5oIgotI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1
aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgot
I2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJTdHJl
YW1JbnRlcm5hbHNCdWlsdGlucy5oIgotI2luY2x1ZGUgIldyaXRhYmxlU3RyZWFtQnVpbHRpbnMu
aCIKLSNpbmNsdWRlICJXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRp
bkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpT
Qzo6Vk0mIHYpCi0gICAgICAgIDogdm0odikKLSNpZiBFTkFCTEUoRkVUQ0hfQVBJKQotICAgICAg
ICAsIG1fZmV0Y2hIZWFkZXJzQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fZmV0Y2hSZXNwb25z
ZUJ1aWx0aW5zKCZ2bSkKLSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAg
LCBtX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9j
b3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX3JlYWRhYmxlU3Ry
ZWFtQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVp
bHRpbnMoJnZtKQotICAgICAgICAsIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygm
dm0pCi0gICAgICAgICwgbV9yZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zKCZ2bSkKLSAgICAg
ICAgLCBtX3N0cmVhbUludGVybmFsc0J1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX3dyaXRhYmxl
U3RyZWFtQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucygmdm0pCi0jZW5kaWYKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICAs
IG1fbWVkaWFEZXZpY2VzQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fbmF2aWdhdG9yVXNlck1l
ZGlhQnVpbHRpbnMoJnZtKQotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0gICAgICAgICwg
bV9ydGNQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX3J0Y1BlZXJDb25u
ZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMoJnZtKQotI2VuZGlmCi0gICAgewotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSAgICAgICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmV4
cG9ydE5hbWVzKCk7Ci0gICAgICAgIG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFt
ZXMoKTsKLSAgICAgICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmV4cG9ydE5h
bWVzKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICAgICAgbV9ydGNQZWVyQ29u
bmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmV4cG9ydE5hbWVzKCk7Ci0jZW5kaWYKLSAgICB9Ci0j
aWYgRU5BQkxFKEZFVENIX0FQSSkKLSAgICBGZXRjaEhlYWRlcnNCdWlsdGluc1dyYXBwZXImIGZl
dGNoSGVhZGVyc0J1aWx0aW5zKCkgeyByZXR1cm4gbV9mZXRjaEhlYWRlcnNCdWlsdGluczsgfQot
ICAgIEZldGNoUmVzcG9uc2VCdWlsdGluc1dyYXBwZXImIGZldGNoUmVzcG9uc2VCdWlsdGlucygp
IHsgcmV0dXJuIG1fZmV0Y2hSZXNwb25zZUJ1aWx0aW5zOyB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCi0gICAgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zV3JhcHBl
ciYgYnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ieXRlTGVu
Z3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnM7IH0KLSAgICBDb3VudFF1ZXVpbmdTdHJhdGVneUJ1
aWx0aW5zV3JhcHBlciYgY291bnRRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucygpIHsgcmV0dXJuIG1f
Y291bnRRdWV1aW5nU3RyYXRlZ3lCdWlsdGluczsgfQotICAgIFJlYWRhYmxlU3RyZWFtQnVpbHRp
bnNXcmFwcGVyJiByZWFkYWJsZVN0cmVhbUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0
cmVhbUJ1aWx0aW5zOyB9Ci0gICAgUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnNXcmFw
cGVyJiByZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGlucygpIHsgcmV0dXJuIG1fcmVhZGFi
bGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnM7IH0KLSAgICBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zV3JhcHBlciYgcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpIHsgcmV0
dXJuIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluczsgfQotICAgIFJlYWRhYmxlU3Ry
ZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVyJiByZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zKCkg
eyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zOyB9Ci0gICAgU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnNXcmFwcGVyJiBzdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpIHsgcmV0dXJu
IG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnM7IH0KLSAgICBXcml0YWJsZVN0cmVhbUJ1aWx0aW5z
V3JhcHBlciYgd3JpdGFibGVTdHJlYW1CdWlsdGlucygpIHsgcmV0dXJuIG1fd3JpdGFibGVTdHJl
YW1CdWlsdGluczsgfQotICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVy
JiB3cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkgeyByZXR1cm4gbV93cml0YWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zO30KLSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgTWVkaWFEZXZpY2VzQnVpbHRpbnNXcmFwcGVyJiBtZWRpYURldmljZXNCdWlsdGlucygp
IHsgcmV0dXJuIG1fbWVkaWFEZXZpY2VzQnVpbHRpbnM7IH0KLSAgICBOYXZpZ2F0b3JVc2VyTWVk
aWFCdWlsdGluc1dyYXBwZXImIG5hdmlnYXRvclVzZXJNZWRpYUJ1aWx0aW5zKCkgeyByZXR1cm4g
bV9uYXZpZ2F0b3JVc2VyTWVkaWFCdWlsdGluczt9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX1JU
QykKLSAgICBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zV3JhcHBlciYgcnRjUGVlckNvbm5lY3Rp
b25CdWlsdGlucygpIHsgcmV0dXJuIG1fcnRjUGVlckNvbm5lY3Rpb25CdWlsdGluczsgfQotICAg
IFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyJiBydGNQZWVyQ29ubmVj
dGlvbkludGVybmFsc0J1aWx0aW5zKCkgeyByZXR1cm4gbV9ydGNQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiB2bTsKLSNp
ZiBFTkFCTEUoRkVUQ0hfQVBJKQotICAgIEZldGNoSGVhZGVyc0J1aWx0aW5zV3JhcHBlciBtX2Zl
dGNoSGVhZGVyc0J1aWx0aW5zOwotICAgIEZldGNoUmVzcG9uc2VCdWlsdGluc1dyYXBwZXIgbV9m
ZXRjaFJlc3BvbnNlQnVpbHRpbnM7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0g
ICAgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zV3JhcHBlciBtX2J5dGVMZW5ndGhR
dWV1aW5nU3RyYXRlZ3lCdWlsdGluczsKLSAgICBDb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5z
V3JhcHBlciBtX2NvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnM7Ci0gICAgUmVhZGFibGVTdHJl
YW1CdWlsdGluc1dyYXBwZXIgbV9yZWFkYWJsZVN0cmVhbUJ1aWx0aW5zOwotICAgIFJlYWRhYmxl
U3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zV3JhcHBlciBtX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxl
ckJ1aWx0aW5zOwotICAgIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyIG1f
cmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluczsKLSAgICBSZWFkYWJsZVN0cmVhbVJlYWRl
ckJ1aWx0aW5zV3JhcHBlciBtX3JlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnM7Ci0gICAgU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyIG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnM7Ci0g
ICAgV3JpdGFibGVTdHJlYW1CdWlsdGluc1dyYXBwZXIgbV93cml0YWJsZVN0cmVhbUJ1aWx0aW5z
OwotICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyIG1fd3JpdGFibGVT
dHJlYW1JbnRlcm5hbHNCdWlsdGluczsKLSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgTWVkaWFEZXZpY2VzQnVpbHRpbnNXcmFwcGVyIG1fbWVkaWFEZXZpY2VzQnVpbHRpbnM7
Ci0gICAgTmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnNXcmFwcGVyIG1fbmF2aWdhdG9yVXNlck1l
ZGlhQnVpbHRpbnM7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBSVENQZWVyQ29u
bmVjdGlvbkJ1aWx0aW5zV3JhcHBlciBtX3J0Y1BlZXJDb25uZWN0aW9uQnVpbHRpbnM7Ci0gICAg
UlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIgbV9ydGNQZWVyQ29ubmVj
dGlvbkludGVybmFsc0J1aWx0aW5zOwotI2VuZGlmCi0KLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjVkZTQyNmE5
NjZjYTU4ZWI4MzI2OWRjNmMxMzk2NDBkNjQ1NDRkNi4uOTQ3N2I0YzhjMDAyYWZiY2FlNzFlN2Y0
NjY5OTQwOGIwNmQ5N2RiZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA3LTA2ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBHZW5lcmF0ZSBXZWJDb3JlIGJ1aWx0aW4gd3Jh
cHBlciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU5NDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weToKKyAgICAgICAgKEJ1aWx0aW5z
R2VuZXJhdG9yVGVzdHMuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyk6IEFkZGluZyBnZW5lcmF0
ZV93cmFwcGVyIG9wdGlvbi4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMucnVuX3Rl
c3RzKTogVXNpbmcgdGhpcyBvcHRpb24gaW4gV2ViQ29yZSB0ZXN0IGNhc2VzLgorCiAyMDE2LTA3
LTA1ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAg
W1NpZXJyYV0gUmViYXNlbGluZSB0ZXN0cyB0byB1c2UgdW4tbW9ja2VkIHN5c3RlbSBmb250IG1l
dHJpY3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKaW5kZXggMDAzOTZkYjlh
MzhiZTBmMDdiZTE4NjNiODhhZWQ0MWVkZjk3ZDk2OS4uMTQzYmYxNmViZjU1YjlmZDExYjYzMjU5
OGEyODMyZTgyZDIwY2ZmMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2Rl
Z2VuL21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkK
QEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0
aWwKLWltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSB3ZWJraXRweS5jb21tb24uY2hl
Y2tvdXQuc2NtLmRldGVjdGlvbiBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0KIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCkBAIC0zOCw3ICsz
Nyw3IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRf
cmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKICAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRp
dmUKIAotICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHNlbGYsIGJ1aWx0aW5zX2Zp
bGUsIG91dHB1dF9kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPSIiLCBjb21iaW5lZF9vdXRwdXRz
PUZhbHNlKToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyhzZWxmLCBidWlsdGlu
c19maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT0iIiwgY29tYmluZWRfb3V0
cHV0cz1GYWxzZSwgZ2VuZXJhdGVfd3JhcHBlcj1GYWxzZSk6CiAgICAgICAgIGNtZCA9IFsncHl0
aG9uJywKICAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5JywKICAgICAgICAgICAgICAgICctLW91dHB1dC1kaXJlY3RvcnknLCBvdXRw
dXRfZGlyZWN0b3J5LApAQCAtNDksNiArNDgsOSBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRl
c3RzOgogICAgICAgICBpZiBjb21iaW5lZF9vdXRwdXRzOgogICAgICAgICAgICAgY21kLmFwcGVu
ZCgnLS1jb21iaW5lZCcpCiAKKyAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcjoKKyAgICAgICAg
ICAgIGNtZC5hcHBlbmQoJy0td2l0aC13cmFwcGVyLWZpbGVzJykKKwogICAgICAgICBjbWQuYXBw
ZW5kKGJ1aWx0aW5zX2ZpbGUpCiAKICAgICAgICAgZXhpdF9jb2RlID0gMApAQCAtMTEwLDcgKzEx
Miw4IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICAgICAgY29u
dGludWUKIAogICAgICAgICAgICAgY29tYmluZWRfb3V0cHV0cyA9IG91dHB1dF9tb2RlID09ICJD
b21iaW5lZCIKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyhv
cy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3Rvcnks
IGZyYW1ld29ya19uYW1lPWZyYW1ld29ya19uYW1lLCBjb21iaW5lZF9vdXRwdXRzPWNvbWJpbmVk
X291dHB1dHMpOgorICAgICAgICAgICAgZ2VuZXJhdGVfd3JhcHBlciA9IGZyYW1ld29ya19uYW1l
ID09ICJXZWJDb3JlIgorICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0
aW5zKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVj
dG9yeSwgZnJhbWV3b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUsIGNvbWJpbmVkX291dHB1dHM9Y29t
YmluZWRfb3V0cHV0cywgZ2VuZXJhdGVfd3JhcHBlcj1nZW5lcmF0ZV93cmFwcGVyKToKICAgICAg
ICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jl
c3VsdHM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282888</attachid>
            <date>2016-07-06 06:58:23 -0700</date>
            <delta_ts>2016-07-07 02:15:40 -0700</delta_ts>
            <desc>Trying to fix win build</desc>
            <filename>bug-159461-20160706155748.patch</filename>
            <type>text/plain</type>
            <size>129390</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MDVkMjY0NmExOTcyZGM2NjkxYzQyN2IyOGI5YWY2ZDI5MjAyOWNiLi40YmJjOWFjZmY0YzYxODY0
ZGQzNWI4YzU1MjU4MTE4M2FhYWM2MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxNi0wNy0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgR2VuZXJhdGluZyBXZWJDb3JlIHdyYXBwZXIgZmlsZXMKKworICAgICAgICBH
ZW5lcmF0ZSBXZWJDb3JlIGJ1aWx0aW4gd3JhcHBlciBmaWxlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NDYxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGlucy5w
eTogQWRkaW5nIG5ldyBnZW5lcmF0b3JzLgorICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OiBBZGRlZCB0byBnZW5l
cmF0ZSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmguCisgICAgICAgICogU2NyaXB0cy9idWls
dGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5w
eTogQWRkZWQgdG8gZ2VuZXJhdGUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAuCisgICAg
ICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5w
eTogQWRkZWQgdG8gZ2VuZXJhdGUgV2ViQ29yZUpTQnVpbHRpbnMuaC4KKyAgICAgICAgKiBTY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHk6
IEFkZGVkICB0byBnZW5lcmF0ZSBXZWJDb3JlSlNCdWlsdGlucy5jcHAuCisgICAgICAgICogU2Ny
aXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weTogQWRkaW5nIG5ldyBvcHRpb24gdG8gYWN0aXZh
dGUgZ2VuZXJhdGlvbiBvZiB0aGUgd3JhcHBlciBmaWxlcy4KKyAgICAgICAgKGdlbmVyYXRlX2Jp
bmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyk6CisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWls
dGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUu
anMtcmVzdWx0OgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2Vi
Q29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6CisgICAgICAgICogU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0OgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdDoKKyAgICAg
ICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVz
dC1TZXBhcmF0ZS5qcy1yZXN1bHQ6CisKIDIwMTYtMDctMDUgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2tWaXNpdG9yOjp1bndpbmRUb01hY2hpbmVDb2Rl
QmxvY2tGcmFtZSgpIG1heSB1bndpbmQgcGFzdCBhIFZNIGVudHJ5IGZyYW1lIHdoZW4gY2F0Y2hp
bmcgYW4gZXhjZXB0aW9uIGFuZCB0aGUgZnJhbWUgaGFzIGlubGluZWQgdGFpbCBjYWxscwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDQ3MTU0OTMzODFiYmNmYzY4MjVhOTI0OTM3OTZjMjQzZGYyYzdmYjUuLjBmOWI5
OGI4ZmE0NDkyZWNhYzRjYzJlNjE4OWZmMGE1MWE1Yzg4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNyBAQAorMjAxNi0wNy0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisK
KyAgICAgICAgR2VuZXJhdGUgV2ViQ29yZSBidWlsdGluIHdyYXBwZXIgZmlsZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTQ2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBiZWhh
dmlvci4KKworICAgICAgICBVcGRhdGluZyBidWlsZCBzeXN0ZW0gdG8gaGFuZGxlIG5ldyBidWls
dC1pbiBnZW5lcmF0b3JzLgorICAgICAgICBUaGUgZ2VuZXJhdG9yIGlzIG5vdyBwYXNzZWQgYWxs
IGJ1aWx0LWlucyBhdCBvbmNlIHNvIHRoYXQgd3JhcHBlciBmaWxlcyBjYW4gYmUgZ2VuZXJhdGVk
LgorICAgICAgICBSZW1vdmluZyBjaGVja2VkLWluIHdyYXBwZXIgZmlsZXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2Jh
bE9iamVjdDo6YWRkQnVpbHRpbkdsb2JhbHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVK
U0J1aWx0aW5zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNC
dWlsdGlucy5oOiBSZW1vdmVkLgorCiAyMDE2LTA3LTA2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBCZXR0ZXIgZ3VhcmQgVGV4dHVyZU1hcHBl
ciBoZWFkZXIgYW5kIENNYWtlIGluY2x1ZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggNzZmNjhiZWYyZjk3NjZlZTNjZmIyNTlmNzJhMmI5N2NmNDJkOTZiYy4uMjY2MmM4
ZDgxNGM1NWE2Yjc2NjU2ZGNlM2JkNjVhNTM1MTc5ZWZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMTIwNiw2ICsxMjA2LDEwIEBAIHNldChCVUlMVElOU19HRU5FUkFU
T1JfU0NSSVBUUwogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dl
bmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5CiAgICAgJHtK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1w
bGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlu
c19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBU
U19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWls
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQogICAgICR7
SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CiAgICAg
JHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vbGF6eXdyaXRlci5weQogKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBlY2RkODdlYmQ0ZTMyNTk0ZDVl
OWM3MzAxNjMwYWE1YTZiMGI3NjU1Li5hNWYwMmIwYWViMTg1ZTk0M2FjYzZkMjZmMWYzNTNlMjgx
Njk1MTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
NzYsNiArNzYsMTAgQEAgQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMgPSBcCiAgICAgJChKYXZh
U2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmlu
ZWRfaW1wbGVtZW50YXRpb24ucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIp
L2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSBcCiAgICAgJChK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2Vw
YXJhdGVfaW1wbGVtZW50YXRpb24ucHkgXAorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5IFwKKyAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNf
RElSfS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkgXAorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKICAgICAkKEph
dmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSBcCiAgICAg
JChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvbGF6eXdyaXRlci5weSBcCiAjCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJkMmJjMzQwOTMyZDE4YjZhNmQ2NzFjMDU1ZGE2OTdm
ZGE1Y2E0ZTQuLjQ5MzhmNzQxZGM3MWI2ZTJjMzNhODc3YjkwMGMzMWQ5M2ZiODQ3NDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDc0LDYgKzE0NzQsMTAgQEAKIAkJOTlEQTAw
QTgxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTlEQTAwOUYxQkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2lt
cGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5REEwMEE5MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9z
ZXBhcmF0ZV9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OURBMDBBMDFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2Vw
YXJhdGVfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5REEwMEFBMUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9z
ZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk5REEwMEExMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19nZW5l
cmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTI5NTI3NzFEMkNGNkJDMDBFNzhCODkgLyogYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI5NTI3MzFEMkNGNkFDMDBFNzhC
ODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxMjk1Mjc4MUQy
Q0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyOTUyNzQxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxMjk1Mjc5MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyOTUyNzUxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0
aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxMjk1MjdBMUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI5NTI3NjFEMkNGNkFDMDBFNzhCODkg
LyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBBRjFCRDU5OTRF
MDBGNDU3NUMgLyogZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OURBMDBBQzFCRDU5OTNFMDBGNDU3NUMgLyogZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTlEQTAwQjAxQkQ1OTk0RTAwRjQ1NzVDIC8qIGxhenl3cml0ZXIucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OURBMDBBRDFC
RDU5OTNFMDBGNDU3NUMgLyogbGF6eXdyaXRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBk
YXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5OURBMDBBRTFCRDU5OTNFMDBGNDU3NUMgLyogVXBkYXRlQ29udGVudHMucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMyODcsNiArMzI5
MSwxMCBAQAogCQkyQUY3MzgyQTE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVJRFRhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFGNzM4MkIxOEJCQkY5MjAwOEE1
QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RydWN0dXJlSURUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFE
ODQyQzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1l
ID0gbGliei5keWxpYjsgcGF0aCA9IHVzci9saWIvbGliei5keWxpYjsgc291cmNlVHJlZSA9IFNE
S1JPT1Q7IH07CisJCTQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0
ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMjk1Mjc0MUQyQ0Y2QUMwMEU3OEI4OSAv
KiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGJ1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MTI5NTI3NTFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3Jh
cHBlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBidWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDEyOTUyNzYxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGgg
PSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MURFQTEzMTFCOUYzMTU0MDA2RDY1REQgLyogQnVpbHRpblV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0aW5VdGlscy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzE5REEwMTFDMUJFM0MxMDAxRDI2MEIgLyog
QjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcDsgcGF0
aCA9IGIzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MzE5REEwMjFDMUJFM0MxMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jv
c0FmdGVyT3B0aW1pemF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzEw
LDYgKzY3MTgsMTAgQEAKIAkJCQk5OURBMDA5RjFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNf
Z2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50YXRpb24ucHkgKi8sCiAJCQkJOTlEQTAwQTAxQkQ1
OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSAqLywK
IAkJCQk5OURBMDBBMTFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJh
dGVfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJNDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8q
IGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSAqLywKKwkJCQk0
MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJNDEyOTUyNzUxRDJDRjZBQzAwRTc4Qjg5
IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5ICovLAorCQkJCTQxMjk1Mjc2
MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0
aW9uLnB5ICovLAogCQkJCTk5REEwMDlBMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19nZW5l
cmF0b3IucHkgKi8sCiAJCQkJOTlEQTAwOUIxQkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21v
ZGVsLnB5ICovLAogCQkJCTk5REEwMDlDMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc190ZW1w
bGF0ZXMucHkgKi8sCkBAIC03MTI0LDYgKzcxMzYsMTAgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFE
MDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEw
MEFBMUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1l
bnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEEzMUJENTk5MzEwMEY0NTc1QyAv
KiBidWlsdGluc19nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKKwkJCQk0MTI5NTI3ODFEMkNG
NkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQk0MTI5NTI3OTFEMkNGNkJDMDBFNzhCODkg
LyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQk0MTI5NTI3QTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCTQxMjk1Mjc3MUQyQ0Y2QkMwMEU3
OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgaW4g
SGVhZGVycyAqLywKIAkJCQlGRTNBMDZBNjFDMTBCNzJEMDAzOTBGREQgLyogSklUQml0T3JHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBi
dWlsdGluc19tb2RlbC5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0
NTc1QyAvKiBidWlsdGluc190ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKaW5kZXggOTM0
OWVlZWY2NTM0MGEyMmFkZDBhYzIyNjBmNmNmNjBiMzIyMDY3ZC4uYTlhZmYyYjFjZmY0ZjI1MzUw
Yjc2NThkZGE0OWMwYTUxMjNlOWMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKQEAgLTksMyArOSw3IEBAIGZyb20gYnVpbHRp
bnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyIGltcG9ydCAqCiBmcm9tIGJ1aWx0aW5zX2dlbmVy
YXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCiBmcm9tIGJ1aWx0aW5zX2dlbmVy
YXRlX3NlcGFyYXRlX2hlYWRlciBpbXBvcnQgKgogZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBh
cmF0ZV9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFw
cGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJj
MDgzYTBlNDA2NTU2M2FiMDNjMGY4MmJjYzQ3MGJiMTk0NTQ5OGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0
ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CitpbXBvcnQgbG9nZ2luZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVp
bHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tf
dWNmaXJzdAorZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKKworCitjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IoQnVp
bHRpbnNHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAg
IEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQorICAgICAgICBzZWxmLmlu
dGVybmFscyA9IFtvYmplY3QgZm9yIG9iamVjdCBpbiBtb2RlbC5vYmplY3RzIGlmICdpbnRlcm5h
bCcgaW4gb2JqZWN0LmFubm90YXRpb25zXQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNw
YWNlJykgKyAiSlNCdWlsdGluSW50ZXJuYWxzLmgiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVh
ZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAg
ICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmRUb3Ap
LnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0aXR1dGUoYXJncykpCisKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KCkpCisK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0
b20pLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisg
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9z
ZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMg
PSBbCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2Ny
aXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSwKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAg
ICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGhlYWRlcl9p
bmNsdWRlcy5hcHBlbmQoKFsiV2ViQ29yZSJdLCAoIldlYkNvcmUiLCBvYmplY3Qub2JqZWN0X25h
bWUgKyAiQnVpbHRpbnMuaCIpKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2Vu
ZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCisKKyAgICBkZWYg
Z2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsiY2xh
c3MgSlNET01HbG9iYWxPYmplY3Q7IiwgIiIsICJjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9ucyB7IiwgInB1YmxpYzoiXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIGV4cGxpY2l0
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsiKQorICAgICAgICBsaW5lcy5h
cHBlbmQoIiIpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygp
KQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZXRob2RzKCkpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgiIikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJwcml2YXRlOiIpCisgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX21lbWJlcnMoKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCJ9OyIpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
YWNjZXNzb3JfbmFtZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChv
YmplY3Qub2JqZWN0X25hbWUpCisKKyAgICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToK
KyAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQorCisgICAg
ZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBXS191Y2ZpcnN0
KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbkZ1bmN0aW9ucyIKKworICAgIGRlZiBnZW5l
cmF0ZV9tZXRob2RzKHNlbGYpOgorICAgICAgICByZXR1cm4gIiAgICB2b2lkIHZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImKTtcbiAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsi
CisKKyAgICBkZWYgZ2VuZXJhdGVfYWNjZXNzb3JzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtd
CisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBjb25k
aXRpb25hbF9ndWFyZCA9IG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAg
ICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCIgICAgIiArIHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSArICImICIg
KyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KSArICIoKSB7IHJldHVybiAiICsgc2VsZi5tZW1i
ZXJfbmFtZShvYmplY3QpICsgIjsgfSIpCisgICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFy
ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNlbmRpZiAvLyAl
cyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVyYXRlX21lbWJlcnMoc2Vs
Zik6CisgICAgICAgIGxpbmVzID0gWyIgICAgSlNDOjpWTSYgdm07Il0KKyAgICAgICAgZm9yIG9i
amVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGNvbmRpdGlvbmFsX2d1YXJkID0g
b2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQorICAgICAgICAgICAgaWYgY29u
ZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
IiAgICAiICsgc2VsZi5tZW1iZXJfdHlwZShvYmplY3QpICsgIiAiICsgc2VsZi5tZW1iZXJfbmFt
ZShvYmplY3QpICsgIjsiKQorICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29u
ZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMzE0ZDc3Y2UzNjlkMDExN2I4YmNh
OGQ2ZjVmYTk2ODFjNTA3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDE2NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dn
aW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBidWlsdGluc19nZW5lcmF0
b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yLCBXS19sY2ZpcnN0LCBXS191Y2ZpcnN0Citmcm9t
IGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
VGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNz
IEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5z
R2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBCdWls
dGluc0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKKyAgICAgICAgc2VsZi5pbnRlcm5h
bHMgPSBbb2JqZWN0IGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0cyBpZiAnaW50ZXJuYWwnIGlu
IG9iamVjdC5hbm5vdGF0aW9uc10KKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScp
ICsgIkpTQnVpbHRpbkludGVybmFscy5jcHAiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNl
bGYpOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVhZGVy
R3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAgICAg
ICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfcHJpbWFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNs
dWRlcygpKQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFt
ZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VCb3R0b20pLnN1YnN0aXR1dGUoYXJncykpCisK
KyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CisgICAgICAgIGhlYWRlcl9pbmNsdWRl
cyA9IFsKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIldlYkNv
cmUiLCAiSlNET01HbG9iYWxPYmplY3QuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAg
IChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIldlYkNvcmUiLCAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIiksCisgICAgICAgICAgICApLAorICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAor
ICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAiaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAg
ICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMu
aCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAg
ICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIiks
CisgICAgICAgICAgICApLAorICAgICAgICBdCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2Vs
Zi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKKworICAg
IGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qoc2VsZik6CisgICAgICAgIGxpbmVzID0g
W10KKworICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9jb25zdHJ1Y3RvcigpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZXRob2RzKCkpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgYWNjZXNzb3JfbmFtZShzZWxmLCBvYmpl
Y3QpOgorICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpCisKKyAg
ICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuICJtXyIgKyBz
ZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQorCisgICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9i
amVjdCk6CisgICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAi
QnVpbHRpbkZ1bmN0aW9ucyIKKworICAgIGRlZiBnZW5lcmF0ZV9jb25zdHJ1Y3RvcihzZWxmKToK
KyAgICAgICAgbGluZXMgPSBbIkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KSIsICIgICAgOiB2bSh2KSJdCisgICAgICAgIGZv
ciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBjb25kaXRpb25hbF9ndWFy
ZCA9IG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAgICAgICAgICAgIGlm
IGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgLCAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsgIih2bSkiKQorICAgICAg
ICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgie1xuICAgIFVOVVNFRF9QQVJBTSh2bSk7XG59IikKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCIiKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVm
IGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyJ2b2lkIEpTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSIsICJ7
Il0KKyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGNv
bmRpdGlvbmFsX2d1YXJkID0gb2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQor
ICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsgIi52
aXNpdCh2aXNpdG9yKTsiKQorICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgY29u
ZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTtcbn0iKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgidm9pZCBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KVxueyIpCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAg
ICBjb25kaXRpb25hbF9ndWFyZCA9IG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFs
JykKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSAr
ICIuaW5pdChnbG9iYWxPYmplY3QpOyIpCisgICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFy
ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNlbmRpZiAvLyAl
cyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKworICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBKU1ZN
Q2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOyIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geyIpCisgICAgICAgIGZv
ciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBjb25kaXRpb25hbF9ndWFy
ZCA9IG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJykKKyAgICAgICAgICAgIGlm
IGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgiI2lmICVzIiAlIGNvbmRpdGlvbmFsX2d1YXJkKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCIjZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVxcIikKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgiICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8o
XFwiKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgIGNsaWVudERhdGEuYnVpbHRp
bkZ1bmN0aW9ucygpLiIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KSArICJCdWlsdGlucygp
Lm5hbWUjI1ByaXZhdGVOYW1lKCksICIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KSArICIo
KS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRP
bmx5KSwiKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgV0VCQ09SRV9GT1JFQUNIXyIg
KyBvYmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSArICJfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERF
Q0xBUkVfR0xPQkFMX1NUQVRJQykiKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDIikKKworICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3Vh
cmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8g
JXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgfTsi
KQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBpZiAoc2l6ZW9mKHN0YXRpY0dsb2JhbHMpKSIp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNH
bG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOyIp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsiKQor
CisgICAgICAgIGxpbmVzLmFwcGVuZCgifSIpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgY29u
ZGl0aW9uYWxfZ3VhcmQgPSBvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCisg
ICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoIiNpZiAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAiICsgc2VsZi5tZW1iZXJfdHlwZShvYmplY3QpICsg
IiAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsgIjsiKQorICAgICAgICAgICAgaWYgY29u
ZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCIjZW5kaWYgLy8gJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgiIikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBw
ZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQzZDM1OTVlNTQ0
OWIwOTIxZjgxN2FhZDYwNjQ2MDU2ZTIzYWJmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJf
aGVhZGVyLnB5CkBAIC0wLDAgKzEsMTM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMg
Q29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBv
cnQgQnVpbHRpbnNHZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKK2Zyb20gYnVpbHRp
bnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0
ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQnVpbHRp
bnNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpICsgIkpTQnVp
bHRpbnMuaCIKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGFyZ3Mg
PSB7CisgICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCduYW1lc3BhY2UnKSwKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZCc6IHNlbGYub3V0cHV0
X2ZpbGVuYW1lKCkucmVwbGFjZSgnLicsICdfJyksCisgICAgICAgIH0KKworICAgICAgICBzZWN0
aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5Eb05vdEVkaXRX
YXJuaW5nKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLkhlYWRlckluY2x1ZGVHdWFyZFRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNs
dWRlcygpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVz
cGFjZVRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKKworICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNsdWRl
R3VhcmRCb3R0b20pLnN1YnN0aXR1dGUoYXJncykpCisKKyAgICAgICAgcmV0dXJuICJcblxuIi5q
b2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVk
ZXMoc2VsZik6CisgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKKyAgICAgICAgICAgIChbIldl
YkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1bnRpbWUvVk0u
aCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNl
bGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAgaGVhZGVyX2luY2x1ZGVzLmFwcGVuZCgo
WyJXZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5vYmplY3RfbmFtZSArICJCdWlsdGlucy5o
IikpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19m
cm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9u
X2Zvcl9vYmplY3Qoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyJjbGFzcyBKU0J1aWx0aW5GdW5j
dGlvbnMgeyIsICJwdWJsaWM6Il0KKworICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0
ZV9jb25zdHJ1Y3RvcigpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9hY2Nl
c3NvcnMoKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCJwcml2YXRlOiIpCisgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLmdlbmVyYXRlX21lbWJlcnMoKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ9
OyIpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgYWNjZXNzb3Jf
bmFtZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gV0tfbGNmaXJzdChvYmplY3Qub2Jq
ZWN0X25hbWUpICsgIkJ1aWx0aW5zIgorCisgICAgZGVmIG1lbWJlcl9uYW1lKHNlbGYsIG9iamVj
dCk6CisgICAgICAgIHJldHVybiAibV8iICsgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkKKwor
ICAgIGRlZiBtZW1iZXJfdHlwZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gV0tfdWNm
aXJzdChvYmplY3Qub2JqZWN0X25hbWUpICsgIkJ1aWx0aW5zV3JhcHBlciIKKworICAgIGRlZiBn
ZW5lcmF0ZV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIiAgICBleHBsaWNp
dCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdikiLCAiICAgICAgICA6IHZtKHYpIl0KKyAg
ICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKKyAgICAgICAgICAgIGNv
bmRpdGlvbmFsX2d1YXJkID0gb2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQor
ICAgICAgICAgICAgaWYgY29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoIiAgICAgICAgLCAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3Qp
ICsgIigmdm0pIikKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlv
bmFsX2d1YXJkKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB7IikKKyAgICAgICAgZm9yIG9i
amVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKKyAgICAgICAgICAgIGlmIG5vdCAnaW50ZXJu
YWwnIGluIG9iamVjdC5hbm5vdGF0aW9uczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgY29uZGl0aW9uYWxfZ3VhcmQgPSBvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25k
aXRpb25hbCcpCisgICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNpZiAlcyIgJSBjb25kaXRpb25hbF9ndWFy
ZCkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAiICsgc2VsZi5tZW1iZXJfbmFt
ZShvYmplY3QpICsgIi5leHBvcnROYW1lcygpOyIpCisgICAgICAgICAgICBpZiBjb25kaXRpb25h
bF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNlbmRp
ZiAvLyAlcyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAg
fVxuIikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0
ZV9hY2Nlc3NvcnMoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIG9iamVj
dCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKKyAgICAgICAgICAgIGNvbmRpdGlvbmFsX2d1YXJk
ID0gb2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwnKQorICAgICAgICAgICAgaWYg
Y29uZGl0aW9uYWxfZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCIjaWYgJXMiICUgY29uZGl0aW9uYWxfZ3VhcmQpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiAgICAiICsgc2VsZi5tZW1iZXJfdHlwZShvYmplY3QpICsgIiYgIiArIHNlbGYuYWNjZXNz
b3JfbmFtZShvYmplY3QpICsgIigpIHsgcmV0dXJuICIgKyBzZWxmLm1lbWJlcl9uYW1lKG9iamVj
dCkgKyAiOyB9IikKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbmFsX2d1YXJkIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGNvbmRpdGlv
bmFsX2d1YXJkKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCisgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAg
bGluZXMgPSBbIiAgICBKU0M6OlZNJiB2bTsiXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYu
bW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAgY29uZGl0aW9uYWxfZ3VhcmQgPSBvYmplY3Qu
YW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpCisgICAgICAgICAgICBpZiBjb25kaXRpb25h
bF9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNpZiAl
cyIgJSBjb25kaXRpb25hbF9ndWFyZCkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICIg
KyBzZWxmLm1lbWJlcl90eXBlKG9iamVjdCkgKyAiICIgKyBzZWxmLm1lbWJlcl9uYW1lKG9iamVj
dCkgKyAiOyIpCisgICAgICAgICAgICBpZiBjb25kaXRpb25hbF9ndWFyZCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNlbmRpZiAvLyAlcyIgJSBjb25kaXRpb25h
bF9ndWFyZCkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9i
dWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUzNzRiNmQ0MzdlOWI2OTIzYTkyOTcxZThhMmE4Nzk3Zjg0MWI2ZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsNjIgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zy
b20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvcgorZnJvbSBidWls
dGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBs
YXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCdWls
dGluc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3Iu
X19pbml0X18oc2VsZiwgbW9kZWwpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2Un
KSArICJKU0J1aWx0aW5zLmNwcCIKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Cisg
ICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKSwKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZCc6
IHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkucmVwbGFjZSgnLicsICdfJyksCisgICAgICAgIH0KKwor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRl
cy5Eb05vdEVkaXRXYXJuaW5nKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQorCisgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zv
cl9vYmplY3Qoc2VsZik6CisgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFtdCisgICAgICAgIGZv
ciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CisgICAgICAgICAgICBoZWFkZXJfaW5j
bHVkZXMuYXBwZW5kKChbIldlYkNvcmUiXSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1l
ICsgIkJ1aWx0aW5zLmNwcCIpKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2Vu
ZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Cmlu
ZGV4IDU1NGE3MmNjYzA1MjMyY2EzNjdlMzg5NDVhYjYyMDFmNDUyM2UwNGEuLjZmZjUyY2RjNTE2
ZjU2Y2Y2OTI5ODQ1MDVhNGU3MzI4ODc3MDc3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CkBAIC00NSw2ICs0NSw3
IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmls
ZXM9W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9w
YXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNh
dGVuYXRlX291dHB1dD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tYmluZWRfb3V0cHV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0ZV93cmFwcGVyX2ZpbGVzPUZhbHNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtfbmFtZT0iIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfb3V0cHV0PUZhbHNlKToKIApA
QCAtNzQsNiArNzUsMTMgQEAgZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxl
cyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0
aW5zU2VwYXJhdGVIZWFkZXJHZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCiAgICAgICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
bW9kZWwsIG9iamVjdCkpCiAKKyAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcl9maWxlczoKKyAg
ICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVyYXRv
cihtb2RlbCkpCisgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1dyYXBwZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCisKKyAgICAgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVyYXRvcihtb2RlbCkpCisg
ICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCisKICAgICBsb2cuZGVidWcoIiIpCiAgICAgbG9n
LmRlYnVnKCJHZW5lcmF0aW5nIGJpbmRpbmdzIGZvciBidWlsdGlucy4iKQogCkBAIC0xMTQsNiAr
MTIyLDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBjbGlfcGFyc2VyLmFkZF9v
cHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0iY2hvaWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1l
d29ya19uYW1lcywgaGVscD0iRGVzdGluYXRpb24gZnJhbWV3b3JrIGZvciBnZW5lcmF0ZWQgZmls
ZXMuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9yY2UiLCBhY3Rpb249InN0b3Jl
X3RydWUiLCBoZWxwPSJGb3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVkIHNjcmlwdHMsIGV2ZW4gaWYg
bm90aGluZyBjaGFuZ2VkLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWNvbWJpbmVk
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iUHJvZHVjZSBvbmUgLmgvLmNwcCBmaWxlIGlu
c3RlYWQgb2YgcHJvZHVjaW5nIG9uZSBwZXIgYnVpbHRpbiBvYmplY3QuIikKKyAgICBjbGlfcGFy
c2VyLmFkZF9vcHRpb24oIi0td2l0aC13cmFwcGVyLWZpbGVzIiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwgaGVscD0iUHJvZHVjZSAuaC8uY3BwIHdyYXBwZXIgZmlsZXMgdG8gZWFzZSBpbnRlZ3JhdGlv
biBvZiB0aGUgYnVpbHRpbnMuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0t
ZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJMb2cgZXh0cmEgb3V0cHV0IGZvciBk
ZWJ1Z2dpbmcgdGhlIGdlbmVyYXRvciBpdHNlbGYuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRp
b24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0
IG1vZGUuIikKIApAQCAtMTM4LDYgKzE0Nyw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CiAgICAgICAgICdvdXRwdXRfcGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dF9kaXJlY3RvcnksCiAg
ICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywKICAgICAgICAg
J2NvbWJpbmVkX291dHB1dCc6IGFyZ19vcHRpb25zLmNvbWJpbmVkLAorICAgICAgICAnZ2VuZXJh
dGVfd3JhcHBlcl9maWxlcyc6IGFyZ19vcHRpb25zLndpdGhfd3JhcHBlcl9maWxlcywKICAgICAg
ICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlLAogICAgICAgICAnY29uY2F0ZW5h
dGVfb3V0cHV0JzogYXJnX29wdGlvbnMudGVzdCwKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFy
Yml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCA0ZTI1NTE1MGJlMzZi
ZDMyYzRlNDA2Y2M1ZDVjZWRjY2NhZGZlMzQ5Li43YTc5ZWE3YzdjYjJiMmJmMjQwNGQ2MmUxYmEy
MTI0MTlhZTY2NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90
ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQt
U2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1T
ZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE5NywzICsxOTcsMjIyIEBAIFdFQkNPUkVfRk9SRUFDSF9B
UkJJVFJBUllDT05ESVRJT05BTEdVQVJEX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5F
UkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCiAKICMjIyBF
bmQgRmlsZTogQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2
YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYgV2Vi
Q29yZUpTQnVpbHRpbnNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluc19oCisKKyNpbmNsdWRl
ICJBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDxydW50aW1l
L1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25z
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdikK
KyAgICAgICAgOiB2bSh2KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorICAg
ICAgICAsIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCZ2bSkKKyNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICB7CisgICAgfQorCisjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisgICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFy
ZEJ1aWx0aW5zV3JhcHBlciYgYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCkgeyBy
ZXR1cm4gbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2
bTsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICBBcmJpdHJhcnlDb25k
aXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1
aWx0aW5zOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRpbnNfaAor
CisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJBcmJpdHJhcnlD
b25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3BwIgorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWls
dGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5z
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCisjZGVm
aW5lIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorCisjaW5jbHVkZSA8cnVudGltZS9WTS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitj
bGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisKKyAgICB2b2lkIHZpc2l0
KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmpl
Y3QmKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2bTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorCisjIyMg
RW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVnaW4gRmlsZTog
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg
Q2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEph
dmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgorCisjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlv
bnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgOiB2bSh2KQor
eworICAgIFVOVVNFRF9QQVJBTSh2bSk7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5j
dGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOworfQordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlh
bGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTVk1DbGllbnRE
YXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNH
bG9iYWxzW10gPSB7CisgICAgfTsKKyAgICBpZiAoc2l6ZW9mKHN0YXRpY0dsb2JhbHMpKQorICAg
ICAgICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9B
UlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRh
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBh
cmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWls
dGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApp
bmRleCA4M2RlYzU3ODg3OTVmMzBlNzk3OTllZDI5YWQ0NTNhOTJlZWU0Mzg2Li5mNTE2MGUzMTdm
YWJjNmUzZGIyNjJmYjZiNWY2OGU5NzYwZGUwNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRC
dWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFy
YXRlLmpzLXJlc3VsdApAQCAtMTk3LDMgKzE5NywyMjIgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJE
RURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRCdWlsdGluQnVp
bHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKKworI2lmbmRlZiBXZWJDb3JlSlNCdWlsdGluc19oCisjZGVmaW5lIFdlYkNvcmVKU0J1
aWx0aW5zX2gKKworI2luY2x1ZGUgIkd1YXJkZWRCdWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRl
IDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNCdWlsdGlu
RnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlND
OjpWTSYgdikKKyAgICAgICAgOiB2bSh2KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAg
ICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnMoJnZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICB7CisgICAgfQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1
YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyBy
ZXR1cm4gbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKQorCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIHZtOworI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX2d1YXJkZWRCdWlsdGlu
QnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRpbnNfaAorCisjIyMgRW5k
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5zLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IK
Ky8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0
aW5zLmNwcCIKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaWZu
ZGVmIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzX2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xhc3MgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zKEpTQzo6Vk0mKTsKKworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK3ByaXZhdGU6Cisg
ICAgSlNDOjpWTSYgdm07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKKworIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgor
Ly8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQorICAgIDogdm0odikKK3sKKyAgICBVTlVTRURfUEFSQU0o
dm0pOworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKK30KK3Zv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIEpTRE9NR2xv
YmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geworICAgIH07
CisgICAgaWYgKHNpemVvZihzdGF0aWNHbG9iYWxzKSkKKyAgICAgICAgICBnbG9iYWxPYmplY3Qu
YWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0ds
b2JhbHMpKTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5z
L2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4
IDFjNjFhYWIwZjJhZGJiZDVhNjFmMTY0ZTM1ZmYxNThmYWNjYzMzY2UuLjczOTBlZTNmNDBmMDhl
NjgzYzcxOWFmZWZhMTQ2OWE5M2VmNWQzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVy
bmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxC
dWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMjI5LDMgKzIyOSwyNDggQEAgV0VCQ09SRV9G
T1JFQUNIX0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElO
X0dFTkVSQVRPUikKICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICMjIyBFbmQgRmls
ZTogR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
V2ViQ29yZUpTQnVpbHRpbnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYgV2ViQ29yZUpTQnVp
bHRpbnNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluc19oCisKKyNpbmNsdWRlICJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdikKKyAgICAgICAgOiB2
bSh2KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAgLCBtX2d1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGlucygmdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAg
IHsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgIG1fZ3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zLmV4cG9ydE5hbWVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQorICAgIH0KKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkSW50ZXJuYWxC
dWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKSB7
IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsgfQorI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2bTsKKyNpZiBFTkFC
TEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBl
ciBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNU19BUEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJD
b3JlSlNCdWlsdGluc19oCisKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorCisj
IyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisvKgorICogQ29weXJpZ2h0IChj
KSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lu
Y2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZv
cgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lmbmRlZiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzX2gKKyNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCisKKyNpbmNsdWRl
ICJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDxydW50aW1lL1ZN
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CisK
K2NsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7CisKKyNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47
IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisKKyAgICB2b2lkIHZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsK
KworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2bTsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMgbV9ndWFyZGVkSW50ZXJu
YWxCdWlsdGluOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAor
CisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVnaW4g
RmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgor
CisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgOiB2
bSh2KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAsIG1fZ3VhcmRlZEludGVybmFsQnVp
bHRpbih2bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit7CisgICAgVU5VU0VEX1BB
UkFNKHZtKTsKK30KKwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAg
bV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLnZpc2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cit9Cit2b2lkIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZEludGVy
bmFsQnVpbHRpbi5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2Jh
bFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCisgICAgSlNET01HbG9iYWxP
YmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhcCisgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1
bmN0aW9ucygpLmd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygpLm5hbWUjI1ByaXZhdGVO
YW1lKCksIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkg
LCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAgICBXRUJDT1JFX0ZPUkVBQ0hf
R1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9C
QUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICB9OworICAgIGlmIChzaXplb2Yoc3RhdGljR2xvYmFscykpCisg
ICAgICAgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RG
X0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaWVudERh
dGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMv
YnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJl
c3VsdAppbmRleCBjZWRmOGZiNGJlYWFhMzNjZmZjMzFhOWFiNTM3MDc3NzI1NTAzYjMxLi5kMGU4
ZjQ5MDkwNzc5MTZiMzI1YTI0YWRmMmQ1MDI3ODBkM2M5MGM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVu
Z3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFyZGVkQnVp
bHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE4OCwzICsxODgsMjE2IEBAIFdFQkNPUkVfRk9S
RUFDSF9VTkdVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFU
T1IpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICMjIyBFbmQgRmlsZTogVW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5z
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYgV2ViQ29yZUpTQnVpbHRpbnNfaAorI2RlZmluZSBXZWJD
b3JlSlNCdWlsdGluc19oCisKKyNpbmNsdWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuaCIK
KyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SlNCdWlsdGluRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5j
dGlvbnMoSlNDOjpWTSYgdikKKyAgICAgICAgOiB2bSh2KQorICAgICAgICAsIG1fdW5ndWFyZGVk
QnVpbHRpbkJ1aWx0aW5zKCZ2bSkKKyAgICB7CisgICAgfQorCisgICAgVW5ndWFyZGVkQnVpbHRp
bkJ1aWx0aW5zV3JhcHBlciYgdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV91
bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2bTsK
KyAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyIG1fdW5ndWFyZGVkQnVpbHRpbkJ1
aWx0aW5zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29y
ZUpTQnVpbHRpbnNfaAorCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNs
dWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgorIyMjIEVuZCBGaWxlOiBXZWJDb3Jl
SlNCdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1
aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpZm5kZWYgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19o
CisjZGVmaW5lIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAorCisjaW5jbHVkZSA8cnVudGlt
ZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0
OworCitjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisKKyAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9i
YWxPYmplY3QmKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiB2bTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAor
CisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVnaW4g
RmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgor
CisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgOiB2
bSh2KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOworfQordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTVk1D
bGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBz
dGF0aWNHbG9iYWxzW10gPSB7CisgICAgfTsKKyAgICBpZiAoc2l6ZW9mKHN0YXRpY0dsb2JhbHMp
KQorICAgICAgICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMs
IFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGll
bnREYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0
LVNlcGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1
bHQKaW5kZXggMTU0NGRmYjQ1MDI0YzhiYTFmYjMzMGIxYTU3NjI1ZmFhMzUwN2RjMy4uMGI0M2Q3
NzFjMGE2MWNlMWIwOTgzYjU3YjZjZTY4YTFlNGZhYWY2MyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxD
YXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2Vw
YXJhdGUuanMtcmVzdWx0CkBAIC0yODAsMyArMjgwLDI0OCBAQCBXRUJDT1JFX0ZPUkVBQ0hfWE1M
Q0FTSU5HVEVTVF9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiB4bWxDYXNpbmdUZXN0QnVp
bHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKKworI2lmbmRlZiBXZWJDb3JlSlNCdWlsdGluc19oCisjZGVmaW5lIFdlYkNvcmVKU0J1
aWx0aW5zX2gKKworI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0aW5G
dW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6
OlZNJiB2KQorICAgICAgICA6IHZtKHYpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAg
ICAsIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCZ2bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgeworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAgbV94bWxDYXNp
bmdUZXN0QnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgfQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIFhNTENhc2luZ1Rlc3RC
dWlsdGluc1dyYXBwZXImIHhtbENhc2luZ1Rlc3RCdWlsdGlucygpIHsgcmV0dXJuIG1feG1sQ2Fz
aW5nVGVzdEJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorCitwcml2
YXRlOgorICAgIEpTQzo6Vk0mIHZtOworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxD
YXNpbmdUZXN0QnVpbHRpbnNXcmFwcGVyIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zOworI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFdlYkNvcmVKU0J1aWx0aW5zX2gKKworIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWls
dGlucy5weQorCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmNwcCIKKyMjIyBFbmQg
RmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmgKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaWZuZGVmIFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHNfaAorI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKKworI2lu
Y2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xh
c3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgp
IHsgcmV0dXJuIG1feG1sQ2FzaW5nVGVzdDsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkKKworICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlh
bGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIHZtOwor
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9u
cyBtX3htbENhc2luZ1Rlc3Q7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFsc19oCisKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAK
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmgiCisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdikK
KyAgICA6IHZtKHYpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICwgbV94bWxDYXNpbmdU
ZXN0KHZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK3sKKyAgICBVTlVTRURfUEFS
QU0odm0pOworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBt
X3htbENhc2luZ1Rlc3QudmlzaXQodmlzaXRvcik7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKK30KK3ZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV94bWxDYXNpbmdUZXN0LmluaXQoZ2xv
YmFsT2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgSlNWTUNsaWVu
dERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRp
Y0dsb2JhbHNbXSA9IHsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisjZGVmaW5lIERFQ0xBUkVf
R0xPQkFMX1NUQVRJQyhuYW1lKVwKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVy
dHlJbmZvKFwKKyAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkueG1sQ2FzaW5n
VGVzdEJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgeG1sQ2FzaW5nVGVzdCgpLm1fIyNu
YW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAor
ICAgIFdFQkNPUkVfRk9SRUFDSF9YTUxDQVNJTkdURVNUX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShE
RUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIH07CisgICAgaWYgKHNpemVvZihzdGF0aWNH
bG9iYWxzKSkKKyAgICAgICAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNH
bG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKKyAgICBVTlVTRURfUEFS
QU0oY2xpZW50RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmls
ZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
OTVlYjljODg1ZjRmNjZlZjE2NTA2MjE1MTI4N2FhMzU1MjU5YzVmZi4uMWU5NjkwMGQ5NTQ2ZWM3
MWU1N2ZiNzJjMmE3YjEyYmU2NDNhODQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMzks
OCArMTIzOSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRH
bG9iYWxPYmplY3QuY3BwCiAgICAgYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCiAgICAgYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAotICAgIGJpbmRpbmdzL2pzL1dlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0gICAgYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRp
bnMuY3BwCiAgICAgYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAog
ICAgIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCiAKQEAgLTM3MzYsMjUg
KzM3MzQsMzEgQEAgc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCiAgICAgJHtKYXZhU2Ny
aXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50
YXRpb24ucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5l
cmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElS
fS9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2
YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVy
LnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVf
d3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weQorICAgICR7
SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJ
Un0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNf
RElSfS9sYXp5d3JpdGVyLnB5CiApCiAKIGZvcmVhY2ggKF9idWlsdGluU291cmNlICR7V2ViQ29y
ZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9vYmplY3RO
YW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0UpCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAot
ICAgICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5h
bWV9QnVpbHRpbnMuY3BwCi0gICAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oCi0gICAgICAgIE1BSU5fREVQRU5ERU5DWSAk
e19idWlsdGluU291cmNlfQotICAgICAgICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1ND
UklQVFN9Ci0gICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0
Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgV2Vi
Q29yZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9ICR7
X2J1aWx0aW5Tb3VyY2V9Ci0gICAgICAgIFZFUkJBVElNKQotICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfREVSSVZFRF9TT1VSQ0VTCi0gICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmgKLSAgICApCi0gICAgQUREX1NPVVJDRV9XRUJDT1JF
X0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0J1aWx0aW5zLmNwcCAke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcCkKKyAgICBsaXN0KEFQUEVO
RCBXZWJDb3JlX0dlbmVyYXRlZF9CdWlsdGlucyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfR2Vu
ZXJhdGVkX0J1aWx0aW5zICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3RO
YW1lfUJ1aWx0aW5zLmNwcCkKIGVuZGZvcmVhY2ggKCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfR2Vu
ZXJhdGVkX0J1aWx0aW5zICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNC
dWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2ViQ29yZV9HZW5lcmF0ZWRfQnVpbHRpbnMgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCkKK2xp
c3QoQVBQRU5EIFdlYkNvcmVfR2VuZXJhdGVkX0J1aWx0aW5zICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCkKKworYWRkX2N1c3RvbV9j
b21tYW5kKAorICAgIE9VVFBVVCAke1dlYkNvcmVfR2VuZXJhdGVkX0J1aWx0aW5zfQorICAgIE1B
SU5fREVQRU5ERU5DWSAke1dlYkNvcmVfQlVJTFRJTlNfU09VUkNFU30KKyAgICBERVBFTkRTICR7
QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9CisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRB
QkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eSAtLXdpdGgtd3JhcHBlci1maWxlcyAtLWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0LWRpcmVj
dG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0gJHtXZWJDb3JlX0JVSUxUSU5TX1NP
VVJDRVN9CisgICAgVkVSQkFUSU0pCiAKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VS
Q0VTICR7V2ViQ29yZV9HZW5lcmF0ZWRfQnVpbHRpbnN9KQogCiBBRERfU09VUkNFX1dFQkNPUkVf
REVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vaHRtbC9IVE1MVHJlZUJ1aWxkZXIu
Y3BwIE1hdGhNTE5hbWVzLmNwcCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXgg
Y2ExYjA3ODcxM2VjN2MwMTRlMDM3NzQwODZkOWJhN2UzMzI0ZDgxZi4uOTdjM2I0YjgyNTY2MDhl
ZWJlZjU3ZDA0NWE4Y2FlMzJmNzI2YWMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CkBAIC0xMzEwLDIxICsxMzEwLDI2IEBAIEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAog
ICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJp
bmVkX2ltcGxlbWVudGF0aW9uLnB5IFwKICAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElS
KS9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkgXAogICAgICQoSmF2YVNjcmlw
dENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0
aW9uLnB5IFwKKyAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgXAorICAgICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVu
dGF0aW9uLnB5IFwKKyAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGluc19n
ZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weSBcCisgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRT
X0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBcCiAgICAg
JChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgXAog
ICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2xhenl3cml0ZXIucHkgXAogIwogCiAj
IEFkZGluZy9yZW1vdmluZyBzY3JpcHRzIHNob3VsZCB0cmlnZ2VyIHJlZ2VuZXJhdGlvbiwgYnV0
IGNoYW5naW5nIHdoaWNoIGJ1aWx0aW5zIGFyZQogIyBnZW5lcmF0ZWQgc2hvdWxkIG5vdCBhZmZl
Y3Qgb3RoZXIgYnVpbHRpbnMgd2hlbiBub3QgcGFzc2luZyAnLS1jb21iaW5lZCcgdG8gdGhlIGdl
bmVyYXRvci4KKyMgV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VfTElTVCA9ICQoc2hlbGwgZWNobyAk
KFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFUykgfCBwZXJsIC1lICdwcmludCAiICIgLiBqb2luKCIg
LUkiLCBzcGxpdCgiICIsIDw+KSk7JykKIAogLlBIT05ZOiBmb3JjZQogV2ViQ29yZV9CVUlMVElO
U19ERVBFTkRFTkNJRVNfTElTVCA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL1VwZGF0
ZUNvbnRlbnRzLnB5IGZvcmNlCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVIpL1VwZGF0ZUNvbnRlbnRzLnB5ICckKEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTKScgJEAK
IAotJUJ1aWx0aW5zLmg6ICUuanMgJChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUykgV2ViQ29y
ZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVAotCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSKS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAtLW91dHB1dC1kaXJlY3Rvcnkg
LiAtLWZyYW1ld29yayBXZWJDb3JlICQ8CisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NS
SVBUU19ESVIpL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IC0td2l0aC13cmFwcGVyLWZpbGVzIC0t
b3V0cHV0LWRpcmVjdG9yeSAuIC0tZnJhbWV3b3JrIFdlYkNvcmUgJChXZWJDb3JlX0JVSUxUSU5T
X1NPVVJDRVMpCiAKLWFsbCA6ICQobm90ZGlyICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTOiUu
anM9JUJ1aWx0aW5zLmgpKQorCithbGwgOiBXZWJDb3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19M
SVNUCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkNTIzYzJmMzY2MTA0M2Nk
Y2EwNjc1YTIyNWQ2ZjJjYTM2YmYyNjcwLi40MzNmMmQ5MWUzYTg3Nzg4MGZjN2I0OTlkMDU5OTgx
ZjE2ZTM2OGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNTYwLDcgKzE1NjAsNiBAQAogCQk0MEVDQUU3RTE2QjhCNjcyMDBD
MzYxMDMgLyogSlNET01FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDBFQ0FFN0QxNkI4QjY3MjAwQzM2MTAzIC8qIEpTRE9NRXJyb3IuaCAqLzsg
fTsKIAkJNDBFQ0FFODExNkI4QjY4QTAwQzM2MTAzIC8qIEpTRE9NRXJyb3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDBFQ0FFODAxNkI4QjY4QTAw
QzM2MTAzIC8qIEpTRE9NRXJyb3IuY3BwICovOyB9OwogCQk0MTBCN0U3MjEwNDVGQUIwMDBEODIy
NEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwQjdFNzExMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDEwRDMzMjQxQzE5OTg1MDAwRjdGREUyIC8qIFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDEwRDMzMjMxQzE5OTg0MTAwRjdGREUyIC8qIFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwICovOyB9OwogCQk0MTIzMDgxQjEzOEM0Mjk3MDBCQ0NGQ0EgLyog
V2ViQ29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0YxOUIxQTA4MjQ1RTVBMDAxRTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTQxMjMwOTEzMTM4QzQyRkYwMEJDQ0ZDQSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
ODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9
OwogCQk0MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAw
RTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLzsgfTsKQEAgLTE2MTEsOSArMTYxMCw2IEBACiAJ
CTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MThGODgwMzBGRjk1N0FFMDA4
MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oICovOyB9OwogCQk0MTlCQzJERTE2ODUzMjk5MDBE
NjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MTlCQzJEQzE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExp
bmtTdGF0ZS5jcHAgKi87IH07CiAJCTQxOUJDMkRGMTY4NTMyOTkwMEQ2NEQ2RCAvKiBWaXNpdGVk
TGlua1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTlCQzJERDE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5oICovOyB9Owot
CQk0MTlCRTc1NjFCQzdGNDFCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkU3NTMx
QkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0MTlCRTc1NzFCQzdGNDIx
MDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkU3NTQxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNv
cmVKU0J1aWx0aW5zLmNwcCAqLzsgfTsKLQkJNDE5QkU3NTgxQkM3RjQyNzAwRTFDODVCIC8qIFdl
YkNvcmVKU0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MTlCRTc1NTFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCAq
LzsgfTsKIAkJNDE5QkU3NTkxQkM3RjQyQjAwRTFDODVCIC8qIFdlYkNvcmVCdWlsdGluTmFtZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxOUJFNzUy
MUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlQnVpbHRpbk5hbWVzLmggKi87IH07CiAJCTQxQTNE
NThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBM0Q1OEMxMDFDMTUyRDAw
MzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi87IH07CiAJCTQxQTNENThGMTAx
QzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAv
KiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCAqLzsgfTsKQEAgLTU1NDQsNyArNTU0MCwxMSBAQAog
CQlCQzMzRkIxQjBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJveExpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzM0ZCMUEwRjMwRUU4
NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAqLzsgfTsKIAkJQkMzNDhCQkUwREI3
RjUzMTAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCQkQwREI3RjUzMTAwNEFCQUI5
IC8qIEpTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwICovOyB9OwogCQlCQzM0OEJEMzBEQjdGODA0
MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJEMTBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxI
dHRwUmVxdWVzdC5jcHAgKi87IH07CisJCUJDMzQ4QkQzMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJD
b3JlSlNCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzM0OEJEMTBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3Bw
ICovOyB9OworCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzM0OEJEMTBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHAgKi87IH07CiAJCUJDMzQ4QkQ0MERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJE
MjBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5oICovOyB9OworCQlCQzM0OEJE
NDBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQSAv
KiBXZWJDb3JlSlNCdWlsdGlucy5oICovOyB9OworCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQkIg
LyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCRDIwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQzNCQzI5QzBFOTFBQjBGMDA4MzU1ODggLyogSG9zdFdpbmRvdy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQkMyOUIwRTkx
QUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzNCRTEyQjBFOTgwOTJGMDA4MzU1ODggLyogUG9wdXBN
ZW51U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDM0JFMTJBMEU5ODA5MkYwMDgzNTU4OCAvKiBQb3B1cE1lbnVTdHlsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDM0JFOTkzMEU5QzFDN0Mw
MDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQkU5OTAwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNj
cm9sbGJhci5jcHAgKi87IH07CkBAIC05MTI3LDcgKzkxMjcsNiBAQAogCQk0MEVDQUU3RDE2QjhC
NjcyMDBDMzYxMDMgLyogSlNET01FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0RPTUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQwRUNBRTgw
MTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRE9NRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTBCN0U3MTEwNDVGQUIwMDBEODIyNEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTBEMzMyMzFDMTk5ODQxMDBG
N0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExODlFRjcxQUQ4MjMyODAwQjkwQTBEIC8qIFJlYWRh
YmxlU3RyZWFtQ29udHJvbGxlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVhZGFibGVT
dHJlYW1Db250cm9sbGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEyN0Q1
MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEyOURGODMxQkI1QjdGNzAwMzIyQTE2IC8qIEpTUmVhZGFibGVTdHJlYW1Qcml2
YXRlQ29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTkxOTEsOSArOTE5MCw2IEBACiAJCTQxOUJDMkRDMTY4NTMyOTkwMEQ2
NEQ2RCAvKiBWaXNpdGVkTGlua1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZpc2l0ZWRMaW5rU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTlCQzJERDE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGVkTGlua1N0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOUJFNzUyMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3Jl
QnVpbHRpbk5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVC
dWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE5QkU3NTMxQkM3
RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0MTlCRTc1NDFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29y
ZUpTQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
Q29yZUpTQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTlCRTc1
NTFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUpTQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDE5QkU3NUExQkNCRDNFRDAwRTFDODVCIC8qIE5hdmlnYXRvclVzZXJNZWRp
YS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE5hdmlnYXRvclVz
ZXJNZWRpYS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE5RkFGQUQxQUJBQkNE
NTAwNUI4MjhCIC8qIFJlYWRhYmxlU3RyZWFtUmVhZGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBSZWFkYWJsZVN0cmVhbVJlYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxQTAyM0VEMUEzOURCNzkwMEY3MjJDRiAvKiBSZWFkYWJsZVN0cmVhbS5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gUmVhZGFibGVTdHJlYW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTM1NDgsNyArMTM1NDQsMTEgQEAKIAkJQkMzNDhCQTcwREI3RjFCODAwNEFC
QUI5IC8qIFhNTEh0dHBSZXF1ZXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYTUxIdHRw
UmVxdWVzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzQ4QkJEMERCN0Y1
MzEwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzM0OEJEMTBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxI
dHRwUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hN
TEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMzNDhCRDEw
REI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWE1MSHR0cFJlcXVlc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMzNDhCRDIwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVK
U0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1
aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMzQ4QkQyMERCN0Y4MDQw
MDRBQkFCQiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkMzQkMyOUIwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSG9zdFdpbmRvdy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzNCRTEyQTBFOTgwOTJGMDA4MzU1ODggLyogUG9wdXBN
ZW51U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBNZW51U3R5
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzQkU5OTAwRTlDMUM3QzAwODM1
NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJTY3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTYxNDEsNiArMTYxNDEsMTAgQEAKIAkJMTRERkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERl
cml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAq
LywKKwkJCQlCQzM0OEJEMTBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5jcHAgKi8sCisJCQkJQkMzNDhCRDIwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1
aWx0aW5zLmggKi8sCisJCQkJQkMzNDhCRDIwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuaCAqLywKIAkJCQkxMjIxRTA1ODFDMDJCNDA5MDA2QTFBMDAgLyogQW5p
bWF0aW9uICovLAogCQkJCTFBRTk2QTc5MUQxQTBBNUMwMEI4Njc2OCAvKiBBcHBsZVBheSAqLywK
IAkJCQlBODNCNzkxMDBDQ0IwMDFCMDAwQjA4MjUgLyogQ29yZSAqLywKQEAgLTIyNjA1LDEwICsy
MjYwOSw2IEBACiAJCQkJQTc1RTQ5NzUxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAgKi8sCiAJCQkJQTc1RTQ5NzQxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oICovLAogCQkJCTQxOUJFNzUyMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJD
b3JlQnVpbHRpbk5hbWVzLmggKi8sCi0JCQkJNDEwRDMzMjMxQzE5OTg0MTAwRjdGREUyIC8qIFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICovLAotCQkJCTQxOUJFNzUzMUJDN0YzREIwMEUx
Qzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggKi8sCi0JCQkJNDE5QkU3NTQxQkM3
RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAqLywKLQkJCQk0MTlCRTc1NTFC
QzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCAqLywKIAkJCQlCQzUzRDkxMDEx
NDMxMENDMDAwRDgxN0UgLyogV2ViQ29yZUpTQ2xpZW50RGF0YS5oICovLAogCQkJCTBGMDk5RDA2
MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAog
CQkJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCAqLywKQEAgLTI3MzUzLDYgKzI3MzUzLDggQEAKIAkJCQk3QzRDOTZERDFBRDQ0ODM1MDAz
NjVBNjAgLyogSlNXcml0YWJsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM1OENCNzAx
QzUzMjc3NTAwRTBDMkQ4IC8qIEpTWE1MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MzQ4QkQ0MERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUJDMzQ4QkQ0MERCN0Y4MDQwMDRBQkFCQiAvKiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0QzNUFGMjFDNzE4RDkwMDBG
NzBENUEgLyogSlNYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGOTE2QzQ4RTBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZENDk2MEUzMDU5MkYwMDlEMTBBRCAvKiBKU1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmggaW4gSGVhZGVycyAqLywKQEAgLTI4ODI5LDggKzI4ODMxLDYg
QEAKIAkJCQlDREM2OUREQTE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFj
ZWhvbGRlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQzY5REQ2MTYzMjAyNkMwMDdDMzhE
RiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDEyN0RFRTE0RjMwOTg0MDBFODQ3NzkgLyogV2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTQxOUJFNzU2MUJDN0Y0MUIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MTlCRTc1ODFCQzdGNDI3MDBFMUM4
NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTNEOTExMTE0
MzEwQ0MwMDBEODE3RSAvKiBXZWJDb3JlSlNDbGllbnREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0YxOTlCQjA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleWJvYXJkVUlNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTQwMzc5QjEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlv
bk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzExODUsNiArMzExODUsOCBAQAogCQkJCTgz
NThDQjZGMUM1MzI3NzIwMEUwQzJEOCAvKiBKU1hNTERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgzQTRBOUY5MUNFN0ZEODEwMDcwOUIwMCAvKiBKU1hNTERvY3VtZW50Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzQ4QkQzMERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0
dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDMzQ4QkQzMERCN0Y4MDQwMDRBQkFC
QSAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzM0OEJEMzBE
QjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzM0OEJCRTBEQjdGNTMxMDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4M0QzNUFGMTFDNzE4RDkwMDBGNzBENUEgLyog
SlNYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY5MTZD
NDhEMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTMyMzU1LDggKzMyMzU3LDYgQEAKIAkJCQlDREM2OUREQjE2Mzcx
RkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291
cmNlcyAqLywKIAkJCQlDREM2OURENzE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3Jl
ZW5XYXJuaW5nVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEMTI3REVEMTRGMzA5N0QwMEU4
NDc3OSAvKiBXZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTQx
MEQzMzI0MUMxOTk4NTAwMEY3RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTQxOUJFNzU3MUJDN0Y0MjEwMEUxQzg1QiAvKiBXZWJDb3JlSlNC
dWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQwRTQg
LyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREM5NzlGNDFD
NDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJyb3JFeHRyYXMubW0gaW4gU291cmNlcyAqLywK
IAkJCQk5MzREOUJBNTBCOEMxMTZCMDA3QjQyQTkgLyogV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5jcHAKaW5kZXggOGRhODMyNGU2NmVmY2VmNzczZWRlOGZlMzc3YmE2NmYwZjZm
NzBlYS4uZmI1Njc0MDlkNjA4M2EyNjFmYTM5ZGU4YmMzZThmZGUzZDRjZWZhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
IAogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6YWRkQnVpbHRpbkdsb2JhbHMoVk0mIHZtKQogewot
ICAgIG1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zLmluaXRpYWxpemUoKnRoaXMsIHZtKTsKKyAg
ICBtX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy5pbml0aWFsaXplKCp0aGlzKTsKIAogI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKICAgICBKU09iamVjdCogcHJpdmF0ZVJlYWRhYmxlU3RyZWFtQ29u
dHJvbGxlckNvbnN0cnVjdG9yID0gY3JlYXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0
ZUNvbnN0cnVjdG9yKHZtLCAqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaAppbmRleCA0ZGEwZGE5MGU4OWYxZDMxOTZlZWQ5MWJlNDcxZTc2
M2QzYjQ3YTNhLi4yMDg2MDQxYjQ0NTRhNjhmOTZkMjlhMjZiMDFlNzE5ZmJmYjI4YTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKQEAgLTky
LDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dm9pZCBhZGRCdWlsdGluR2xvYmFscyhKU0M6OlZNJik7Ci0gICAgICAgIGZyaWVuZCB2b2lkIEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpWTSYpOworICAgICAgICBmcmllbmQgdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
czo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwogCiAgICAgICAgIEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zIG1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25zOwogICAgIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGMzNWE3ZDg3NjcyZWIx
NzE4YTUzZmZiMzM0ODg5NGM5YjU5YmIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0gKiAgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4g
bm9yIHRoZSBuYW1lcyBvZgotICogICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqICBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiAgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKLSAqICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCi0gKiAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgi
Ci0KLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTUmVhZGFibGVT
dHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhK
U0M6OlZNJiB2KQotICAgIDogdm0odikKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICAsIG1fcnRj
UGVlckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlvbnModm0pCi0jZW5kaWYKLSNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCi0gICAgLCBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZt
KQotICAgICwgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnModm0pCi0gICAgLCBtX3dyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQotI2VuZGlmCi17Ci0jaWYgIUVOQUJMRShTVFJF
QU1TX0FQSSkgJiYgIUVOQUJMRShXRUJfUlRDKQotICAgIC8vIEZJWE1FOiBXaGVuIG5vbmUgb2Yg
dGhlIGZlYXR1cmVzIHRoYXQgdXNlIHRoaXMgY2xhc3MgYXJlIGVuYWJsZWQsIHdlCi0gICAgLy8g
ZG9uJ3QgZXZlciB1c2UgdGhlIHZtIG1lbWJlci4gSG93ZXZlciwgdGhlIGxvZ2ljIG9mIGluaXRp
YWxpemluZwotICAgIC8vIGl0IHdoZW4gYW55IG9mIHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBn
ZXRzIHByZXR0eSBtZXNzeS4KLSAgICAodm9pZCl2bTsKLSNlbmRpZgotfQotCi12b2lkIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgIG1fcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNG
dW5jdGlvbnMudmlzaXQodmlzaXRvcik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsK
LSAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKLSAgICBtX3dy
aXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmCi0j
aWYgIUVOQUJMRShTVFJFQU1TX0FQSSkgJiYgIUVOQUJMRShXRUJfUlRDKQotICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFZNJiB2bSkK
LXsKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxz
RnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsKLSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFs
T2JqZWN0KTsKLSAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVj
dCk7Ci0gICAgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9i
amVjdCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgRU5BQkxFKFdFQl9S
VEMpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLQotICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9i
YWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotI2lmIEVOQUJMRShXRUJfUlRDKQot
I2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCi0gICAgICAgIEpTRE9NR2xvYmFs
T2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oXAotICAgICAgICAgICAgY2xpZW50RGF0YS5idWls
dGluRnVuY3Rpb25zKCkucnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUj
I1ByaXZhdGVOYW1lKCksIHJ0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1
bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9G
T1JFQUNIX1JUQ1BFRVJDT05ORUNUSU9OSU5URVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShE
RUNMQVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5k
aWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJ
QyhuYW1lKVwKLSAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhc
Ci0gICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgcmVhZGFibGVTdHJlYW1J
bnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpLAotICAgICAgICBXRUJDT1JFX0ZPUkVBQ0hfUkVBREFCTEVTVFJFQU1JTlRFUk5BTFNfQlVJ
TFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJF
X0dMT0JBTF9TVEFUSUMKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAotICAg
ICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFwKLSAgICAgICAgICAg
IGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnN0cmVhbUludGVybmFsc0J1aWx0aW5zKCku
bmFtZSMjUHJpdmF0ZU5hbWUoKSwgc3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9u
LmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNI
X1NUUkVBTUlOVEVSTkFMU19CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RB
VElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQwotI2RlZmluZSBERUNMQVJFX0dMT0JB
TF9TVEFUSUMobmFtZSlcCi0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0
eUluZm8oXAotICAgICAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkud3JpdGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHdyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1dSSVRBQkxFU1RSRUFNSU5URVJO
QUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5kaWYKLSAgICB9OwotCi0gICAgZ2xvYmFsT2JqZWN0
LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNH
bG9iYWxzKSk7Ci0jZW5kaWYKLSNpZiAhRU5BQkxFKFNUUkVBTVNfQVBJKSAmJiAhRU5BQkxFKFdF
Ql9SVEMpCi0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KHZtKTsKLSNlbmRpZgotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAzMWZlMWU1MTk0MGEwMTRiYTFhNzAyMWExNjBlZDczZDc3NzY3YmEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUsIENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiAgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiAgYXJl
IG1ldDoKLSAqICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqICBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSAqICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0g
KiAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKLSNk
ZWZpbmUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZN
Lmg+Ci0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbklu
dGVybmFsc0J1aWx0aW5zLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNp
bmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJXcml0YWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RP
TUdsb2JhbE9iamVjdDsKLQotLy8gRklYTUU6IE1ha2UgYnVpbHRpbiBnZW5lcmF0b3IgZ2VuZXJh
dGUgdGhpcyBjbGFzcwotY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQot
I2lmIEVOQUJMRShXRUJfUlRDKQotICAgIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRp
bkZ1bmN0aW9ucyBydGNQZWVyQ29ubmVjdGlvbkludGVybmFscygpIHsgcmV0dXJuIG1fcnRjUGVl
ckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlvbnM7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKLSAgICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgcmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxz
RnVuY3Rpb25zOyB9Ci0gICAgU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBzdHJlYW1J
bnRlcm5hbHMoKSB7IHJldHVybiBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9uczsgfQotICAgIFdy
aXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyB3cml0YWJsZVN0cmVhbUludGVy
bmFscygpIHsgcmV0dXJuIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7IH0KLSNl
bmRpZgotCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0
aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpWTSYpOwotCi1wcml2YXRlOgotICAgIEpT
Qzo6Vk0mIHZtOwotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgIFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rp
b25zOwotI2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIFJlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rp
b25zOwotICAgIFN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9zdHJlYW1JbnRlcm5h
bHNGdW5jdGlvbnM7Ci0gICAgV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25z
IG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7Ci0jZW5kaWYKLQotfTsKLQotfQot
Ci0jZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY3MTI5MDM2MmFiMDNmZTAzNWJiZjllOWM4YmViNGY0MDIxOGQ4ZTIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUsIENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiAgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiAgYXJl
IG1ldDoKLSAqICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqICBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSAqICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0g
KiAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQnl0ZUxl
bmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJDb3VudFF1ZXVpbmdT
dHJhdGVneUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJGZXRjaEhlYWRlcnNCdWlsdGlucy5jcHAi
Ci0jaW5jbHVkZSAiRmV0Y2hSZXNwb25zZUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJNZWRpYURl
dmljZXNCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnMu
Y3BwIgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUg
IlJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIlJlYWRh
YmxlU3RyZWFtQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtQ29udHJvbGxl
ckJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5z
LmNwcCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zLmNwcCIKLSNpbmNs
dWRlICJTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiV3JpdGFibGVTdHJl
YW1CdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNC
dWlsdGlucy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQxNzY2NDU2N2IwNThjOTBkMTk4NzBj
ZDI0YmFjMTEzZjViZmMyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1
LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0gKiAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKLSAqICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgotICogIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViQ29yZUpTQnVp
bHRpbnNfaAotI2RlZmluZSBXZWJDb3JlSlNCdWlsdGluc19oCi0KLSNpbmNsdWRlICJCeXRlTGVu
Z3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCIKLSNpbmNsdWRlICJDb3VudFF1ZXVpbmdTdHJh
dGVneUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiRmV0Y2hIZWFkZXJzQnVpbHRpbnMuaCIKLSNpbmNs
dWRlICJGZXRjaFJlc3BvbnNlQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJNZWRpYURldmljZXNCdWls
dGlucy5oIgotI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYUJ1aWx0aW5zLmgiCi0jaW5jbHVk
ZSAiUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oIgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0
aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUJ1aWx0aW5z
LmgiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMuaCIKLSNpbmNs
dWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVhZGFi
bGVTdHJlYW1SZWFkZXJCdWlsdGlucy5oIgotI2luY2x1ZGUgIlN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmgiCi0jaW5jbHVkZSAiV3JpdGFibGVTdHJlYW1CdWlsdGlucy5oIgotI2luY2x1ZGUgIldy
aXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdikKLSAgICAg
ICAgOiB2bSh2KQotI2lmIEVOQUJMRShGRVRDSF9BUEkpCi0gICAgICAgICwgbV9mZXRjaEhlYWRl
cnNCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9mZXRjaFJlc3BvbnNlQnVpbHRpbnMoJnZtKQot
I2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICAsIG1fYnl0ZUxlbmd0aFF1
ZXVpbmdTdHJhdGVneUJ1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX2NvdW50UXVldWluZ1N0cmF0
ZWd5QnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fcmVhZGFibGVTdHJlYW1CdWlsdGlucygmdm0p
Ci0gICAgICAgICwgbV9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGlucygmdm0pCi0gICAg
ICAgICwgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBt
X3JlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fc3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fd3JpdGFibGVTdHJlYW1CdWlsdGlucygm
dm0pCi0gICAgICAgICwgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCZ2bSkKLSNl
bmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgICAgICwgbV9tZWRpYURldmljZXNC
dWlsdGlucygmdm0pCi0gICAgICAgICwgbV9uYXZpZ2F0b3JVc2VyTWVkaWFCdWlsdGlucygmdm0p
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICAgICAgLCBtX3J0Y1BlZXJDb25uZWN0
aW9uQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1fcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNC
dWlsdGlucygmdm0pCi0jZW5kaWYKLSAgICB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAg
ICAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSAg
ICAgICAgbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5leHBvcnROYW1lcygpOwotICAgICAgICBt
X3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShXRUJfUlRDKQotICAgICAgICBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxz
QnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSNlbmRpZgotICAgIH0KLSNpZiBFTkFCTEUoRkVUQ0hf
QVBJKQotICAgIEZldGNoSGVhZGVyc0J1aWx0aW5zV3JhcHBlciYgZmV0Y2hIZWFkZXJzQnVpbHRp
bnMoKSB7IHJldHVybiBtX2ZldGNoSGVhZGVyc0J1aWx0aW5zOyB9Ci0gICAgRmV0Y2hSZXNwb25z
ZUJ1aWx0aW5zV3JhcHBlciYgZmV0Y2hSZXNwb25zZUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9mZXRj
aFJlc3BvbnNlQnVpbHRpbnM7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAg
ICBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnNXcmFwcGVyJiBieXRlTGVuZ3RoUXVl
dWluZ1N0cmF0ZWd5QnVpbHRpbnMoKSB7IHJldHVybiBtX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRl
Z3lCdWlsdGluczsgfQotICAgIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnNXcmFwcGVyJiBj
b3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9jb3VudFF1ZXVpbmdTdHJh
dGVneUJ1aWx0aW5zOyB9Ci0gICAgUmVhZGFibGVTdHJlYW1CdWlsdGluc1dyYXBwZXImIHJlYWRh
YmxlU3RyZWFtQnVpbHRpbnMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3RyZWFtQnVpbHRpbnM7IH0K
LSAgICBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGluc1dyYXBwZXImIHJlYWRhYmxlU3Ry
ZWFtQ29udHJvbGxlckJ1aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbUNvbnRyb2xs
ZXJCdWlsdGluczsgfQotICAgIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVy
JiByZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zOyB9Ci0gICAgUmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlu
c1dyYXBwZXImIHJlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnMoKSB7IHJldHVybiBtX3JlYWRh
YmxlU3RyZWFtUmVhZGVyQnVpbHRpbnM7IH0KLSAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dy
YXBwZXImIHN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkgeyByZXR1cm4gbV9zdHJlYW1JbnRlcm5h
bHNCdWlsdGluczsgfQotICAgIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnNXcmFwcGVyJiB3cml0YWJs
ZVN0cmVhbUJ1aWx0aW5zKCkgeyByZXR1cm4gbV93cml0YWJsZVN0cmVhbUJ1aWx0aW5zOyB9Ci0g
ICAgV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXImIHdyaXRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMoKSB7IHJldHVybiBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnM7fQotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBNZWRpYURldmlj
ZXNCdWlsdGluc1dyYXBwZXImIG1lZGlhRGV2aWNlc0J1aWx0aW5zKCkgeyByZXR1cm4gbV9tZWRp
YURldmljZXNCdWlsdGluczsgfQotICAgIE5hdmlnYXRvclVzZXJNZWRpYUJ1aWx0aW5zV3JhcHBl
ciYgbmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnMoKSB7IHJldHVybiBtX25hdmlnYXRvclVzZXJN
ZWRpYUJ1aWx0aW5zO30KLSNlbmRpZgotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgIFJUQ1BlZXJD
b25uZWN0aW9uQnVpbHRpbnNXcmFwcGVyJiBydGNQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zKCkgeyBy
ZXR1cm4gbV9ydGNQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zOyB9Ci0gICAgUlRDUGVlckNvbm5lY3Rp
b25JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXImIHJ0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVp
bHRpbnMoKSB7IHJldHVybiBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnM7IH0K
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIHZtOwotI2lmIEVOQUJMRShGRVRDSF9B
UEkpCi0gICAgRmV0Y2hIZWFkZXJzQnVpbHRpbnNXcmFwcGVyIG1fZmV0Y2hIZWFkZXJzQnVpbHRp
bnM7Ci0gICAgRmV0Y2hSZXNwb25zZUJ1aWx0aW5zV3JhcHBlciBtX2ZldGNoUmVzcG9uc2VCdWls
dGluczsKLSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBCeXRlTGVuZ3RoUXVl
dWluZ1N0cmF0ZWd5QnVpbHRpbnNXcmFwcGVyIG1fYnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1
aWx0aW5zOwotICAgIENvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnNXcmFwcGVyIG1fY291bnRR
dWV1aW5nU3RyYXRlZ3lCdWlsdGluczsKLSAgICBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBl
ciBtX3JlYWRhYmxlU3RyZWFtQnVpbHRpbnM7Ci0gICAgUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
QnVpbHRpbnNXcmFwcGVyIG1fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnM7Ci0gICAg
UmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIgbV9yZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zOwotICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVy
IG1fcmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGluczsKLSAgICBTdHJlYW1JbnRlcm5hbHNCdWls
dGluc1dyYXBwZXIgbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGluczsKLSAgICBXcml0YWJsZVN0cmVh
bUJ1aWx0aW5zV3JhcHBlciBtX3dyaXRhYmxlU3RyZWFtQnVpbHRpbnM7Ci0gICAgV3JpdGFibGVT
dHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIgbV93cml0YWJsZVN0cmVhbUludGVybmFsc0J1
aWx0aW5zOwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBNZWRpYURldmlj
ZXNCdWlsdGluc1dyYXBwZXIgbV9tZWRpYURldmljZXNCdWlsdGluczsKLSAgICBOYXZpZ2F0b3JV
c2VyTWVkaWFCdWlsdGluc1dyYXBwZXIgbV9uYXZpZ2F0b3JVc2VyTWVkaWFCdWlsdGluczsKLSNl
bmRpZgotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnNX
cmFwcGVyIG1fcnRjUGVlckNvbm5lY3Rpb25CdWlsdGluczsKLSAgICBSVENQZWVyQ29ubmVjdGlv
bkludGVybmFsc0J1aWx0aW5zV3JhcHBlciBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVp
bHRpbnM7Ci0jZW5kaWYKLQotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiODVmZWRhZTBlMzIxY2E3MDNjZDQyOTBj
MGMxNTc4Y2YzOTU1MDc3Li45MGI2Mjk4OGY3OGRiZTJkZGJkYTUxZmNkZTE0NWZjMzgxNTYxYTdl
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMDctMDYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgorCisgICAgICAgIEdlbmVyYXRlIFdlYkNvcmUgYnVpbHRpbiB3cmFwcGVyIGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk0NjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29kZWdlbi9tYWluLnB5OgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5n
ZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKTogQWRkaW5nIGdlbmVyYXRlX3dyYXBwZXIgb3B0aW9u
LgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdHMpOiBVc2luZyB0aGlz
IG9wdGlvbiBpbiBXZWJDb3JlIHRlc3QgY2FzZXMuCisKIDIwMTYtMDctMDUgIFBlciBBcm5lIFZv
bGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuaGFuY2UgV2luZG93cyBEUlQg
aW1wbGVtZW50YXRpb24gdG8gc3VwcG9ydCBwbGF0Zm9ybSBzY3JvbGwgd2hlZWwgZXZlbnRzLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weQppbmRleCAwMDM5NmRiOWEzOGJlMGYw
N2JlMTg2M2I4OGFlZDQxZWRmOTdkOTY5Li4xNDNiZjE2ZWJmNTViOWZkMTFiNjMyNTk4YTI4MzJl
ODJkMjBjZmYyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFp
bi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weQpAQCAtMjYs
NyArMjYsNiBAQAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHNodXRpbAotaW1w
b3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5z
Y20uZGV0ZWN0aW9uIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKQEAgLTM4LDcgKzM3LDcgQEAg
Y2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2VsZi5yZXNldF9yZXN1bHRz
ID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQogCi0g
ICAgZGVmIGdlbmVyYXRlX2Zyb21fanNfYnVpbHRpbnMoc2VsZiwgYnVpbHRpbnNfZmlsZSwgb3V0
cHV0X2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9IiIsIGNvbWJpbmVkX291dHB1dHM9RmFsc2Up
OgorICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHNlbGYsIGJ1aWx0aW5zX2ZpbGUs
IG91dHB1dF9kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPSIiLCBjb21iaW5lZF9vdXRwdXRzPUZh
bHNlLCBnZW5lcmF0ZV93cmFwcGVyPUZhbHNlKToKICAgICAgICAgY21kID0gWydweXRob24nLAog
ICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHknLAogICAgICAgICAgICAgICAgJy0tb3V0cHV0LWRpcmVjdG9yeScsIG91dHB1dF9kaXJl
Y3RvcnksCkBAIC00OSw2ICs0OCw5IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHM6CiAg
ICAgICAgIGlmIGNvbWJpbmVkX291dHB1dHM6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWNv
bWJpbmVkJykKIAorICAgICAgICBpZiBnZW5lcmF0ZV93cmFwcGVyOgorICAgICAgICAgICAgY21k
LmFwcGVuZCgnLS13aXRoLXdyYXBwZXItZmlsZXMnKQorCiAgICAgICAgIGNtZC5hcHBlbmQoYnVp
bHRpbnNfZmlsZSkKIAogICAgICAgICBleGl0X2NvZGUgPSAwCkBAIC0xMTAsNyArMTEyLDggQEAg
Y2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgICAgICAgICBjb250aW51ZQog
CiAgICAgICAgICAgICBjb21iaW5lZF9vdXRwdXRzID0gb3V0cHV0X21vZGUgPT0gIkNvbWJpbmVk
IgotICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKG9zLnBhdGgu
am9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSwgZnJhbWV3
b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUsIGNvbWJpbmVkX291dHB1dHM9Y29tYmluZWRfb3V0cHV0
cyk6CisgICAgICAgICAgICBnZW5lcmF0ZV93cmFwcGVyID0gZnJhbWV3b3JrX25hbWUgPT0gIldl
YkNvcmUiCisgICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNfYnVpbHRpbnMob3Mu
cGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5LCBm
cmFtZXdvcmtfbmFtZT1mcmFtZXdvcmtfbmFtZSwgY29tYmluZWRfb3V0cHV0cz1jb21iaW5lZF9v
dXRwdXRzLCBnZW5lcmF0ZV93cmFwcGVyPWdlbmVyYXRlX3dyYXBwZXIpOgogICAgICAgICAgICAg
ICAgIHBhc3NlZCA9IEZhbHNlCiAKICAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283001</attachid>
            <date>2016-07-07 02:15:48 -0700</date>
            <delta_ts>2016-07-08 00:56:20 -0700</delta_ts>
            <desc>Updated according review</desc>
            <filename>bug-159461-20160707111513.patch</filename>
            <type>text/plain</type>
            <size>126634</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YWRlY2U2YWYzY2QzZjkwYjQ1ODhmYTBiZTVhNzBhYTJlYThkMGFhLi5mOGU4YmU3Y2ZhZTE2NGY4
Yzc0YzgxNWViZmExNzZmMjlhMTY3YmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzMCBAQAogMjAxNi0wNy0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CiAKKyAgICAgICAgR2VuZXJhdGUgV2ViQ29yZSBidWlsdGluIHdyYXBwZXIgZmlsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTQ2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0aW5nIGJ1aWx0
aW4gZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIHdyYXBwZXIgZmlsZXMgdXNlZCBpbiBXZWJDb3JlIChT
ZWUgV2ViQ29yZSBjaGFuZ2UgbG9nKQorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnMucHk6IEFkZGluZyBuZXcgZ2VuZXJhdG9ycy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWx0aW5z
L2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weTogQWRkZWQgdG8g
Z2VuZXJhdGUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oLgorICAgICAgICAqIFNjcmlwdHMv
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHk6IEFkZGVkIHRvIGdlbmVyYXRlIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwLgor
ICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFk
ZXIucHk6IEFkZGVkIHRvIGdlbmVyYXRlIFdlYkNvcmVKU0J1aWx0aW5zLmguCisgICAgICAgICog
U2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9u
LnB5OiBBZGRlZCAgdG8gZ2VuZXJhdGUgV2ViQ29yZUpTQnVpbHRpbnMuY3BwLgorICAgICAgICAq
IFNjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHk6IEFkZGluZyBuZXcgb3B0aW9uIHRvIGFj
dGl2YXRlIGdlbmVyYXRpb24gb2YgdGhlIHdyYXBwZXIgZmlsZXMuCisgICAgICAgIChnZW5lcmF0
ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMpOgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMv
YnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFy
YXRlLmpzLXJlc3VsdDoKKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUtR3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0OgorICAgICAgICAqIFNj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWls
dGluLVNlcGFyYXRlLmpzLXJlc3VsdDoKKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5z
L2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6Cisg
ICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2lu
Z1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0OgorCisyMDE2LTA3LTA2ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBCdWlsdGluIGdlbmVyYXRvciBzaG91bGQgdXNl
IHByYWdtYSBvbmNlIGZvciBoZWFkZXIgZmlsZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTQ2MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE5YTdiYjllOGEw
NTUyYjQwNDc2ZmU3NGVmMjhlYjc5N2MyN2U4Ny4uNDZlNGVhNGRkOGQyMTc5M2YxMTJhMTdkNzI0
MjVhN2NjMDA4MGJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA3LTA2ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBHZW5lcmF0ZSBXZWJD
b3JlIGJ1aWx0aW4gd3JhcHBlciBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NDYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gY2hhbmdlIG9mIGJlaGF2aW9yLgorCisgICAgICAgIFVwZGF0
aW5nIGJ1aWxkIHN5c3RlbSB0byBoYW5kbGUgbmV3IGJ1aWx0LWluIGdlbmVyYXRvcnMgd2l0aG91
dCBtb2RpZnlpbmcgV2ViQ29yZUpTQnVpbHRpbnMqIGZpbGVzLi4KKyAgICAgICAgVGhlIGdlbmVy
YXRvciBpcyBub3cgcGFzc2VkIGFsbCBidWlsdC1pbnMgYXQgb25jZSBzbyB0aGF0IHdyYXBwZXIg
ZmlsZXMgY2FuIGJlIGdlbmVyYXRlZC4KKyAgICAgICAgUmVtb3ZpbmcgV2ViQ29yZUpTQnVpbHRp
bnMqIGNoZWNrZWQtaW4gd3JhcHBlciBmaWxlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjphZGRCdWls
dGluR2xvYmFscyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmg6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmg6IFJlbW92
ZWQuCisKIDIwMTYtMDctMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBEb2N1bWVudC50aXRsZSBzZXR0ZXIgZG9lcyBub3Qgd29yayBmb3IgU1ZHIGRvY3VtZW50
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc2ZjY4YmVmMmY5NzY2ZWUz
Y2ZiMjU5ZjcyYTJiOTdjZjQyZDk2YmMuLjI2NjJjOGQ4MTRjNTVhNmI3NjY1NmRjZTNiZDY1YTUz
NTE3OWVmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMDYsNiAr
MTIwNiwxMCBAQCBzZXQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMKICAgICAke0phdmFTY3Jp
cHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRh
dGlvbi5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVy
YXRlX3NlcGFyYXRlX2hlYWRlci5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9
L2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZh
U2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIu
cHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV93
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJ
Un0vYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5CisgICAgJHtK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24ucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElS
fS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2xhenl3cml0ZXIucHkKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKaW5kZXggZWNkZDg3ZWJkNGUzMjU5NGQ1ZTljNzMwMTYzMGFhNWE2YjBiNzY1NS4uYTVm
MDJiMGFlYjE4NWU5NDNhY2M2ZDI2ZjFmMzUzZTI4MTY5NTE0YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTc2LDYgKzc2LDEwIEBAIEJVSUxUSU5TX0dF
TkVSQVRPUl9TQ1JJUFRTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2J1
aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5IFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0
ZV9zZXBhcmF0ZV9oZWFkZXIucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIp
L2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5IFwK
KyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlucy9idWlsdGluc19nZW5l
cmF0ZV93cmFwcGVyX2hlYWRlci5weSBcCisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJ
Un0vYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBc
CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IFwKKyAgICAke0phdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSfS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVIpL2xhenl3cml0ZXIucHkgXAogIwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAy
ZDJiYzM0MDkzMmQxOGI2YTZkNjcxYzA1NWRhNjk3ZmRhNWNhNGU0Li40OTM4Zjc0MWRjNzFiNmUy
YzMzYTg3N2I5MDBjMzFkOTNmYjg0NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTQ3NCw2ICsxNDc0LDEwIEBACiAJCTk5REEwMEE4MUJENTk5MzEwMEY0NTc1QyAvKiBidWls
dGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5REEwMDlGMUJENTk5MjcwMEY0NTc1QyAv
KiBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBBOTFCRDU5OTMx
MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5IGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQTAxQkQ1OTkyNzAw
RjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBBQTFCRDU5OTMx
MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OURBMDBBMTFC
RDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRp
b24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NDEyOTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk0MTI5NTI3ODFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1Mjc0MUQyQ0Y2QUMwMEU3
OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0
MTI5NTI3OTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFk
ZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
Mjk1Mjc1MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRl
ci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0
MTI5NTI3QTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyOTUyNzYxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTlEQTAwQUYxQkQ1OTk0RTAwRjQ1NzVDIC8qIGdlbmVyYXRlLWpzLWJ1
aWx0aW5zLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTlEQTAwQUMxQkQ1OTkzRTAwRjQ1NzVDIC8qIGdlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk5REEwMEIwMUJE
NTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQUQxQkQ1OTkzRTAwRjQ1NzVDIC8qIGxhenl3cml0
ZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTlEQTAwQjExQkQ1OTk0RTAwRjQ1NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQUUxQkQ1OTkzRTAwRjQ1
NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zMjg3LDYgKzMyOTEsMTAgQEAKIAkJMkFGNzM4MkExOEJCQkY5
MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBRjczODJCMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFibGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxp
YnouZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3Iv
bGliL2xpYnouZHlsaWI7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQk0MTI5NTI3MzFEMkNG
NkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVy
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJh
dGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRh
dGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEyOTUyNzUxRDJDRjZBQzAw
RTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFk
ZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMjk1Mjc2MUQyQ0Y2QUMwMEU3
OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFERUEx
MzExQjlGMzE1NDAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCdWlsdGluVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDMxOURBMDExQzFCRTNDMTAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlck1h
Y3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHA7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zQWZ0ZXJP
cHRpbWl6YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDMxOURBMDIx
QzFCRTNDMTAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0
aW9ucy5oOyBwYXRoID0gYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjcxMCw2ICs2NzE4LDEwIEBACiAJCQkJOTlEQTAw
OUYxQkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAogCQkJCTk5REEwMEEwMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19n
ZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkgKi8sCiAJCQkJOTlEQTAwQTExQkQ1OTkyNzAwRjQ1
NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5ICovLAor
CQkJCTQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkgKi8sCisJCQkJNDEyOTUyNzQxRDJDRjZBQzAwRTc4Qjg5IC8q
IGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5ICov
LAorCQkJCTQxMjk1Mjc1MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFw
cGVyX2hlYWRlci5weSAqLywKKwkJCQk0MTI5NTI3NjFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRp
bnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKIAkJCQk5OURBMDA5QTFC
RDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdG9yLnB5ICovLAogCQkJCTk5REEwMDlC
MUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19tb2RlbC5weSAqLywKIAkJCQk5OURBMDA5QzFC
RDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5ICovLApAQCAtNzEyNCw2ICs3
MTM2LDEwIEBACiAJCQkJRkVBMEM0MDMxQ0REN0QxRDAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVs
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBQTFCRDU5OTMxMDBGNDU3NUMgLyogYnVp
bHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk5OURBMDBBMzFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdG9yLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJNDEyOTUyNzgxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dl
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8s
CisJCQkJNDEyOTUyNzkxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBw
ZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJNDEyOTUyN0ExRDJDRjZCQzAwRTc4Qjg5
IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVy
cyAqLywKKwkJCQk0MTI5NTI3NzFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVf
aW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QTYx
QzEwQjcyRDAwMzkwRkREIC8qIEpJVEJpdE9yR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVy
cyAqLywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVz
LnB5IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9idWlsdGlucy9idWlsdGlucy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2J1aWx0aW5zL2J1aWx0aW5zLnB5CmluZGV4IDkzNDllZWVmNjUzNDBhMjJhZGQwYWMyMjYwZjZj
ZjYwYjMyMjA2N2QuLmE5YWZmMmIxY2ZmNGYyNTM1MGI3NjU4ZGRhNDljMGE1MTIzZTljMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
LnB5CkBAIC05LDMgKzksNyBAQCBmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2hlYWRl
ciBpbXBvcnQgKgogZnJvbSBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgogZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIgaW1wb3J0
ICoKIGZyb20gYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20g
YnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBi
dWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20g
YnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1
aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDY0Zjk3N2FjMWE5MmU1Yjk3MTM3NDdmYmUy
MWM3N2E1MWUyZmMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVy
LnB5CkBAIC0wLDAgKzEsMTEzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVp
bHRpbnNHZW5lcmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKK2Zyb20gYnVpbHRpbnNfdGVt
cGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKwor
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCkKKyAgICAgICAgc2VsZi5pbnRlcm5hbHMgPSBmaWx0ZXIobGFtYmRhIG9i
amVjdDogICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zLCBtb2RlbC5vYmplY3RzKQor
CisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykgKyAiSlNCdWlsdGluSW50ZXJuYWxz
LmgiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBhcmdzID0gewor
ICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVhZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxl
bmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMg
PSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2Fybmlu
Zykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkK
KworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRv
cCkuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfc2VjdGlvbl9mb3Jfb2JqZWN0KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAg
IHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRh
cnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCisg
ICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29y
ZSIsICJydW50aW1lL1ZNLmgiKSwKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAgICAgICAg
Zm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGhlYWRlcl9pbmNsdWRl
cy5hcHBlbmQoKFsiV2ViQ29yZSJdLCAoIldlYkNvcmUiLCBvYmplY3Qub2JqZWN0X25hbWUgKyAi
QnVpbHRpbnMuaCIpKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJh
dGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsiY2xhc3MgSlNE
T01HbG9iYWxPYmplY3Q7IiwKKyAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAg
ICJjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7IiwKKyAgICAgICAgICAgICAgICAg
InB1YmxpYzoiXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIGV4cGxpY2l0IEpTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9tZXRob2RzKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2FjY2Vzc29ycygpKQorICAgICAgICBsaW5lcy5hcHBlbmQoInByaXZhdGU6IikKKyAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVtYmVycygpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoIn07IikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBhY2Nl
c3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBXS19sY2ZpcnN0KG9iamVj
dC5vYmplY3RfbmFtZSkKKworICAgIGRlZiBtZW1iZXJfbmFtZShzZWxmLCBvYmplY3QpOgorICAg
ICAgICByZXR1cm4gIm1fIiArIHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpCisKKyAgICBkZWYg
bWVtYmVyX3R5cGUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuIFdLX3VjZmlyc3Qob2Jq
ZWN0Lm9iamVjdF9uYW1lKSArICJCdWlsdGluRnVuY3Rpb25zIgorCisgICAgZGVmIGdlbmVyYXRl
X21ldGhvZHMoc2VsZik6CisgICAgICAgIHJldHVybiAiIiIKKyAgICB2b2lkIHZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsK
KyIiIgorCisgICAgZGVmIGdlbmVyYXRlX2FjY2Vzc29ycyhzZWxmKToKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5u
b3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCAiICAgICIgKyBzZWxmLm1lbWJlcl90eXBlKG9i
amVjdCkgKyAiJiAiICsgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkgKyAiKCkgeyByZXR1cm4g
IiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICI7IH0iKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCIiKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVy
YXRlX21lbWJlcnMoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyIgICAgSlNDOjpWTSYgbV92bTsi
XQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3Rh
dGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCAiICAgICIgKyBzZWxmLm1lbWJlcl90eXBlKG9iamVj
dCkgKyAiICIgKyBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkgKyAiOyIpKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVt
ZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWls
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41Y2IzMWM5MmY5NmM1OWM3ZjA5YzAyNWNlOTM3MDFlM2Y3ZDQ5M2RmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNf
Z2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwx
MzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBs
YXRlCisKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvciwg
V0tfbGNmaXJzdCwgV0tfdWNmaXJzdAorZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1
aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsKToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwg
bW9kZWwpCisgICAgICAgIHNlbGYuaW50ZXJuYWxzID0gZmlsdGVyKGxhbWJkYSBvYmplY3Q6ICAn
aW50ZXJuYWwnIGluIG9iamVjdC5hbm5vdGF0aW9ucywgbW9kZWwub2JqZWN0cykKKworICAgIGRl
ZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJh
bWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpICsgIkpTQnVpbHRpbkludGVybmFscy5jcHAiCisK
KyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAg
ICAgICAgJ25hbWVzcGFjZSc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNw
YWNlJyksCisgICAgICAgICAgICAnaGVhZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgp
LnJlcGxhY2UoJy4nLCAnXycpLAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vi
c3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfcHJp
bWFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpKQorCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlVG9wKS5zdWJzdGl0dXRlKGFyZ3MpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3Qo
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VC
b3R0b20pLnN1YnN0aXR1dGUoYXJncykpCisKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNl
Y3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2Vs
Zik6CisgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKKyAgICAgICAgICAgIChbIldlYkNvcmUi
XSwKKyAgICAgICAgICAgICAgICAoIldlYkNvcmUiLCAiSlNET01HbG9iYWxPYmplY3QuaCIpLAor
ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAg
ICAoIldlYkNvcmUiLCAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIiksCisgICAgICAgICAgICApLAor
ICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENv
cmUiLCAiaGVhcC9TbG90VmlzaXRvcklubGluZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAg
ICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwg
InJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCIpLAorICAgICAgICAgICAgKSwKKyAgICAgICAg
ICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAgICAgICAoIkphdmFTY3JpcHRDb3JlIiwgInJ1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIiksCisgICAgICAgICAgICApLAorICAgICAgICBdCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJp
ZXMoaGVhZGVyX2luY2x1ZGVzKSkKKworICAgIGRlZiBnZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmpl
Y3Qoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9jb25zdHJ1Y3RvcigpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9tZXRob2RzKCkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgYWNjZXNzb3JfbmFtZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gV0tfbGNmaXJz
dChvYmplY3Qub2JqZWN0X25hbWUpCisKKyAgICBkZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0
KToKKyAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29yX25hbWUob2JqZWN0KQorCisg
ICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBXS191Y2Zp
cnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbkZ1bmN0aW9ucyIKKworICAgIGRlZiBn
ZW5lcmF0ZV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIkpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KSIs
CisgICAgICAgICAgICAgICAgICIgICAgOiBtX3ZtKHYpIl0KKyAgICAgICAgZm9yIG9iamVjdCBp
biBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChCdWlsdGluc0dlbmVy
YXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRpb25zLmdldCgnY29uZGl0aW9uYWwn
KSwgIiAgICAsICIgKyBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkgKyAiKG1fdm0pIikpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgie1xufVxuIikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKKworICAgIGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsi
dm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikiLAorICAgICAgICAgICAgICAgICAieyJdCisgICAgICAgIGZvciBvYmplY3QgaW4g
c2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0
b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyks
ICIgICAgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICIudmlzaXQodmlzaXRvcik7Iikp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTtcbn0iKQor
CisgICAgICAgIGxpbmVzLmFwcGVuZCgidm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KVxueyIpCisgICAgICAg
IGZvciBvYmplY3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
QnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQo
J2NvbmRpdGlvbmFsJyksICIgICAgIiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICIuaW5p
dChnbG9iYWxPYmplY3QpOyIpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIEpTVk1DbGll
bnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5j
bGllbnREYXRhKTsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBKU0RPTUdsb2JhbE9iamVj
dDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsiKQorICAgICAgICBmb3Ig
b2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0
aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25k
aXRpb25hbCcpLAorIiIiI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcXAorICAg
IEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oXFwKKyAgICAgICAgY2xpZW50
RGF0YS5idWlsdGluRnVuY3Rpb25zKCkuIiIiICsgc2VsZi5hY2Nlc3Nvcl9uYW1lKG9iamVjdCkg
KyAiQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCAiICsgc2VsZi5hY2Nlc3Nvcl9uYW1l
KG9iamVjdCkgKyAiIiIoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxl
dGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfIiIiICsgb2JqZWN0Lm9i
amVjdF9uYW1lLnVwcGVyKCkgKyAiIiJfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xP
QkFMX1NUQVRJQykKKyN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMiIiIpKQorCisgICAgICAg
IGxpbmVzLmFwcGVuZCgiIiIgICAgfTsKKyAgICBpZiAoc2l6ZW9mKHN0YXRpY0dsb2JhbHMpKQor
ICAgICAgICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdU
Rl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnRE
YXRhKTsKK30iIiIpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
Z2VuZXJhdGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3Ig
b2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0
aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25k
aXRpb25hbCcpLCAiICAgICAgICAiICsgc2VsZi5tZW1iZXJfdHlwZShvYmplY3QpICsgIiAiICsg
c2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsgIjsiKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIi
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlu
c19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmNjNzFhZDllM2FmNTIw
Zjk0YzA4Zjk5ZmU3NmYxYTU1ZTk4NTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFk
ZXIucHkKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBC
dWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tfdWNmaXJzdAorZnJvbSBidWlsdGluc190
ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwor
Citsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCdWlsdGluc1dy
YXBwZXJIZWFkZXJHZW5lcmF0b3IoQnVpbHRpbnNHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCk6CisgICAgICAgIEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJykgKyAiSlNCdWlsdGlu
cy5oIgorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgYXJncyA9IHsK
KyAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmco
J25hbWVzcGFjZScpLAorICAgICAgICAgICAgJ2hlYWRlckd1YXJkJzogc2VsZi5vdXRwdXRfZmls
ZW5hbWUoKS5yZXBsYWNlKCcuJywgJ18nKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25z
ID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5p
bmcpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuSGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkp
CisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VU
b3ApLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX3NlY3Rpb25fZm9yX29iamVjdCgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAg
ICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2Vjb25k
YXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKKyAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwor
ICAgICAgICAgICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENv
cmUiLCAicnVudGltZS9WTS5oIiksCisgICAgICAgICAgICApLAorICAgICAgICBdCisgICAgICAg
IGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CisgICAgICAgICAgICBoZWFkZXJf
aW5jbHVkZXMuYXBwZW5kKChbIldlYkNvcmUiXSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9u
YW1lICsgIkJ1aWx0aW5zLmgiKSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdl
bmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQorCisgICAgZGVm
IGdlbmVyYXRlX3NlY3Rpb25fZm9yX29iamVjdChzZWxmKToKKyAgICAgICAgbGluZXMgPSBbImNs
YXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7IiwgInB1YmxpYzoiXQorCisgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2NvbnN0cnVjdG9yKCkpCisgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygpKQorICAgICAgICBsaW5lcy5hcHBlbmQoInByaXZhdGU6
IikKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVtYmVycygpKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoIn07IikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKwor
ICAgIGRlZiBhY2Nlc3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBXS19s
Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbnMiCisKKyAgICBkZWYgbWVtYmVy
X25hbWUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxmLmFjY2Vzc29y
X25hbWUob2JqZWN0KQorCisgICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVjdCk6CisgICAg
ICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbnNXcmFw
cGVyIgorCisgICAgZGVmIGdlbmVyYXRlX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBsaW5l
cyA9IFsiICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2KSIsICIgICAg
ICAgIDogbV92bSh2KSJdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2RlbCgpLm9iamVj
dHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRo
X2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksICIgICAgICAgICwg
IiArIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KSArICIoJm1fdm0pIikpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgiICAgIHsiKQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmpl
Y3RzOgorICAgICAgICAgICAgaWYgbm90ICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25z
OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVp
bHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2Nv
bmRpdGlvbmFsJyksICIgICAgICAgICIgKyBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkgKyAiLmV4
cG9ydE5hbWVzKCk7IikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIH1cbiIpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfYWNjZXNzb3JzKHNl
bGYpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2Rl
bCgpLm9iamVjdHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iu
d3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksICIg
ICAgIiArIHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSArICImICIgKyBzZWxmLmFjY2Vzc29yX25h
bWUob2JqZWN0KSArICIoKSB7IHJldHVybiAiICsgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpICsg
IjsgfSIpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgbGlu
ZXMgPSBbIiAgICBKU0M6OlZNJiBtX3ZtOyJdCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5t
b2RlbCgpLm9iamVjdHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0
b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyks
ICIgICAgIiArIHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSArICIgIiArIHNlbGYubWVtYmVyX25h
bWUob2JqZWN0KSArICI7IikpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19n
ZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlv
bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41Mzc0YjZkNDM3ZTliNjkyM2E5Mjk3MWU4YTJhODc5N2Y4NDFiNmYz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRp
bnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsx
LDYyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3IK
K2Zyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKwor
Y2xhc3MgQnVpbHRpbnNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQnVpbHRpbnNHZW5l
cmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAgIEJ1aWx0aW5z
R2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFt
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
bmFtZXNwYWNlJykgKyAiSlNCdWlsdGlucy5jcHAiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVh
ZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAg
ICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKKwor
ICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVf
c2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbXQor
ICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzLmFwcGVuZCgoWyJXZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5v
YmplY3RfbmFtZSArICJCdWlsdGlucy5jcHAiKSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdG9yLnB5CmluZGV4IDkyZWNiZWUwNDQyZTE1ZWI3OTdhMjFiZjcxNzZh
NDFlZGE4MmFmNGUuLjEwOWJjNDc0YjFmNTM3ZWU5NmU3MDc4NGU0MjA1OTc2MTQwMWI5YmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0b3IucHkKQEAgLTE0Myw2ICsxNDMsMTYgQEAgY2xhc3MgQnVpbHRp
bnNHZW5lcmF0b3I6CiAgICAgIyBIZWxwZXIgbWV0aG9kcy4KIAogICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgd3JhcF93aXRoX2d1YXJkKGd1YXJkLCB0ZXh0KToKKyAgICAgICAgaWYgbm90IGd1
YXJkOgorICAgICAgICAgICAgcmV0dXJuIHRleHQKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihb
CisgICAgICAgICAgICAnI2lmICVzJyAlIGd1YXJkLAorICAgICAgICAgICAgdGV4dCwKKyAgICAg
ICAgICAgICcjZW5kaWYgLy8gJXMnICUgZ3VhcmQsCisgICAgICAgIF0pCisKKyAgICBAc3RhdGlj
bWV0aG9kCiAgICAgZGVmIG1hbmdsZWROYW1lRm9yT2JqZWN0KG9iamVjdCk6CiAgICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKG9iamVjdCwgQnVpbHRpbk9iamVjdCk6CiAgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIG1hbmdsZWROYW1lRm9yT2Jq
ZWN0KCkiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJh
dGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0
ZS1qcy1idWlsdGlucy5weQppbmRleCA1NTRhNzJjY2MwNTIzMmNhMzY3ZTM4OTQ1YWI2MjAxZjQ1
MjNlMDRhLi42ZmY1MmNkYzUxNmY1NmNmNjkyOTg0NTA1YTRlNzMyODg3NzA3N2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQpAQCAtNDUsNiArNDUsNyBAQCBkZWYgZ2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5z
X2ZpbGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkX291dHB1dD1GYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfd3JhcHBlcl9maWxlcz1G
YWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3Jr
X25hbWU9IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNl
X291dHB1dD1GYWxzZSk6CiAKQEAgLTc0LDYgKzc1LDEzIEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5n
c19mb3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSGVhZGVyR2VuZXJhdG9yKG1vZGVsLCBvYmpl
Y3QpKQogICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQogCisgICAgICAgIGlmIGdlbmVyYXRl
X3dyYXBwZXJfZmlsZXM6CisgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1dy
YXBwZXJIZWFkZXJHZW5lcmF0b3IobW9kZWwpKQorICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQnVpbHRpbnNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwpKQorCisgICAg
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJH
ZW5lcmF0b3IobW9kZWwpKQorICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNJ
bnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwpKQorCiAgICAgbG9n
LmRlYnVnKCIiKQogICAgIGxvZy5kZWJ1ZygiR2VuZXJhdGluZyBiaW5kaW5ncyBmb3IgYnVpbHRp
bnMuIikKIApAQCAtMTE0LDYgKzEyMiw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAg
ICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9ImNob2ljZSIsIGNo
b2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IkRlc3RpbmF0aW9uIGZyYW1ld29y
ayBmb3IgZ2VuZXJhdGVkIGZpbGVzLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZv
cmNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRm9yY2Ugb3V0cHV0IG9mIGdlbmVyYXRl
ZCBzY3JpcHRzLCBldmVuIGlmIG5vdGhpbmcgY2hhbmdlZC4iKQogICAgIGNsaV9wYXJzZXIuYWRk
X29wdGlvbigiLS1jb21iaW5lZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByb2R1Y2Ug
b25lIC5oLy5jcHAgZmlsZSBpbnN0ZWFkIG9mIHByb2R1Y2luZyBvbmUgcGVyIGJ1aWx0aW4gb2Jq
ZWN0LiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXdpdGgtd3JhcHBlci1maWxlcyIs
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByb2R1Y2UgLmgvLmNwcCB3cmFwcGVyIGZpbGVz
IHRvIGVhc2UgaW50ZWdyYXRpb24gb2YgdGhlIGJ1aWx0aW5zLiIpCiAgICAgY2xpX3BhcnNlci5h
ZGRfb3B0aW9uKCItdiIsICItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9n
IGV4dHJhIG91dHB1dCBmb3IgZGVidWdnaW5nIHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIpCiAgICAg
Y2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUi
LCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiIpCiAKQEAgLTEzOCw2ICsxNDcsNyBAQCBpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAnb3V0cHV0X3BhdGgnOiBhcmdfb3B0aW9ucy5v
dXRwdXRfZGlyZWN0b3J5LAogICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5m
cmFtZXdvcmssCiAgICAgICAgICdjb21iaW5lZF9vdXRwdXQnOiBhcmdfb3B0aW9ucy5jb21iaW5l
ZCwKKyAgICAgICAgJ2dlbmVyYXRlX3dyYXBwZXJfZmlsZXMnOiBhcmdfb3B0aW9ucy53aXRoX3dy
YXBwZXJfZmlsZXMsCiAgICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZSwK
ICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFyZ19vcHRpb25zLnRlc3QsCiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMv
ZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1bHQK
aW5kZXggODYyYWJjZDhmZTQzMmQ0MDhmZmU2MDY2YTk1MDYwMzc0Y2NhN2IxZi4uNGQ5ZjBiZWI0
NjIxM2I4MjZlNWI1MDZmNjAyOTdhMGI4MjM3NWVhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFy
eUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0CkBAIC0xOTMsMyArMTkzLDIxMyBA
QCBXRUJDT1JFX0ZPUkVBQ0hfQVJCSVRSQVJZQ09ORElUSU9OQUxHVUFSRF9CVUlMVElOX0NPREUo
REVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkg
fHwgVVNFKENGKQogCiAjIyMgRW5kIEZpbGU6IEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWls
dGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3Vh
cmRCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2KQorICAgICAgICA6IG1fdm0odikKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICAgICAgLCBtX2FyYml0cmFyeUNvbmRp
dGlvbmFsR3VhcmRCdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
IHx8IFVTRShDRikKKyAgICB7CisgICAgfQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBV
U0UoQ0YpCisgICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zV3JhcHBlciYgYXJi
aXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCkgeyByZXR1cm4gbV9hcmJpdHJhcnlDb25k
aXRpb25hbEd1YXJkQnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8
IFVTRShDRikKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkgfHwgVVNFKENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlu
c1dyYXBwZXIgbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7CisjZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlw
dCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJBcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3BwIgorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMu
aAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0
aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRl
LWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8cnVudGltZS9WTS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitj
bGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisgICAgdm9pZCB2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0
Jik7CisKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
IAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2
KQorICAgIDogbV92bSh2KQoreworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25z
Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKK30KK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU1ZNQ2xpZW50RGF0YSYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0
YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9i
YWxzW10gPSB7CisgICAgfTsKKyAgICBpZiAoc2l6ZW9mKHN0YXRpY0dsb2JhbHMpKQorICAgICAg
ICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJB
WV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0
ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlu
cy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRl
eCBlYWE2YjkxNDVkZGMwZGQzZTgyNjE3Zjk2MTgwYzEwZjY1NjJlYWYwLi44ZWM1MmZhNTUzNmJi
MDkxZjExM2ZhZTZhNjExNDM3NDI0NjQ5MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWls
dGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRl
LmpzLXJlc3VsdApAQCAtMTkzLDMgKzE5MywyMTMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURC
VUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRCdWlsdGluQnVpbHRp
bnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
IAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgi
CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluRnVu
Y3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgICAgIDogbV92bSh2KQorI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIHsKKyAgICB9CisKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIGd1YXJkZWRCdWlsdGlu
QnVpbHRpbnMoKSB7IHJldHVybiBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KKyNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIg
bV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVp
bHRpbnMuaAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKKworI2luY2x1ZGUgIkd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgorIyMjIEVuZCBG
aWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxl
cyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xv
YmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisg
ICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBpbml0aWFsaXplKEpT
RE9NR2xvYmFsT2JqZWN0Jik7CisKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVp
bHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJh
dGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0Lmgi
CisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9ucyhKU0M6OlZNJiB2KQorICAgIDogbV92bSh2KQoreworfQorCit2b2lkIEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKK30KK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlv
bnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBK
U1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KG1fdm0uY2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5
SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CisgICAgfTsKKyAgICBpZiAoc2l6ZW9mKHN0YXRpY0ds
b2JhbHMpKQorICAgICAgICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0ds
b2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJB
TShjbGllbnREYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxl
OiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVk
SW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFs
QnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggMDI5NTgxN2VmZDYzM2RkYTk5OGY1NjM0
N2FlYzRjZjYzYTY1MjExMi4uNDI0YmI1M2ExYTJlNGRkZGNjN2I0MzRiODlhMWUzZGRjMjMyN2Q3
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRp
bnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9l
eHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0
CkBAIC0yMjUsMyArMjI1LDIzOSBAQCBXRUJDT1JFX0ZPUkVBQ0hfR1VBUkRFRElOVEVSTkFMQlVJ
TFRJTl9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiBHdWFyZGVkSW50ZXJuYWxCdWlsdGlu
QnVpbHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHdWFyZGVkSW50ZXJuYWxCdWls
dGluQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdikKKyAgICAgICAgOiBtX3ZtKHYpCisjaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1
aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB7CisjaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWls
dGlucy5leHBvcnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9
CisKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1
aWx0aW5zV3JhcHBlciYgZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4g
bV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNU19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX2d1
YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1
aWx0aW5zLnB5CisKKyNpbmNsdWRlICJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3Bw
IgorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2
YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xv
YmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisg
ICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBpbml0aWFsaXplKEpT
RE9NR2xvYmFsT2JqZWN0Jik7CisKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4o
KSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47IH0KKyNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNU19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMg
bV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8v
IGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnMoSlNDOjpWTSYgdikKKyAgICA6IG1fdm0odikKKyNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4obV92bSkKKyNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpCit7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisjaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi52aXNpdCh2aXNpdG9yKTsKKyNlbmRp
ZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworfQor
dm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX2d1
YXJkZWRJbnRlcm5hbEJ1aWx0aW4uaW5pdChnbG9iYWxPYmplY3QpOworI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxP
YmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CisjaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCisgICAg
SlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhcCisgICAgICAgIGNsaWVudERh
dGEuYnVpbHRpbkZ1bmN0aW9ucygpLmd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygpLm5h
bWUjI1ByaXZhdGVOYW1lKCksIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKS5tXyMjbmFtZSMjRnVu
Y3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAgICBXRUJD
T1JFX0ZPUkVBQ0hfR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUo
REVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9OworICAgIGlmIChzaXplb2Yoc3RhdGlj
R2xvYmFscykpCisgICAgICAgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGlj
R2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VEX1BB
UkFNKGNsaWVudERhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZp
bGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3Vh
cmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNl
cGFyYXRlLmpzLXJlc3VsdAppbmRleCA2YTkzZWZlMTc1OWI5ODNlNmIyZDFiYTU5YzFiNTE4M2Q0
MDMzZTYwLi5iODBkZDMxOWViMzZiMGE5NGYwYzAzYWY1YjZmM2M3OTg0MzVlZjQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUt
VW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE4NCwzICsxODQsMjA3IEBA
IFdFQkNPUkVfRk9SRUFDSF9VTkdVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJ
TFRJTl9HRU5FUkFUT1IpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICMjIyBFbmQgRmlsZTog
VW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IK
Ky8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVW5n
dWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCisgICAgICAgIDogbV92
bSh2KQorICAgICAgICAsIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQorICAgIHsK
KyAgICB9CisKKyAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiB1bmd1YXJkZWRC
dWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQor
Citwcml2YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07CisgICAgVW5ndWFyZGVkQnVpbHRpbkJ1aWx0
aW5zV3JhcHBlciBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1
IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBK
YXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUg
IlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRp
bnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CisKK2Ns
YXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7CisKKyAgICB2b2lkIHZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3Qm
KTsKKworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisj
IyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICog
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5oIgorCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYp
CisgICAgOiBtX3ZtKHYpCit7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOworfQordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTVk1DbGllbnREYXRhJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRh
KTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2Jh
bHNbXSA9IHsKKyAgICB9OworICAgIGlmIChzaXplb2Yoc3RhdGljR2xvYmFscykpCisgICAgICAg
ICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZ
X0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUu
anMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMv
ZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCBj
ODljY2JkOTAzMzU2NWIzNGU4NzFkMGMyYmM1MzBhMzhlZjY2M2QwLi5jYjBjNGY0NzQ0NGYyOGVi
MzU2ZWI2NGU0OTI5ZTQ2ZGZmYzExOTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3Qt
U2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1y
ZXN1bHQKQEAgLTI3NiwzICsyNzYsMjM5IEBAIFdFQkNPUkVfRk9SRUFDSF9YTUxDQVNJTkdURVNU
X0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxF
KFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IHhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0
aW5GdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhK
U0M6OlZNJiB2KQorICAgICAgICA6IG1fdm0odikKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgICAgICwgbV94bWxDYXNpbmdUZXN0QnVpbHRpbnMoJm1fdm0pCisjZW5kaWYgLy8gRU5BQkxF
KFNUUkVBTVNfQVBJKQorICAgIHsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgIG1f
eG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmV4cG9ydE5hbWVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgIH0KKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNp
bmdUZXN0QnVpbHRpbnNXcmFwcGVyJiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMoKSB7IHJldHVybiBt
X3htbENhc2luZ1Rlc3RCdWlsdGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
KworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
KyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbnNXcmFwcGVyIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5z
OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorCisjIyMgQmVnaW4gRmls
ZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2Ny
aXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgInhtbENh
c2luZ1Rlc3RCdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMu
aCIKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSlNET01HbG9iYWxPYmplY3Q7CisKK2NsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25z
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6
OlZNJik7CisKKyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGlu
aXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
KyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0
dXJuIG1feG1sQ2FzaW5nVGVzdDsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKwor
cHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAg
ICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rlc3Q7CisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMj
IEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1
IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBK
YXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2lu
Y2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQorICAgIDogbV92bSh2
KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK3sKK30KKwordm9pZCBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOwor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7
Cit9Cit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAg
IG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKKyAgICBKU0RPTUdsb2JhbE9iamVj
dDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKKyNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCisjZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVwKKyAgICBKU0RP
TUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFwKKyAgICAgICAgY2xpZW50RGF0YS5i
dWlsdGluRnVuY3Rpb25zKCkueG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5h
bWUoKSwgeG1sQ2FzaW5nVGVzdCgpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9u
dERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9SRUFDSF9YTUxDQVNJTkdU
RVNUX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAg
IH07CisgICAgaWYgKHNpemVvZihzdGF0aWNHbG9iYWxzKSkKKyAgICAgICAgICBnbG9iYWxPYmpl
Y3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRp
Y0dsb2JhbHMpKTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGU1NDU2ODIyYjA3MjE0MDI0NjU2ZjJkYTQ2NjZm
M2MyNDQ3MGQ5Ni4uODZjNmRkNDQyMjg0OWU4MzFhM2ZiOTYyMWFkM2IzZWMzNWFiZTM4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyNDAsOCArMTI0MCw2IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCiAgICAgYmluZGluZ3Mv
anMvU2NyaXB0U3RhdGUuY3BwCiAgICAgYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAotICAgIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0gICAg
YmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwCiAgICAgYmluZGluZ3MvanMvV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAogICAgIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCiAKQEAgLTM3MzcsMjUgKzM3MzUsMzEgQEAgc2V0KEJVSUxUSU5TX0dFTkVS
QVRPUl9TQ1JJUFRTCiAgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNf
Z2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50YXRpb24ucHkKICAgICAke0phdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkKICAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9p
bXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0
aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJ
UFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQorICAg
ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFs
c193cmFwcGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1
aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CiAgICAg
JHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKICAg
ICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9sYXp5d3JpdGVyLnB5CiApCiAKIGZvcmVh
Y2ggKF9idWlsdGluU291cmNlICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRf
ZmlsZW5hbWVfY29tcG9uZW50KF9vYmplY3ROYW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0Up
Ci0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuY3BwCi0gICAgICAgICAgICAg
ICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5o
Ci0gICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19idWlsdGluU291cmNlfQotICAgICAgICBERVBF
TkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9Ci0gICAgICAgIENPTU1BTkQgJHtQWVRI
T05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9ICR7X2J1aWx0aW5Tb3VyY2V9Ci0gICAgICAgIFZFUkJB
VElNKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTCi0gICAgICAgICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmgKLSAg
ICApCi0gICAgQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09S
RV9ESVJ9L2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcCAke19vYmplY3ROYW1lfUJ1
aWx0aW5zLmNwcCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQor
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcCkKIGVuZGZvcmVhY2gg
KCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2ViQ29y
ZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfR0VORVJBVEVEX0JV
SUxUSU5TICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcCkKKworYWRkX2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke1dlYkNvcmVf
R0VORVJBVEVEX0JVSUxUSU5TfQorICAgIE1BSU5fREVQRU5ERU5DWSAke1dlYkNvcmVfQlVJTFRJ
TlNfU09VUkNFU30KKyAgICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9Cisg
ICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNf
RElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAtLXdpdGgtd3JhcHBlci1maWxlcyAtLWZyYW1l
d29yayBXZWJDb3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0gJHtXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CisgICAgVkVSQkFUSU0pCiAKK2xpc3Qo
QVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJ
TlN9KQogCiBBRERfU09VUkNFX1dFQkNPUkVfREVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JF
X0RJUn0vaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwIE1hdGhNTE5hbWVzLmNwcCkKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZjEzM2QxMzI1ODJiMDkzMzRlNDcxZWI4ZTZkOTZi
NjE4Y2Q3NTE2ZC4uNWIxMTgxNzMyZjIwNGY3NTQ1NmE2ZWYwZDhlZGFhMzg1YTVkZWQ2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMzExLDIxICsxMzExLDI2IEBAIEJVSUxU
SU5TX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVIpL2J1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5IFwKICAgICAk
KEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9o
ZWFkZXIucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5zX2dl
bmVyYXRlX3NlcGFyYXRlX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEphdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSKS9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkgXAorICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5zX2dlbmVyYXRl
X2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEphdmFTY3JpcHRD
b3JlX1NDUklQVFNfRElSKS9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weSBcCisg
ICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVIpL2xhenl3cml0ZXIucHkgXAogIwogCiAjIEFkZGluZy9yZW1vdmluZyBzY3JpcHRzIHNob3Vs
ZCB0cmlnZ2VyIHJlZ2VuZXJhdGlvbiwgYnV0IGNoYW5naW5nIHdoaWNoIGJ1aWx0aW5zIGFyZQog
IyBnZW5lcmF0ZWQgc2hvdWxkIG5vdCBhZmZlY3Qgb3RoZXIgYnVpbHRpbnMgd2hlbiBub3QgcGFz
c2luZyAnLS1jb21iaW5lZCcgdG8gdGhlIGdlbmVyYXRvci4KKyMgV2ViQ29yZV9CVUlMVElOU19T
T1VSQ0VfTElTVCA9ICQoc2hlbGwgZWNobyAkKFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFUykgfCBw
ZXJsIC1lICdwcmludCAiICIgLiBqb2luKCIgLUkiLCBzcGxpdCgiICIsIDw+KSk7JykKIAogLlBI
T05ZOiBmb3JjZQogV2ViQ29yZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVCA6ICQoSmF2YVNj
cmlwdENvcmVfU0NSSVBUU19ESVIpL1VwZGF0ZUNvbnRlbnRzLnB5IGZvcmNlCiAJJChQWVRIT04p
ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL1VwZGF0ZUNvbnRlbnRzLnB5ICckKEJVSUxU
SU5TX0dFTkVSQVRPUl9TQ1JJUFRTKScgJEAKIAotJUJ1aWx0aW5zLmg6ICUuanMgJChCVUlMVElO
U19HRU5FUkFUT1JfU0NSSVBUUykgV2ViQ29yZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVAot
CSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1qcy1idWls
dGlucy5weSAtLW91dHB1dC1kaXJlY3RvcnkgLiAtLWZyYW1ld29yayBXZWJDb3JlICQ8CisJJChQ
WVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWpzLWJ1aWx0aW5z
LnB5IC0td2l0aC13cmFwcGVyLWZpbGVzIC0tb3V0cHV0LWRpcmVjdG9yeSAuIC0tZnJhbWV3b3Jr
IFdlYkNvcmUgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpCiAKLWFsbCA6ICQobm90ZGlyICQo
V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTOiUuanM9JUJ1aWx0aW5zLmgpKQorCithbGwgOiBXZWJD
b3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19MSVNUCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBiMjkyN2YwMGY4NmJkZjg4YWFmYjM0ZmM4Mzg3ZmY5YTBhMGU2YzkxLi41NmU4
MmFjMmFiMGVlYWNhNjM2Y2E2YWEwMTVhNWVhNDRhYWJhYWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTYxLDcgKzE1NjEs
NiBAQAogCQk0MEVDQUU3RTE2QjhCNjcyMDBDMzYxMDMgLyogSlNET01FcnJvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDBFQ0FFN0QxNkI4QjY3MjAw
QzM2MTAzIC8qIEpTRE9NRXJyb3IuaCAqLzsgfTsKIAkJNDBFQ0FFODExNkI4QjY4QTAwQzM2MTAz
IC8qIEpTRE9NRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDBFQ0FFODAxNkI4QjY4QTAwQzM2MTAzIC8qIEpTRE9NRXJyb3IuY3BwICovOyB9
OwogCQk0MTBCN0U3MjEwNDVGQUIwMDBEODIyNEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwQjdFNzEx
MDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDEw
RDMzMjQxQzE5OTg1MDAwRjdGREUyIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwRDMzMjMxQzE5
OTg0MTAwRjdGREUyIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICovOyB9OwogCQk0
MTIzMDgxQjEzOEM0Mjk3MDBCQ0NGQ0EgLyogV2ViQ29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxOUIxQTA4MjQ1RTVBMDAx
RTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTQxMjMwOTEzMTM4QzQyRkYwMEJD
Q0ZDQSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2
YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk0MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUg
LyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLzsg
fTsKQEAgLTE2MTIsOSArMTYxMSw2IEBACiAJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBK
U0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MThGODgwMzBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oICov
OyB9OwogCQk0MTlCQzJERTE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTlCQzJEQzE2
ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtTdGF0ZS5jcHAgKi87IH07CiAJCTQxOUJDMkRG
MTY4NTMyOTkwMEQ2NEQ2RCAvKiBWaXNpdGVkTGlua1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTlCQzJERDE2ODUzMjk5MDBENjRENkQgLyog
VmlzaXRlZExpbmtTdGF0ZS5oICovOyB9OwotCQk0MTlCRTc1NjFCQzdGNDFCMDBFMUM4NUIgLyog
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE5QkU3NTMxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk0MTlCRTc1NzFCQzdGNDIxMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkU3
NTQxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAqLzsgfTsKLQkJNDE5
QkU3NTgxQkM3RjQyNzAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTlCRTc1NTFCQzdGM0RCMDBFMUM4
NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCAqLzsgfTsKIAkJNDE5QkU3NTkxQkM3RjQyQjAwRTFD
ODVCIC8qIFdlYkNvcmVCdWlsdGluTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxOUJFNzUyMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlQnVp
bHRpbk5hbWVzLmggKi87IH07CiAJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0
ZWRXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFBM0Q1OEMxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVh
ZC5jcHAgKi87IH07CiAJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3Jr
ZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCAqLzsg
fTsKQEAgLTU1NDUsNyArNTU0MSwxMSBAQAogCQlCQzMzRkIxQjBGMzBFRTg1MDAyQ0REN0MgLyog
UmVuZGVyTGluZUJveExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0
LmNwcCAqLzsgfTsKIAkJQkMzNDhCQkUwREI3RjUzMTAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMzNDhCQkQwREI3RjUzMTAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
ICovOyB9OwogCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJE
MTBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgKi87IH07CisJCUJDMzQ4
QkQzMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJEMTBEQjdGODA0MDA0QUJB
QkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwICovOyB9OworCQlCQzM0OEJEMzBEQjdGODA0MDA0
QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJEMTBEQjdGODA0MDA0QUJBQkIgLyog
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgKi87IH07CiAJCUJDMzQ4QkQ0MERCN0Y4MDQw
MDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJEMjBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRw
UmVxdWVzdC5oICovOyB9OworCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpT
QnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5oICovOyB9Owor
CQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCRDIw
REI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzNCQzI5QzBFOTFBQjBG
MDA4MzU1ODggLyogSG9zdFdpbmRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMzQkMyOUIwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzNCRTEy
QjBFOTgwOTJGMDA4MzU1ODggLyogUG9wdXBNZW51U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDM0JFMTJBMEU5ODA5MkYwMDgzNTU4OCAvKiBQ
b3B1cE1lbnVTdHlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUJDM0JFOTkzMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzQkU5OTAw
RTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi87IH07CkBAIC05MTI5LDcg
KzkxMjksNiBAQAogCQk0MEVDQUU3RDE2QjhCNjcyMDBDMzYxMDMgLyogSlNET01FcnJvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUVycm9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQwRUNBRTgwMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRXJyb3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBCN0U3MTEwNDVGQUIwMDBEODIyNEYg
LyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0MTBEMzMyMzFDMTk5ODQxMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExODlF
RjcxQUQ4MjMyODAwQjkwQTBEIC8qIFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gUmVhZGFibGVTdHJlYW1Db250cm9sbGVyLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdFN0YXRl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEyOURGODMxQkI1QjdGNzAwMzIy
QTE2IC8qIEpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3Ry
dWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkxOTMsOSArOTE5Miw2
IEBACiAJCTQxOUJDMkRDMTY4NTMyOTkwMEQ2NEQ2RCAvKiBWaXNpdGVkTGlua1N0YXRlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpc2l0ZWRMaW5rU3RhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTlCQzJERDE2ODUzMjk5MDBENjRENkQg
LyogVmlzaXRlZExpbmtTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aXNpdGVkTGlua1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOUJFNzUy
MUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlQnVpbHRpbk5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVCdWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDE5QkU3NTMxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTlCRTc1
NDFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZUpTQnVpbHRpbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0MTlCRTc1NTFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpT
QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUpTQnVp
bHRpbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE5QkU3NUExQkNCRDNFRDAw
RTFDODVCIC8qIE5hdmlnYXRvclVzZXJNZWRpYS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IE5hdmlnYXRvclVzZXJNZWRpYS5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDE5RkFGQUQxQUJBQkNENTAwNUI4MjhCIC8qIFJlYWRhYmxlU3RyZWFtUmVh
ZGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZWFkYWJsZVN0cmVhbVJlYWRlci5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQTAyM0VEMUEzOURCNzkwMEY3MjJDRiAv
KiBSZWFkYWJsZVN0cmVhbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVhZGFibGVTdHJl
YW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM1NTEsNyArMTM1NDcsMTEg
QEAKIAkJQkMzNDhCQTcwREI3RjFCODAwNEFCQUI5IC8qIFhNTEh0dHBSZXF1ZXN0LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBYTUxIdHRwUmVxdWVzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMzQ4QkJEMERCN0Y1MzEwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWE1MSHR0
cFJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzM0OEJE
MTBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1
aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVK
U0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMzNDhCRDEwREI3
RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCOSAv
KiBKU1hNTEh0dHBSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
WE1MSHR0cFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMzNDhCRDIw
REI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQiAvKiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzQkMyOUIwRTkx
QUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSG9zdFdpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzNCRTEy
QTBFOTgwOTJGMDA4MzU1ODggLyogUG9wdXBNZW51U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUG9wdXBNZW51U3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMzQkU5OTAwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTY3JvbGxiYXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxNDQsNiArMTYxNDQsMTAgQEAKIAkJMTRE
RkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERlcml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkMzNDhCRDEwREI3RjgwNDAwNEFCQUJB
IC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAqLywKKwkJCQlCQzM0OEJEMTBEQjdGODA0MDA0QUJB
QkIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgKi8sCisJCQkJQkMzNDhCRDIwREI3
RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggKi8sCisJCQkJQkMzNDhCRDIwREI3
RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCAqLywKIAkJCQkxMjIx
RTA1ODFDMDJCNDA5MDA2QTFBMDAgLyogQW5pbWF0aW9uICovLAogCQkJCTFBRTk2QTc5MUQxQTBB
NUMwMEI4Njc2OCAvKiBBcHBsZVBheSAqLywKIAkJCQlBODNCNzkxMDBDQ0IwMDFCMDAwQjA4MjUg
LyogQ29yZSAqLywKQEAgLTIyNjA5LDEwICsyMjYxMyw2IEBACiAJCQkJQTc1RTQ5NzUxMDc1MkFD
QjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJQTc1RTQ5NzQx
MDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oICovLAogCQkJCTQxOUJF
NzUyMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlQnVpbHRpbk5hbWVzLmggKi8sCi0JCQkJNDEw
RDMzMjMxQzE5OTg0MTAwRjdGREUyIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICov
LAotCQkJCTQxOUJFNzUzMUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmggKi8sCi0JCQkJNDE5QkU3NTQxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0
aW5zLmNwcCAqLywKLQkJCQk0MTlCRTc1NTFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVp
bHRpbnMuaCAqLywKIAkJCQlCQzUzRDkxMDExNDMxMENDMDAwRDgxN0UgLyogV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oICovLAogCQkJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAogCQkJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAv
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKQEAgLTI3MzU5LDYgKzI3MzU5LDgg
QEAKIAkJCQk3QzRDOTZERDFBRDQ0ODM1MDAzNjVBNjAgLyogSlNXcml0YWJsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODM1OENCNzAxQzUzMjc3NTAwRTBDMkQ4IC8qIEpTWE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzQ4QkQ0MERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hN
TEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzM0OEJENDBEQjdGODA0MDA0QUJB
QkEgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDMzQ4QkQ0MERC
N0Y4MDQwMDRBQkFCQiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4M0QzNUFGMjFDNzE4RDkwMDBGNzBENUEgLyogSlNYTUxIdHRwUmVxdWVzdEV2ZW50
VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGOTE2QzQ4RTBEQjUxMEY4MDA3NkNEODMgLyog
SlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZE
NDk2MEUzMDU5MkYwMDlEMTBBRCAvKiBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI4ODM1LDggKzI4ODM3LDYgQEAKIAkJCQlDREM2OUREQTE2MzcxRkQ0MDA3QzM4
REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNEQzY5REQ2MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDEyN0RFRTE0RjMwOTg0MDBFODQ3NzkgLyogV2Vi
Q29yZUZ1bGxTY3JlZW5XaW5kb3cuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxOUJFNzU2MUJDN0Y0
MUIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk0MTlCRTc1ODFCQzdGNDI3MDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNTNEOTExMTE0MzEwQ0MwMDBEODE3RSAvKiBXZWJDb3JlSlNDbGll
bnREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCQjA4MjQ1RTU5MDAxRTlBQkMgLyog
V2ViQ29yZUtleWJvYXJkVUlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTQwMzc5QjEyNEJF
QTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MzExOTEsNiArMzExOTEsOCBAQAogCQkJCTgzNThDQjZGMUM1MzI3NzIwMEUwQzJEOCAvKiBKU1hN
TERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzQTRBOUY5MUNFN0ZEODEwMDcwOUIw
MCAvKiBKU1hNTERvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzQ4QkQz
MERCN0Y4MDQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUJDMzQ4QkQzMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzM0OEJCRTBEQjdGNTMxMDA0
QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
M0QzNUFGMTFDNzE4RDkwMDBGNzBENUEgLyogSlNYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUY5MTZDNDhEMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyMzYxLDggKzMy
MzYzLDYgQEAKIAkJCQlDREM2OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3Jl
ZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREM2OURENzE2MzIwMjZD
MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUNEMTI3REVEMTRGMzA5N0QwMEU4NDc3OSAvKiBXZWJDb3JlRnVsbFNjcmVlbldpbmRv
dy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTQxMEQzMzI0MUMxOTk4NTAwMEY3RkRFMiAvKiBXZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxOUJFNzU3MUJD
N0Y0MjEwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTQwMzc5QzEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQlDREM5NzlGNDFDNDk4QzA5MDBEQjUwRDQgLyogV2ViQ29yZU5TRXJy
b3JFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzREOUJBNTBCOEMxMTZCMDA3QjQyQTkg
LyogV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKaW5kZXggOGRhODMyNGU2
NmVmY2VmNzczZWRlOGZlMzc3YmE2NmYwZjZmNzBlYS4uZmI1Njc0MDlkNjA4M2EyNjFmYTM5ZGU4
YmMzZThmZGUzZDRjZWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpTRE9NR2xvYmFsT2Jq
ZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6YWRk
QnVpbHRpbkdsb2JhbHMoVk0mIHZtKQogewotICAgIG1fYnVpbHRpbkludGVybmFsRnVuY3Rpb25z
LmluaXRpYWxpemUoKnRoaXMsIHZtKTsKKyAgICBtX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy5p
bml0aWFsaXplKCp0aGlzKTsKIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKICAgICBKU09iamVj
dCogcHJpdmF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckNvbnN0cnVjdG9yID0gY3JlYXRlUmVh
ZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0ZUNvbnN0cnVjdG9yKHZtLCAqdGhpcyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAppbmRleCA0ZGEw
ZGE5MGU4OWYxZDMxOTZlZWQ5MWJlNDcxZTc2M2QzYjQ3YTNhLi4yMDg2MDQxYjQ0NTRhNjhmOTZk
MjlhMjZiMDFlNzE5ZmJmYjI4YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmgKQEAgLTkyLDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBhZGRCdWlsdGluR2xvYmFscyhKU0M6OlZN
Jik7Ci0gICAgICAgIGZyaWVuZCB2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0
aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpWTSYpOworICAgICAgICBmcmllbmQgdm9p
ZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVj
dCYpOwogCiAgICAgICAgIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIG1fYnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhZGMzNWE3ZDg3NjcyZWIxNzE4YTUzZmZiMzM0ODg5NGM5YjU5YmIxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogIGFyZSBtZXQ6Ci0gKiAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENB
Tk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiAgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAq
ICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotICogIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgotI2luY2x1ZGUgIkpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmgiCi0j
aW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlND
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2KQotICAgIDogdm0odikKLSNpZiBF
TkFCTEUoV0VCX1JUQykKLSAgICAsIG1fcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlv
bnModm0pCi0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgLCBtX3JlYWRhYmxl
U3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQotICAgICwgbV9zdHJlYW1JbnRlcm5hbHNGdW5j
dGlvbnModm0pCi0gICAgLCBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQot
I2VuZGlmCi17Ci0jaWYgIUVOQUJMRShTVFJFQU1TX0FQSSkgJiYgIUVOQUJMRShXRUJfUlRDKQot
ICAgIC8vIEZJWE1FOiBXaGVuIG5vbmUgb2YgdGhlIGZlYXR1cmVzIHRoYXQgdXNlIHRoaXMgY2xh
c3MgYXJlIGVuYWJsZWQsIHdlCi0gICAgLy8gZG9uJ3QgZXZlciB1c2UgdGhlIHZtIG1lbWJlci4g
SG93ZXZlciwgdGhlIGxvZ2ljIG9mIGluaXRpYWxpemluZwotICAgIC8vIGl0IHdoZW4gYW55IG9m
IHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBnZXRzIHByZXR0eSBtZXNzeS4KLSAgICAodm9pZCl2
bTsKLSNlbmRpZgotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgIG1f
cnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFs
c0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKLSAgICBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9u
cy52aXNpdCh2aXNpdG9yKTsKLSAgICBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25z
LnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmCi0jaWYgIUVOQUJMRShTVFJFQU1TX0FQSSkgJiYgIUVO
QUJMRShXRUJfUlRDKQotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLSNlbmRpZgotfQotCi12
b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFZNJiB2bSkKLXsKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBt
X3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsK
LSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBtX3JlYWRhYmxlU3RyZWFtSW50
ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFsT2JqZWN0KTsKLSAgICBtX3N0cmVhbUludGVybmFs
c0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7Ci0gICAgbV93cml0YWJsZVN0cmVhbUludGVy
bmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkgfHwgRU5BQkxFKFdFQl9SVEMpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLQot
ICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1td
ID0gewotI2lmIEVOQUJMRShXRUJfUlRDKQotI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMo
bmFtZSlcCi0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oXAot
ICAgICAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkucnRjUGVlckNvbm5lY3Rp
b25JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHJ0Y1BlZXJDb25uZWN0
aW9uSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1JUQ1BFRVJDT05ORUNUSU9OSU5URVJO
QUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0j
ZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVwKLSAgICAgICAgSlNET01HbG9iYWxP
YmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhcCi0gICAgICAgICAgICBjbGllbnREYXRhLmJ1aWx0
aW5GdW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkubmFtZSMjUHJp
dmF0ZU5hbWUoKSwgcmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVuY3Rpb24u
Z2V0KCkgLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBXRUJDT1JFX0ZPUkVBQ0hf
UkVBREFCTEVTVFJFQU1JTlRFUk5BTFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xP
QkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNkZWZpbmUgREVDTEFS
RV9HTE9CQUxfU1RBVElDKG5hbWUpXAotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFs
UHJvcGVydHlJbmZvKFwKLSAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygp
LnN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgc3RyZWFtSW50
ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KSwKLSAgICAgICAgV0VCQ09SRV9GT1JFQUNIX1NUUkVBTUlOVEVSTkFMU19CVUlMVElOX0ZVTkNU
SU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NU
QVRJQwotI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlcCi0gICAgICAgIEpTRE9N
R2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oXAotICAgICAgICAgICAgY2xpZW50RGF0
YS5idWlsdGluRnVuY3Rpb25zKCkud3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5h
bWUjI1ByaXZhdGVOYW1lKCksIHdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1
bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgV0VCQ09SRV9G
T1JFQUNIX1dSSVRBQkxFU1RSRUFNSU5URVJOQUxTX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNM
QVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5kaWYK
LSAgICB9OwotCi0gICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFs
cywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7Ci0jZW5kaWYKLSNpZiAhRU5BQkxF
KFNUUkVBTVNfQVBJKSAmJiAhRU5BQkxFKFdFQl9SVEMpCi0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSNlbmRpZgotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMWZlMWU1MTk0MGEwMTRiYTFhNzAy
MWExNjBlZDczZDc3NzY3YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTUsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiAgYXJlIG1ldDoKLSAqICAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiAgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgotICogIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqICBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqICBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzX2gKLSNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbkludGVybmFs
c19oCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNp
bmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmgiCi0jZW5kaWYKLQot
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNpbmNs
dWRlICJXcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotLy8gRklYTUU6IE1h
a2UgYnVpbHRpbiBnZW5lcmF0b3IgZ2VuZXJhdGUgdGhpcyBjbGFzcwotY2xhc3MgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgIFJUQ1Bl
ZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBydGNQZWVyQ29ubmVjdGlvbklu
dGVybmFscygpIHsgcmV0dXJuIG1fcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNGdW5jdGlvbnM7
IH0KLSNlbmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBSZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgcmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKSB7IHJldHVy
biBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOyB9Ci0gICAgU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbkZ1bmN0aW9ucyBzdHJlYW1JbnRlcm5hbHMoKSB7IHJldHVybiBtX3N0cmVhbUlu
dGVybmFsc0Z1bmN0aW9uczsgfQotICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1
bmN0aW9ucyB3cml0YWJsZVN0cmVhbUludGVybmFscygpIHsgcmV0dXJuIG1fd3JpdGFibGVTdHJl
YW1JbnRlcm5hbHNGdW5jdGlvbnM7IH0KLSNlbmRpZgotCi0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpWTSYpOwotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIHZtOwotI2lmIEVOQUJMRShXRUJfUlRD
KQotICAgIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3J0Y1Bl
ZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zOwotI2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQotICAgIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3Jl
YWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwotICAgIFN0cmVhbUludGVybmFsc0J1aWx0
aW5GdW5jdGlvbnMgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7Ci0gICAgV3JpdGFibGVTdHJl
YW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5j
dGlvbnM7Ci0jZW5kaWYKLQotfTsKLQotfQotCi0jZW5kaWYgLy8gV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFsc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SlNCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWls
dGlucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MTI5MDM2MmFiMDNmZTAz
NWJiZjllOWM4YmViNGY0MDIxOGQ4ZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRp
bnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTUsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiAgYXJlIG1ldDoKLSAqICAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiAgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgotICogIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqICBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqICBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNw
cCIKLSNpbmNsdWRlICJDb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRl
ICJGZXRjaEhlYWRlcnNCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiRmV0Y2hSZXNwb25zZUJ1aWx0
aW5zLmNwcCIKLSNpbmNsdWRlICJNZWRpYURldmljZXNCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAi
TmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0
aW9uQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVp
bHRpbnMuY3BwIgotI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuY3BwIgotI2luY2x1
ZGUgIlJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSZWFk
YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVh
bVJlYWRlckJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5j
cHAiCi0jaW5jbHVkZSAiV3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiV3Jp
dGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGQxNzY2NDU2N2IwNThjOTBkMTk4NzBjZDI0YmFjMTEzZjViZmMyYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGlucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0gKiAg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENh
bm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqICBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV2ViQ29yZUpTQnVpbHRpbnNfaAotI2RlZmluZSBXZWJDb3JlSlNCdWls
dGluc19oCi0KLSNpbmNsdWRlICJCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCIK
LSNpbmNsdWRlICJDb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiRmV0
Y2hIZWFkZXJzQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJGZXRjaFJlc3BvbnNlQnVpbHRpbnMuaCIK
LSNpbmNsdWRlICJNZWRpYURldmljZXNCdWlsdGlucy5oIgotI2luY2x1ZGUgIk5hdmlnYXRvclVz
ZXJNZWRpYUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5o
IgotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCIKLSNpbmNs
dWRlICJSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1D
b250cm9sbGVyQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1
aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlucy5oIgotI2lu
Y2x1ZGUgIlN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiV3JpdGFibGVTdHJl
YW1CdWlsdGlucy5oIgotI2luY2x1ZGUgIldyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
aCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5G
dW5jdGlvbnMoSlNDOjpWTSYgdikKLSAgICAgICAgOiB2bSh2KQotI2lmIEVOQUJMRShGRVRDSF9B
UEkpCi0gICAgICAgICwgbV9mZXRjaEhlYWRlcnNCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9m
ZXRjaFJlc3BvbnNlQnVpbHRpbnMoJnZtKQotI2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgICAgICAsIG1fYnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zKCZ2bSkKLSAg
ICAgICAgLCBtX2NvdW50UXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1f
cmVhZGFibGVTdHJlYW1CdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9yZWFkYWJsZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9yZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX3JlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnMo
JnZtKQotICAgICAgICAsIG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoJnZtKQotICAgICAgICAs
IG1fd3JpdGFibGVTdHJlYW1CdWlsdGlucygmdm0pCi0gICAgICAgICwgbV93cml0YWJsZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zKCZ2bSkKLSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgICAgICwgbV9tZWRpYURldmljZXNCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9uYXZp
Z2F0b3JVc2VyTWVkaWFCdWlsdGlucygmdm0pCi0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX1JUQykK
LSAgICAgICAgLCBtX3J0Y1BlZXJDb25uZWN0aW9uQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1f
cnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucygmdm0pCi0jZW5kaWYKLSAgICB7Ci0j
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSAgICAgICAgbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5leHBvcnROYW1lcygpOwotICAgICAgICBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRp
bnMuZXhwb3J0TmFtZXMoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJfUlRDKQotICAgICAgICBt
X3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSNlbmRp
ZgotICAgIH0KLSNpZiBFTkFCTEUoRkVUQ0hfQVBJKQotICAgIEZldGNoSGVhZGVyc0J1aWx0aW5z
V3JhcHBlciYgZmV0Y2hIZWFkZXJzQnVpbHRpbnMoKSB7IHJldHVybiBtX2ZldGNoSGVhZGVyc0J1
aWx0aW5zOyB9Ci0gICAgRmV0Y2hSZXNwb25zZUJ1aWx0aW5zV3JhcHBlciYgZmV0Y2hSZXNwb25z
ZUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9mZXRjaFJlc3BvbnNlQnVpbHRpbnM7IH0KLSNlbmRpZgot
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVp
bHRpbnNXcmFwcGVyJiBieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMoKSB7IHJldHVy
biBtX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGluczsgfQotICAgIENvdW50UXVldWlu
Z1N0cmF0ZWd5QnVpbHRpbnNXcmFwcGVyJiBjb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zKCkg
eyByZXR1cm4gbV9jb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zOyB9Ci0gICAgUmVhZGFibGVT
dHJlYW1CdWlsdGluc1dyYXBwZXImIHJlYWRhYmxlU3RyZWFtQnVpbHRpbnMoKSB7IHJldHVybiBt
X3JlYWRhYmxlU3RyZWFtQnVpbHRpbnM7IH0KLSAgICBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJC
dWlsdGluc1dyYXBwZXImIHJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zKCkgeyByZXR1
cm4gbV9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGluczsgfQotICAgIFJlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyJiByZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0
aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zOyB9Ci0gICAg
UmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGluc1dyYXBwZXImIHJlYWRhYmxlU3RyZWFtUmVhZGVy
QnVpbHRpbnMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnM7IH0KLSAg
ICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXImIHN0cmVhbUludGVybmFsc0J1aWx0aW5z
KCkgeyByZXR1cm4gbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGluczsgfQotICAgIFdyaXRhYmxlU3Ry
ZWFtQnVpbHRpbnNXcmFwcGVyJiB3cml0YWJsZVN0cmVhbUJ1aWx0aW5zKCkgeyByZXR1cm4gbV93
cml0YWJsZVN0cmVhbUJ1aWx0aW5zOyB9Ci0gICAgV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGluc1dyYXBwZXImIHdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKSB7IHJldHVybiBt
X3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnM7fQotI2VuZGlmCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSAgICBNZWRpYURldmljZXNCdWlsdGluc1dyYXBwZXImIG1lZGlhRGV2aWNl
c0J1aWx0aW5zKCkgeyByZXR1cm4gbV9tZWRpYURldmljZXNCdWlsdGluczsgfQotICAgIE5hdmln
YXRvclVzZXJNZWRpYUJ1aWx0aW5zV3JhcHBlciYgbmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnMo
KSB7IHJldHVybiBtX25hdmlnYXRvclVzZXJNZWRpYUJ1aWx0aW5zO30KLSNlbmRpZgotI2lmIEVO
QUJMRShXRUJfUlRDKQotICAgIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnNXcmFwcGVyJiBydGNQ
ZWVyQ29ubmVjdGlvbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ydGNQZWVyQ29ubmVjdGlvbkJ1aWx0
aW5zOyB9Ci0gICAgUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXImIHJ0
Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMoKSB7IHJldHVybiBtX3J0Y1BlZXJDb25u
ZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnM7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEpTQzo6
Vk0mIHZtOwotI2lmIEVOQUJMRShGRVRDSF9BUEkpCi0gICAgRmV0Y2hIZWFkZXJzQnVpbHRpbnNX
cmFwcGVyIG1fZmV0Y2hIZWFkZXJzQnVpbHRpbnM7Ci0gICAgRmV0Y2hSZXNwb25zZUJ1aWx0aW5z
V3JhcHBlciBtX2ZldGNoUmVzcG9uc2VCdWlsdGluczsKLSNlbmRpZgotI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKLSAgICBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnNXcmFwcGVyIG1f
Ynl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zOwotICAgIENvdW50UXVldWluZ1N0cmF0
ZWd5QnVpbHRpbnNXcmFwcGVyIG1fY291bnRRdWV1aW5nU3RyYXRlZ3lCdWlsdGluczsKLSAgICBS
ZWFkYWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBlciBtX3JlYWRhYmxlU3RyZWFtQnVpbHRpbnM7Ci0g
ICAgUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnNXcmFwcGVyIG1fcmVhZGFibGVTdHJl
YW1Db250cm9sbGVyQnVpbHRpbnM7Ci0gICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
c1dyYXBwZXIgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zOwotICAgIFJlYWRhYmxl
U3RyZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVyIG1fcmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlu
czsKLSAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIgbV9zdHJlYW1JbnRlcm5hbHNC
dWlsdGluczsKLSAgICBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBlciBtX3dyaXRhYmxlU3Ry
ZWFtQnVpbHRpbnM7Ci0gICAgV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIg
bV93cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zOwotI2VuZGlmCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSAgICBNZWRpYURldmljZXNCdWlsdGluc1dyYXBwZXIgbV9tZWRpYURldmlj
ZXNCdWlsdGluczsKLSAgICBOYXZpZ2F0b3JVc2VyTWVkaWFCdWlsdGluc1dyYXBwZXIgbV9uYXZp
Z2F0b3JVc2VyTWVkaWFCdWlsdGluczsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJfUlRDKQotICAg
IFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnNXcmFwcGVyIG1fcnRjUGVlckNvbm5lY3Rpb25CdWls
dGluczsKLSAgICBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zV3JhcHBlciBtX3J0
Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnM7Ci0jZW5kaWYKLQotfTsKLQotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBjODkxMzExNDBkMWFjMWM0ODBlMmY4YmU3Y2RjYWRkYmNkNzIxYTM5Li40YzMyMGYwZmNiZmRk
NzViNmJhYmQxMWYxMzc0ZDVhOWQ0ODQyYjAwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDctMDYgIFlvdWVu
biBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEdlbmVyYXRlIFdlYkNvcmUg
YnVpbHRpbiB3cmFwcGVyIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTk0NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5OgorICAgICAg
ICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKTogQWRk
aW5nIGdlbmVyYXRlX3dyYXBwZXIgb3B0aW9uLgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JU
ZXN0cy5ydW5fdGVzdHMpOiBVc2luZyB0aGlzIG9wdGlvbiBpbiBXZWJDb3JlIHRlc3QgY2FzZXMu
CisKIDIwMTYtMDctMDYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgRW1haWwgZnJvbSBKdW5lIDFzdCBjb250YWluaW5nIHRleHQgJ1RvZGF5IEAgNzox
MFBNJyBpcyBsaW5raWZpZWQsIGJ1dCBzaG91bGRuJ3QgYmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b2RlZ2VuL21haW4ucHkKaW5kZXggMDAzOTZkYjlhMzhiZTBmMDdiZTE4NjNiODhhZWQ0MWVkZjk3
ZDk2OS4uMTQzYmYxNmViZjU1YjlmZDExYjYzMjU5OGEyODMyZTgyZDIwY2ZmMiAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBv
cwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKLWltcG9ydCBzeXMKIGltcG9ydCB0ZW1w
ZmlsZQogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLmRldGVjdGlvbiBpbXBvcnQg
ZGV0ZWN0X3NjbV9zeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IFNjcmlwdEVycm9yCkBAIC0zOCw3ICszNyw3IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJh
dG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKICAg
ICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKIAotICAgIGRlZiBnZW5lcmF0ZV9mcm9t
X2pzX2J1aWx0aW5zKHNlbGYsIGJ1aWx0aW5zX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnksIGZyYW1l
d29ya19uYW1lPSIiLCBjb21iaW5lZF9vdXRwdXRzPUZhbHNlKToKKyAgICBkZWYgZ2VuZXJhdGVf
ZnJvbV9qc19idWlsdGlucyhzZWxmLCBidWlsdGluc19maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBm
cmFtZXdvcmtfbmFtZT0iIiwgY29tYmluZWRfb3V0cHV0cz1GYWxzZSwgZ2VuZXJhdGVfd3JhcHBl
cj1GYWxzZSk6CiAgICAgICAgIGNtZCA9IFsncHl0aG9uJywKICAgICAgICAgICAgICAgICdKYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5JywKICAgICAgICAgICAg
ICAgICctLW91dHB1dC1kaXJlY3RvcnknLCBvdXRwdXRfZGlyZWN0b3J5LApAQCAtNDksNiArNDgs
OSBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgogICAgICAgICBpZiBjb21iaW5lZF9v
dXRwdXRzOgogICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1jb21iaW5lZCcpCiAKKyAgICAgICAg
aWYgZ2VuZXJhdGVfd3JhcHBlcjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0td2l0aC13cmFw
cGVyLWZpbGVzJykKKwogICAgICAgICBjbWQuYXBwZW5kKGJ1aWx0aW5zX2ZpbGUpCiAKICAgICAg
ICAgZXhpdF9jb2RlID0gMApAQCAtMTEwLDcgKzExMiw4IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJh
dG9yVGVzdHM6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgY29tYmlu
ZWRfb3V0cHV0cyA9IG91dHB1dF9tb2RlID09ICJDb21iaW5lZCIKLSAgICAgICAgICAgIGlmIHNl
bGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyhvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5
LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPWZyYW1ld29ya19u
YW1lLCBjb21iaW5lZF9vdXRwdXRzPWNvbWJpbmVkX291dHB1dHMpOgorICAgICAgICAgICAgZ2Vu
ZXJhdGVfd3JhcHBlciA9IGZyYW1ld29ya19uYW1lID09ICJXZWJDb3JlIgorICAgICAgICAgICAg
aWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKG9zLnBhdGguam9pbihpbnB1dF9kaXJl
Y3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9ZnJhbWV3
b3JrX25hbWUsIGNvbWJpbmVkX291dHB1dHM9Y29tYmluZWRfb3V0cHV0cywgZ2VuZXJhdGVfd3Jh
cHBlcj1nZW5lcmF0ZV93cmFwcGVyKToKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQog
CiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283118</attachid>
            <date>2016-07-08 00:56:30 -0700</date>
            <delta_ts>2016-07-08 03:43:04 -0700</delta_ts>
            <desc>Updated according comments</desc>
            <filename>bug-159461-20160708095552.patch</filename>
            <type>text/plain</type>
            <size>126800</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyOTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDlkZjE0NjFjNjJmOGYxODBiODU5NDQ3MTg3MWJiNmVmYjY1NDk1Li4yYjQ1MmU3YmVkZTA0YjEz
NGU4YTgyNWU5ZWExMWY4YjQ3NDBlMzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxNi0wNy0wNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgR2VuZXJhdGUgV2ViQ29yZSBidWlsdGluIHdyYXBwZXIgZmlsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTQ2MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEJyaWFuIEJ1cmcuCisKKyAgICAgICAgVXBkYXRpbmcgYnVpbHRpbiBn
ZW5lcmF0b3IgdG8gZ2VuZXJhdGUgd3JhcHBlciBmaWxlcyB1c2VkIGluIFdlYkNvcmUgKFNlZSBX
ZWJDb3JlIGNoYW5nZSBsb2cpLgorICAgICAgICBSZWJhc2luZyBidWlsdGlucyBnZW5lcmF0b3Ig
dGVzdCByZXN1bHRzIGFjY29yZGluZyBnZW5lcmF0b3IgY2hhbmdlcyBieSBhY3RpdmF0aW5nIHdy
YXBwZXIgZmlsZSBnZW5lcmF0aW9uIGZvcgorICAgICAgICBXZWJDb3JlIGJ1aWx0aW5zIHRlc3Rz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
bWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHk6IEFkZGluZyBuZXcgZ2Vu
ZXJhdG9ycy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2hlYWRlci5weTogQWRkZWQgdG8gZ2VuZXJhdGUgV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oLgorICAgICAgICAqIFNjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkIHRvIGdlbmVy
YXRlIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwLgorICAgICAgICAqIFNjcmlwdHMvYnVp
bHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHk6IEFkZGVkIHRvIGdlbmVy
YXRlIFdlYkNvcmVKU0J1aWx0aW5zLmguCisgICAgICAgICogU2NyaXB0cy9idWlsdGlucy9idWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5OiBBZGRlZCB0byBnZW5lcmF0
ZSBXZWJDb3JlSlNCdWlsdGlucy5jcHAuCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weTogQWRkaW5nIG5ldyBvcHRpb24gdG8gYWN0aXZhdGUgZ2VuZXJhdGlvbiBvZiB0
aGUgd3JhcHBlciBmaWxlcy4KKyAgICAgICAgKGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGlu
c19maWxlcyk6CisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJD
b3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0OgorICAgICAg
ICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRp
bi1TZXBhcmF0ZS5qcy1yZXN1bHQ6CisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9l
eHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0
OgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1
YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdDoKKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1
bHQ6CisKIDIwMTYtMDctMDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
IAogICAgICAgICBwYWRTdGFydC9wYWRFbmQgd2l0aCBJbmZpbml0eSBwcm9kdWNlcyB1bmV4cGVj
dGVkIHJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVhMDNjNGVmZjNkZTU3ZTVmN2ZmZmIwYThlYzdlOTc0
MDI1ZWFlYWMuLmY3NDkwMWQ1MThkMmMzNjVmNTlkNGRlMWJkNGI1MTI5YzFiMGRkZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0wNy0wNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CisKKyAgICAgICAgR2VuZXJhdGUgV2ViQ29yZSBidWlsdGluIHdyYXBwZXIg
ZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
OTQ2MQorCisgICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIEJ1cmcuCisKKyAgICAgICAgTm8gY2hh
bmdlIG9mIGJlaGF2aW9yLgorCisgICAgICAgIFVwZGF0aW5nIGJ1aWxkIHN5c3RlbSB0byBoYW5k
bGUgbmV3IGJ1aWx0LWluIGdlbmVyYXRvcnMgd2l0aG91dCBtb2RpZnlpbmcgV2ViQ29yZUpTQnVp
bHRpbnMqIGZpbGVzLgorICAgICAgICBUaGUgZ2VuZXJhdG9yIGlzIG5vdyBwYXNzZWQgYWxsIGJ1
aWx0LWlucyBhdCBvbmNlIHNvIHRoYXQgd3JhcHBlciBmaWxlcyBjYW4gYmUgZ2VuZXJhdGVkLgor
ICAgICAgICBSZW1vdmluZyBXZWJDb3JlSlNCdWlsdGlucyogY2hlY2tlZC1pbiB3cmFwcGVyIGZp
bGVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9iYWxzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGlu
Z3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuaDogUmVtb3ZlZC4KKwogMjAxNi0wNy0wNyAgR3l1eW91
bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgUGFz
c1JlZlB0ciBpbiBNb2R1bGVzL3dlYmF1ZGlvCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggNzZmNjhiZWYyZjk3NjZlZTNjZmIyNTlmNzJhMmI5N2NmNDJkOTZiYy4uMjY2MmM4
ZDgxNGM1NWE2Yjc2NjU2ZGNlM2JkNjVhNTM1MTc5ZWZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMTIwNiw2ICsxMjA2LDEwIEBAIHNldChCVUlMVElOU19HRU5FUkFU
T1JfU0NSSVBUUwogICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dl
bmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5CiAgICAgJHtK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1w
bGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlu
c19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBU
U19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWls
dGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQogICAgICR7
SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CiAgICAg
JHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vbGF6eXdyaXRlci5weQogKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBlY2RkODdlYmQ0ZTMyNTk0ZDVl
OWM3MzAxNjMwYWE1YTZiMGI3NjU1Li5hNWYwMmIwYWViMTg1ZTk0M2FjYzZkMjZmMWYzNTNlMjgx
Njk1MTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
NzYsNiArNzYsMTAgQEAgQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMgPSBcCiAgICAgJChKYXZh
U2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmlu
ZWRfaW1wbGVtZW50YXRpb24ucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIp
L2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSBcCiAgICAgJChK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfc2Vw
YXJhdGVfaW1wbGVtZW50YXRpb24ucHkgXAorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVJ9L2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5IFwKKyAgICAk
e0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV93
cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNf
RElSfS9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIu
cHkgXAorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKICAgICAkKEph
dmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSBcCiAgICAg
JChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvbGF6eXdyaXRlci5weSBcCiAjCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJkMmJjMzQwOTMyZDE4YjZhNmQ2NzFjMDU1ZGE2OTdm
ZGE1Y2E0ZTQuLjQ5MzhmNzQxZGM3MWI2ZTJjMzNhODc3YjkwMGMzMWQ5M2ZiODQ3NDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDc0LDYgKzE0NzQsMTAgQEAKIAkJOTlEQTAw
QTgxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTlEQTAwOUYxQkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2lt
cGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5REEwMEE5MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9z
ZXBhcmF0ZV9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OURBMDBBMDFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2Vw
YXJhdGVfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5REEwMEFBMUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9z
ZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk5REEwMEExMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19nZW5l
cmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTI5NTI3NzFEMkNGNkJDMDBFNzhCODkgLyogYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5IGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI5NTI3MzFEMkNGNkFDMDBFNzhC
ODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxMjk1Mjc4MUQy
Q0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBs
ZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyOTUyNzQxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxMjk1Mjc5MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyOTUyNzUxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0
aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxMjk1MjdBMUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI5NTI3NjFEMkNGNkFDMDBFNzhCODkg
LyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBBRjFCRDU5OTRF
MDBGNDU3NUMgLyogZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OURBMDBBQzFCRDU5OTNFMDBGNDU3NUMgLyogZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTlEQTAwQjAxQkQ1OTk0RTAwRjQ1NzVDIC8qIGxhenl3cml0ZXIucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OURBMDBBRDFC
RDU5OTNFMDBGNDU3NUMgLyogbGF6eXdyaXRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBCMTFCRDU5OTRFMDBGNDU3NUMgLyogVXBk
YXRlQ29udGVudHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5OURBMDBBRTFCRDU5OTNFMDBGNDU3NUMgLyogVXBkYXRlQ29udGVudHMucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMyODcsNiArMzI5
MSwxMCBAQAogCQkyQUY3MzgyQTE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVJRFRhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFGNzM4MkIxOEJCQkY5MjAwOEE1
QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RydWN0dXJlSURUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFE
ODQyQzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1l
ID0gbGliei5keWxpYjsgcGF0aCA9IHVzci9saWIvbGliei5keWxpYjsgc291cmNlVHJlZSA9IFNE
S1JPT1Q7IH07CisJCTQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0
ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMjk1Mjc0MUQyQ0Y2QUMwMEU3OEI4OSAv
KiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGJ1aWx0aW5zX2dlbmVyYXRlX2lu
dGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MTI5NTI3NTFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3Jh
cHBlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBidWls
dGluc19nZW5lcmF0ZV93cmFwcGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDEyOTUyNzYxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBw
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGgg
PSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MURFQTEzMTFCOUYzMTU0MDA2RDY1REQgLyogQnVpbHRpblV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0aW5VdGlscy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzE5REEwMTFDMUJFM0MxMDAxRDI2MEIgLyog
QjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcDsgcGF0
aCA9IGIzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MzE5REEwMjFDMUJFM0MxMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jv
c0FmdGVyT3B0aW1pemF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzEw
LDYgKzY3MTgsMTAgQEAKIAkJCQk5OURBMDA5RjFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNf
Z2VuZXJhdGVfY29tYmluZWRfaW1wbGVtZW50YXRpb24ucHkgKi8sCiAJCQkJOTlEQTAwQTAxQkQ1
OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSAqLywK
IAkJCQk5OURBMDBBMTFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJh
dGVfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJNDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8q
IGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSAqLywKKwkJCQk0
MTI5NTI3NDFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJNDEyOTUyNzUxRDJDRjZBQzAwRTc4Qjg5
IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5ICovLAorCQkJCTQxMjk1Mjc2
MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0
aW9uLnB5ICovLAogCQkJCTk5REEwMDlBMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc19nZW5l
cmF0b3IucHkgKi8sCiAJCQkJOTlEQTAwOUIxQkQ1OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21v
ZGVsLnB5ICovLAogCQkJCTk5REEwMDlDMUJENTk5MjcwMEY0NTc1QyAvKiBidWlsdGluc190ZW1w
bGF0ZXMucHkgKi8sCkBAIC03MTI0LDYgKzcxMzYsMTAgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFE
MDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEw
MEFBMUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1l
bnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEEzMUJENTk5MzEwMEY0NTc1QyAv
KiBidWlsdGluc19nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKKwkJCQk0MTI5NTI3ODFEMkNG
NkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQk0MTI5NTI3OTFEMkNGNkJDMDBFNzhCODkg
LyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQk0MTI5NTI3QTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9p
bXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCTQxMjk1Mjc3MUQyQ0Y2QkMwMEU3
OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgaW4g
SGVhZGVycyAqLywKIAkJCQlGRTNBMDZBNjFDMTBCNzJEMDAzOTBGREQgLyogSklUQml0T3JHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBi
dWlsdGluc19tb2RlbC5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0
NTc1QyAvKiBidWlsdGluc190ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKaW5kZXggOTM0
OWVlZWY2NTM0MGEyMmFkZDBhYzIyNjBmNmNmNjBiMzIyMDY3ZC4uYTlhZmYyYjFjZmY0ZjI1MzUw
Yjc2NThkZGE0OWMwYTUxMjNlOWMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnMucHkKQEAgLTksMyArOSw3IEBAIGZyb20gYnVpbHRp
bnNfZ2VuZXJhdGVfY29tYmluZWRfaGVhZGVyIGltcG9ydCAqCiBmcm9tIGJ1aWx0aW5zX2dlbmVy
YXRlX2NvbWJpbmVkX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCiBmcm9tIGJ1aWx0aW5zX2dlbmVy
YXRlX3NlcGFyYXRlX2hlYWRlciBpbXBvcnQgKgogZnJvbSBidWlsdGluc19nZW5lcmF0ZV9zZXBh
cmF0ZV9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFw
cGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBw
ZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4
MDBiOWFiNzQyOTY2MDg1ZGMzOWIxZGVkOThkZDFjNTZlMjcyMmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0
ZV9pbnRlcm5hbHNfd3JhcHBlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMTUgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CitpbXBvcnQgbG9nZ2luZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVp
bHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBCdWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tf
dWNmaXJzdAorZnJvbSBidWlsdGluc190ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKKworCitjbGFzcyBCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJHZW5lcmF0b3IoQnVp
bHRpbnNHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAg
IEJ1aWx0aW5zR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsKQorICAgICAgICBzZWxmLmlu
dGVybmFscyA9IGZpbHRlcihsYW1iZGEgb2JqZWN0OiAnaW50ZXJuYWwnIGluIG9iamVjdC5hbm5v
dGF0aW9ucywgbW9kZWwub2JqZWN0cykKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiAiJXNKU0J1aWx0aW5JbnRlcm5hbHMuaCIgJSBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVh
ZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAg
ICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5IZWFkZXJJbmNsdWRlR3VhcmQpLnN1
YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3Nl
Y29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCkuc3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KCkpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5z
dWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykK
KworICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgorICAg
ICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAg
ICAgICAgICAgICAgKCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1ZNLmgiKSwKKyAgICAgICAg
ICAgICksCisgICAgICAgIF0KKyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoK
KyAgICAgICAgICAgIGhlYWRlcl9pbmNsdWRlcy5hcHBlbmQoKFsiV2ViQ29yZSJdLCAoIldlYkNv
cmUiLCBvYmplY3Qub2JqZWN0X25hbWUgKyAiQnVpbHRpbnMuaCIpKSkKKworICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9p
bmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgor
ICAgICAgICBsaW5lcyA9IFsiY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7IiwKKyAgICAgICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICAgICAgICJjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9ucyB7IiwKKyAgICAgICAgICAgICAgICAgInB1YmxpYzoiXQorCisgICAgICAgIGxpbmVzLmFw
cGVuZCgiICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsi
KQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9tZXRob2RzKCkpCisgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygpKQorICAgICAgICBsaW5lcy5h
cHBlbmQoInByaXZhdGU6IikKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVt
YmVycygpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIn07IikKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKKworICAgIGRlZiBhY2Nlc3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAg
ICAgIHJldHVybiBXS19sY2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkKKworICAgIGRlZiBtZW1i
ZXJfbmFtZShzZWxmLCBvYmplY3QpOgorICAgICAgICByZXR1cm4gIm1fIiArIHNlbGYuYWNjZXNz
b3JfbmFtZShvYmplY3QpCisKKyAgICBkZWYgbWVtYmVyX3R5cGUoc2VsZiwgb2JqZWN0KToKKyAg
ICAgICAgcmV0dXJuIFdLX3VjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKSArICJCdWlsdGluRnVu
Y3Rpb25zIgorCisgICAgZGVmIGdlbmVyYXRlX21ldGhvZHMoc2VsZik6CisgICAgICAgIHJldHVy
biAiIiIKKyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKKyIiIgorCisgICAgZGVmIGdlbmVyYXRlX2FjY2Vz
c29ycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNl
bGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgYWNjZXNzb3IgPSAiICAgICVzJiAlcygpIHsgcmV0
dXJuICVzOyB9IiAlIChzZWxmLm1lbWJlcl90eXBlKG9iamVjdCksIHNlbGYuYWNjZXNzb3JfbmFt
ZShvYmplY3QpLCBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkpCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5vdGF0aW9u
cy5nZXQoJ2NvbmRpdGlvbmFsJyksIGFjY2Vzc29yKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIi
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVyYXRlX21l
bWJlcnMoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyIgICAgSlNDOjpWTSYgbV92bTsiXQorICAg
ICAgICBmb3Igb2JqZWN0IGluIHNlbGYuaW50ZXJuYWxzOgorICAgICAgICAgICAgbWVtYmVyID0g
IiAgICAlcyAlczsiICUgKHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwgc2VsZi5tZW1iZXJfbmFt
ZShvYmplY3QpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBtZW1i
ZXIpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9idWlsdGlucy9idWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2U2MTI4NGE5MjFlMzkyMTJkYTJiZWI2ODllZDE4NGRi
ZGEwZTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
YnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTAsMCArMSwxMzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gYnVpbHRpbnNfZ2VuZXJhdG9yIGltcG9ydCBC
dWlsdGluc0dlbmVyYXRvciwgV0tfbGNmaXJzdCwgV0tfdWNmaXJzdAorZnJvbSBidWlsdGluc190
ZW1wbGF0ZXMgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwor
Citsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCdWlsdGluc0lu
dGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihCdWlsdGluc0dlbmVyYXRvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsKToKKyAgICAgICAgQnVpbHRpbnNHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwpCisgICAgICAgIHNlbGYuaW50ZXJuYWxzID0gZmlsdGVy
KGxhbWJkYSBvYmplY3Q6ICdpbnRlcm5hbCcgaW4gb2JqZWN0LmFubm90YXRpb25zLCBtb2RlbC5v
YmplY3RzKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICIlc0pTQnVpbHRpbkludGVybmFscy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCduYW1lc3BhY2UnKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAg
ICAgYXJncyA9IHsKKyAgICAgICAgICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpLAorICAgICAgICAgICAgJ2hlYWRlckd1YXJkJzogc2Vs
Zi5vdXRwdXRfZmlsZW5hbWUoKS5yZXBsYWNlKCcuJywgJ18nKSwKKyAgICAgICAgfQorCisgICAg
ICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRv
Tm90RWRpdFdhcm5pbmcpLnN1YnN0aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX3ByaW1hcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSkKKwor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk5hbWVzcGFjZVRvcCku
c3Vic3RpdHV0ZShhcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
c2VjdGlvbl9mb3Jfb2JqZWN0KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuTmFtZXNwYWNlQm90dG9tKS5zdWJzdGl0dXRlKGFyZ3MpKQorCisgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9zZWNvbmRhcnlf
aGVhZGVyX2luY2x1ZGVzKHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCisgICAg
ICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAoWyJXZWJDb3Jl
Il0sCisgICAgICAgICAgICAgICAgKCJXZWJDb3JlIiwgIldlYkNvcmVKU0NsaWVudERhdGEuaCIp
LAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIChbIldlYkNvcmUiXSwKKyAgICAgICAgICAg
ICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgiKSwKKyAg
ICAgICAgICAgICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAg
KCJKYXZhU2NyaXB0Q29yZSIsICJydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgiKSwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICAoWyJXZWJDb3JlIl0sCisgICAgICAgICAgICAgICAgKCJK
YXZhU2NyaXB0Q29yZSIsICJydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCIpLAorICAgICAgICAg
ICAgKSwKKyAgICAgICAgXQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCisKKyAgICBkZWYgZ2VuZXJh
dGVfc2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfY29uc3RydWN0b3IoKSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWV0aG9kcygpKQorICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorCisgICAgZGVmIGFjY2Vzc29yX25hbWUoc2VsZiwgb2JqZWN0KToKKyAgICAg
ICAgcmV0dXJuIFdLX2xjZmlyc3Qob2JqZWN0Lm9iamVjdF9uYW1lKQorCisgICAgZGVmIG1lbWJl
cl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiAibV8iICsgc2VsZi5hY2Nlc3Nv
cl9uYW1lKG9iamVjdCkKKworICAgIGRlZiBtZW1iZXJfdHlwZShzZWxmLCBvYmplY3QpOgorICAg
ICAgICByZXR1cm4gV0tfdWNmaXJzdChvYmplY3Qub2JqZWN0X25hbWUpICsgIkJ1aWx0aW5GdW5j
dGlvbnMiCisKKyAgICBkZWYgZ2VuZXJhdGVfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGxp
bmVzID0gWyJKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5j
dGlvbnMoSlNDOjpWTSYgdm0pIiwKKyAgICAgICAgICAgICAgICAgIiAgICA6IG1fdm0odm0pIl0K
KyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGluaXRp
YWxpemVyID0gIiAgICAsICVzKG1fdm0pIiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChv
YmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBpbml0aWFsaXplcikpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgie1xufVxuIikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKKworICAgIGRlZiBwcm9wZXJ0eV9tYWNybyhzZWxmLCBvYmplY3QpOgorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgiI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFU
SUMobmFtZSkgXFwiKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBKU0RPTUdsb2JhbE9iamVj
dDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcXCIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAg
ICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS4lc0J1aWx0aW5zKCkubmFtZSMjUHJpdmF0
ZU5hbWUoKSwgJXMoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUg
fCBKU0M6OlJlYWRPbmx5KSwiICUgKHNlbGYuYWNjZXNzb3JfbmFtZShvYmplY3QpLCBzZWxmLmFj
Y2Vzc29yX25hbWUob2JqZWN0KSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFdFQkNPUkVf
Rk9SRUFDSF8lc19CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKSIg
JSBvYmplY3Qub2JqZWN0X25hbWUudXBwZXIoKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIjdW5k
ZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDIikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKKworICAgIGRlZiBnZW5lcmF0ZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFsi
dm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikiLAorICAgICAgICAgICAgICAgICAieyJdCisgICAgICAgIGZvciBvYmplY3QgaW4g
c2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICB2aXNpdCA9ICIgICAgJXMudmlzaXQodmlzaXRv
cik7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0
KCdjb25kaXRpb25hbCcpLCB2aXNpdCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIFVOVVNF
RF9QQVJBTSh2aXNpdG9yKTtcbn0iKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgidm9pZCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KSIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgieyIpCisgICAgICAgIGZvciBvYmpl
Y3QgaW4gc2VsZi5pbnRlcm5hbHM6CisgICAgICAgICAgICBpbml0ID0gIiAgICAlcy5pbml0KGds
b2JhbE9iamVjdCk7IiAlIHNlbGYubWVtYmVyX25hbWUob2JqZWN0KQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3Rh
dGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBpbml0KSkKKworICAgICAgICBsaW5lcy5hcHBlbmQo
IiAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7IikK
KyAgICAgICAgZm9yIG9iamVjdCBpbiBzZWxmLmludGVybmFsczoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChCdWlsdGluc0dlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQob2JqZWN0LmFubm90YXRp
b25zLmdldCgnY29uZGl0aW9uYWwnKSwgc2VsZi5wcm9wZXJ0eV9tYWNybyhvYmplY3QpKSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCIgICAgfTsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBn
bG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVO
R1RIKHN0YXRpY0dsb2JhbHMpKTsiKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICBVTlVTRURf
UEFSQU0oY2xpZW50RGF0YSk7IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJ9IikKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2VuZXJhdGVf
d3JhcHBlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAwMzY5NjVjMTIzNTZkZWY3M2JkZTIwMWI4
YzQxOTQ5ZjY5YmI5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5CkBAIC0w
LDAgKzEsMTIwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQorCitmcm9tIGJ1aWx0aW5zX2dlbmVyYXRvciBpbXBvcnQgQnVpbHRpbnNHZW5l
cmF0b3IsIFdLX2xjZmlyc3QsIFdLX3VjZmlyc3QKK2Zyb20gYnVpbHRpbnNfdGVtcGxhdGVzIGlt
cG9ydCBCdWlsdGluc0dlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQnVpbHRpbnNXcmFwcGVySGVhZGVy
R2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9k
ZWwpOgorICAgICAgICBCdWlsdGluc0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKKwor
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiJXNKU0J1aWx0
aW5zLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCduYW1lc3BhY2UnKQorCisg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAg
ICAgICduYW1lc3BhY2UnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFj
ZScpLAorICAgICAgICAgICAgJ2hlYWRlckd1YXJkJzogc2VsZi5vdXRwdXRfZmlsZW5hbWUoKS5y
ZXBsYWNlKCcuJywgJ18nKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRvTm90RWRpdFdhcm5pbmcpLnN1YnN0
aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
SGVhZGVySW5jbHVkZUd1YXJkKS5zdWJzdGl0dXRlKGFyZ3MpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCkpCisKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5OYW1lc3BhY2VUb3ApLnN1YnN0
aXR1dGUoYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX3NlY3Rp
b25fZm9yX29iamVjdCgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLk5hbWVzcGFjZUJvdHRvbSkuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAgICByZXR1cm4g
IlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRl
cl9pbmNsdWRlcyhzZWxmKToKKyAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWworICAgICAgICAg
ICAgKFsiV2ViQ29yZSJdLAorICAgICAgICAgICAgICAgICgiSmF2YVNjcmlwdENvcmUiLCAicnVu
dGltZS9WTS5oIiksCisgICAgICAgICAgICApLAorICAgICAgICBdCisgICAgICAgIGZvciBvYmpl
Y3QgaW4gc2VsZi5tb2RlbCgpLm9iamVjdHM6CisgICAgICAgICAgICBoZWFkZXJfaW5jbHVkZXMu
YXBwZW5kKChbIldlYkNvcmUiXSwgKCJXZWJDb3JlIiwgb2JqZWN0Lm9iamVjdF9uYW1lICsgIkJ1
aWx0aW5zLmgiKSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2lu
Y2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQorCisgICAgZGVmIGdlbmVyYXRl
X3NlY3Rpb25fZm9yX29iamVjdChzZWxmKToKKyAgICAgICAgbGluZXMgPSBbImNsYXNzIEpTQnVp
bHRpbkZ1bmN0aW9ucyB7IiwKKyAgICAgICAgICAgICAgICAgInB1YmxpYzoiXQorCisgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRlX2NvbnN0cnVjdG9yKCkpCisgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2FjY2Vzc29ycygpKQorICAgICAgICBsaW5lcy5hcHBlbmQo
InByaXZhdGU6IikKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbWVtYmVycygp
KQorICAgICAgICBsaW5lcy5hcHBlbmQoIn07IikKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKworICAgIGRlZiBhY2Nlc3Nvcl9uYW1lKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJl
dHVybiBXS19sY2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVpbHRpbnMiCisKKyAgICBk
ZWYgbWVtYmVyX25hbWUoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuICJtXyIgKyBzZWxm
LmFjY2Vzc29yX25hbWUob2JqZWN0KQorCisgICAgZGVmIG1lbWJlcl90eXBlKHNlbGYsIG9iamVj
dCk6CisgICAgICAgIHJldHVybiBXS191Y2ZpcnN0KG9iamVjdC5vYmplY3RfbmFtZSkgKyAiQnVp
bHRpbnNXcmFwcGVyIgorCisgICAgZGVmIGdlbmVyYXRlX2NvbnN0cnVjdG9yKHNlbGYpOgorICAg
ICAgICBsaW5lcyA9IFsiICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkiLAorICAgICAgICAgICAgICAgICAiICAgICAgICA6IG1fdm0odm0pIl0KKyAgICAgICAgZm9y
IG9iamVjdCBpbiBzZWxmLm1vZGVsKCkub2JqZWN0czoKKyAgICAgICAgICAgIG1lbWJlcl9pbml0
ID0gIiAgICAgICAgLCAlcygmbV92bSkiICUgc2VsZi5tZW1iZXJfbmFtZShvYmplY3QpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9i
amVjdC5hbm5vdGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIG1lbWJlcl9pbml0KSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCIgICAgeyIpCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5tb2Rl
bCgpLm9iamVjdHM6CisgICAgICAgICAgICBpZiBub3QgJ2ludGVybmFsJyBpbiBvYmplY3QuYW5u
b3RhdGlvbnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGludGVybmFs
X2V4cG9ydF9uYW1lcyA9ICIgICAgICAgICVzLmV4cG9ydE5hbWVzKCk7IiAlIHNlbGYubWVtYmVy
X25hbWUob2JqZWN0KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5zR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRpb25hbCcpLCBp
bnRlcm5hbF9leHBvcnRfbmFtZXMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB9XG4iKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVyYXRlX2FjY2Vz
c29ycyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3Igb2JqZWN0IGluIHNl
bGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAgYWNjZXNzb3IgPSAiICAgICVzJiAlcygp
IHsgcmV0dXJuICVzOyB9IiAlIChzZWxmLm1lbWJlcl90eXBlKG9iamVjdCksIHNlbGYuYWNjZXNz
b3JfbmFtZShvYmplY3QpLCBzZWxmLm1lbWJlcl9uYW1lKG9iamVjdCkpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoQnVpbHRpbnNHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkKG9iamVjdC5hbm5v
dGF0aW9ucy5nZXQoJ2NvbmRpdGlvbmFsJyksIGFjY2Vzc29yKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCIiKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVy
YXRlX21lbWJlcnMoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyIgICAgSlNDOjpWTSYgbV92bTsi
XQorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAg
ICAgbWVtYmVyID0gIiAgICAlcyAlczsiICUgKHNlbGYubWVtYmVyX3R5cGUob2JqZWN0KSwgc2Vs
Zi5tZW1iZXJfbmFtZShvYmplY3QpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKEJ1aWx0aW5z
R2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChvYmplY3QuYW5ub3RhdGlvbnMuZ2V0KCdjb25kaXRp
b25hbCcpLCBtZW1iZXIpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfZ2Vu
ZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTNhOTllZTk5MDE5NzdkNWMwNWU0MjkzODVmY2Q0YjcxZjdhMzM1YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5z
L2J1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSw2
MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisj
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKKworZnJvbSBidWlsdGluc19nZW5lcmF0b3IgaW1wb3J0IEJ1aWx0aW5zR2VuZXJhdG9yCitm
cm9tIGJ1aWx0aW5zX3RlbXBsYXRlcyBpbXBvcnQgQnVpbHRpbnNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2Ns
YXNzIEJ1aWx0aW5zV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEJ1aWx0aW5zR2VuZXJh
dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwpOgorICAgICAgICBCdWlsdGluc0dl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6CisgICAgICAgIHJldHVybiAiJXNKU0J1aWx0aW5zLmNwcCIgJSBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ25hbWVzcGFjZScpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnbmFtZXNwYWNlJyksCisgICAgICAgICAgICAnaGVh
ZGVyR3VhcmQnOiBzZWxmLm91dHB1dF9maWxlbmFtZSgpLnJlcGxhY2UoJy4nLCAnXycpLAorICAg
ICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuRG9Ob3RFZGl0V2FybmluZykuc3Vic3RpdHV0ZShhcmdzKSkKKworICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9zZWN0aW9uX2Zvcl9vYmplY3QoKSkKKwor
ICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVf
c2VjdGlvbl9mb3Jfb2JqZWN0KHNlbGYpOgorICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbXQor
ICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYubW9kZWwoKS5vYmplY3RzOgorICAgICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzLmFwcGVuZCgoWyJXZWJDb3JlIl0sICgiV2ViQ29yZSIsIG9iamVjdC5v
YmplY3RfbmFtZSArICJCdWlsdGlucy5jcHAiKSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRp
bnNfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMv
YnVpbHRpbnNfZ2VuZXJhdG9yLnB5CmluZGV4IDkyZWNiZWUwNDQyZTE1ZWI3OTdhMjFiZjcxNzZh
NDFlZGE4MmFmNGUuLjEwOWJjNDc0YjFmNTM3ZWU5NmU3MDc4NGU0MjA1OTc2MTQwMWI5YmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5z
X2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19nZW5lcmF0b3IucHkKQEAgLTE0Myw2ICsxNDMsMTYgQEAgY2xhc3MgQnVpbHRp
bnNHZW5lcmF0b3I6CiAgICAgIyBIZWxwZXIgbWV0aG9kcy4KIAogICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgd3JhcF93aXRoX2d1YXJkKGd1YXJkLCB0ZXh0KToKKyAgICAgICAgaWYgbm90IGd1
YXJkOgorICAgICAgICAgICAgcmV0dXJuIHRleHQKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihb
CisgICAgICAgICAgICAnI2lmICVzJyAlIGd1YXJkLAorICAgICAgICAgICAgdGV4dCwKKyAgICAg
ICAgICAgICcjZW5kaWYgLy8gJXMnICUgZ3VhcmQsCisgICAgICAgIF0pCisKKyAgICBAc3RhdGlj
bWV0aG9kCiAgICAgZGVmIG1hbmdsZWROYW1lRm9yT2JqZWN0KG9iamVjdCk6CiAgICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKG9iamVjdCwgQnVpbHRpbk9iamVjdCk6CiAgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIG1hbmdsZWROYW1lRm9yT2Jq
ZWN0KCkiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJh
dGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0
ZS1qcy1idWlsdGlucy5weQppbmRleCA1NTRhNzJjY2MwNTIzMmNhMzY3ZTM4OTQ1YWI2MjAxZjQ1
MjNlMDRhLi5kOWU3YzE1MGVkYTBmM2ZmMzg2NTYyMzQ1OWU2MjZlNDNiZTFhOTFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQpAQCAtNDUsNiArNDUsNyBAQCBkZWYgZ2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5z
X2ZpbGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkX291dHB1dD1GYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfd3JhcHBlcl9maWxlcz1G
YWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3Jr
X25hbWU9IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNl
X291dHB1dD1GYWxzZSk6CiAKQEAgLTc0LDYgKzc1LDEzIEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5n
c19mb3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSGVhZGVyR2VuZXJhdG9yKG1vZGVsLCBvYmpl
Y3QpKQogICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQogCisgICAgICAgIGlmIGdlbmVyYXRl
X3dyYXBwZXJfZmlsZXM6CisgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1dy
YXBwZXJIZWFkZXJHZW5lcmF0b3IobW9kZWwpKQorICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQnVpbHRpbnNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwpKQorCisgICAg
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJIZWFkZXJH
ZW5lcmF0b3IobW9kZWwpKQorICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNJ
bnRlcm5hbHNXcmFwcGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwpKQorCiAgICAgbG9n
LmRlYnVnKCIiKQogICAgIGxvZy5kZWJ1ZygiR2VuZXJhdGluZyBiaW5kaW5ncyBmb3IgYnVpbHRp
bnMuIikKIApAQCAtMTE0LDYgKzEyMiw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAg
ICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9ImNob2ljZSIsIGNo
b2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IkRlc3RpbmF0aW9uIGZyYW1ld29y
ayBmb3IgZ2VuZXJhdGVkIGZpbGVzLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZv
cmNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRm9yY2Ugb3V0cHV0IG9mIGdlbmVyYXRl
ZCBzY3JpcHRzLCBldmVuIGlmIG5vdGhpbmcgY2hhbmdlZC4iKQogICAgIGNsaV9wYXJzZXIuYWRk
X29wdGlvbigiLS1jb21iaW5lZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByb2R1Y2Ug
b25lIC5oLy5jcHAgZmlsZSBpbnN0ZWFkIG9mIHByb2R1Y2luZyBvbmUgcGVyIGJ1aWx0aW4gb2Jq
ZWN0LiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXdyYXBwZXJzIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwgaGVscD0iUHJvZHVjZSAuaC8uY3BwIHdyYXBwZXIgZmlsZXMgdG8gZWFzZSBp
bnRlZ3JhdGlvbiBvZiB0aGUgYnVpbHRpbnMuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24o
Ii12IiwgIi0tZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJMb2cgZXh0cmEgb3V0
cHV0IGZvciBkZWJ1Z2dpbmcgdGhlIGdlbmVyYXRvciBpdHNlbGYuIikKICAgICBjbGlfcGFyc2Vy
LmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVu
YWJsZSB0ZXN0IG1vZGUuIikKIApAQCAtMTM4LDYgKzE0Nyw3IEBAIGlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CiAgICAgICAgICdvdXRwdXRfcGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dF9kaXJl
Y3RvcnksCiAgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywK
ICAgICAgICAgJ2NvbWJpbmVkX291dHB1dCc6IGFyZ19vcHRpb25zLmNvbWJpbmVkLAorICAgICAg
ICAnZ2VuZXJhdGVfd3JhcHBlcl9maWxlcyc6IGFyZ19vcHRpb25zLndyYXBwZXJzLAogICAgICAg
ICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlvbnMuZm9yY2UsCiAgICAgICAgICdjb25jYXRlbmF0
ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50ZXN0LAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJi
aXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFy
eUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IDg2MmFiY2Q4ZmU0MzJk
NDA4ZmZlNjA2NmE5NTA2MDM3NGNjYTdiMWYuLjEwYjBlMzk1NmIxNjZlODEwOTE5YWQzYWE3NDdi
M2NiMzcyNDI5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1T
ZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVz
dHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNl
cGFyYXRlLmpzLXJlc3VsdApAQCAtMTkzLDMgKzE5MywyMTIgQEAgV0VCQ09SRV9GT1JFQUNIX0FS
QklUUkFSWUNPTkRJVElPTkFMR1VBUkRfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVS
QVRPUikKICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKIAogIyMjIEVu
ZCBGaWxlOiBBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENh
bm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZh
U2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuaCIKKyNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNCdWls
dGluRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMo
SlNDOjpWTSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
IHx8IFVTRShDRikKKyAgICAgICAgLCBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlu
cygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICB7
CisgICAgfQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisgICAgQXJiaXRy
YXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zV3JhcHBlciYgYXJiaXRyYXJ5Q29uZGl0aW9uYWxH
dWFyZEJ1aWx0aW5zKCkgeyByZXR1cm4gbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRp
bnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKworcHJpdmF0
ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENG
KQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIgbV9hcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KSB8fCBVU0UoQ0YpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5z
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1
aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJk
QnVpbHRpbnMuY3BwIgorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnMoSlNDOjpWTSYpOworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKworcHJpdmF0ZToK
KyAgICBKU0M6OlZNJiBtX3ZtOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVu
ZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENh
bm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZh
U2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1
ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25z
OjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKKyAgICA6IG1fdm0odm0p
Cit7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworfQordm9p
ZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKKyAgICBKU0RPTUds
b2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKKyAgICB9
OworICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9B
UlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRh
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBh
cmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWls
dGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApp
bmRleCBlYWE2YjkxNDVkZGMwZGQzZTgyNjE3Zjk2MTgwYzEwZjY1NjJlYWYwLi5iY2RkOTA3YjI1
Zjg5OGUzZGNiZTVmZDAzYWNhMzBlMjJhMzdiMzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRC
dWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFy
YXRlLmpzLXJlc3VsdApAQCAtMTkzLDMgKzE5MywyMTIgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJE
RURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRCdWlsdGluQnVp
bHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5z
LmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGlu
RnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgICAgICAsIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgeworICAgIH0KKworI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRlZEJ1
aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQorI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3Zt
OworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3Jh
cHBlciBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3Jl
SlNCdWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQorCisjaW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjIyMg
RW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0
IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNE
T01HbG9iYWxPYmplY3Q7CisKK2NsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7
CisKKyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGluaXRpYWxp
emUoSlNET01HbG9iYWxPYmplY3QmKTsKKworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisv
LyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9n
ZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgorCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9T
bG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQorICAgIDogbV92bSh2bSkKK3sKK30KKwordm9pZCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cit9Cit2b2lkIEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPihtX3ZtLmNsaWVudERhdGEpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQ
cm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geworICAgIH07CisgICAgZ2xvYmFsT2JqZWN0
LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNH
bG9iYWxzKSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlu
cy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0
ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRl
eCAwMjk1ODE3ZWZkNjMzZGRhOTk4ZjU2MzQ3YWVjNGNmNjNhNjUyMTEyLi43N2Q3NGQwMmNhMmRj
YmY3OTUwYjY5Y2FhYjVmNDA4ZDZjOWMwMmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFs
QnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTIyNSwzICsyMjUsMjM4IEBAIFdFQkNPUkVf
Rk9SRUFDSF9HVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJ
Tl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZp
bGU6IEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5zLmgKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQg
ZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0aW5GdW5jdGlv
bnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkKKyAgICAgICAgOiBtX3ZtKHZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAg
LCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpCisgICAgeworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAg
bV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKKyNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgfQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQor
ICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIGd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0
aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorCitwcml2YXRlOgorICAgIEpT
Qzo6Vk0mIG1fdm07CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3Jp
cHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAiR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNwcCIKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVp
bHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlu
cyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1q
cy1idWlsdGlucy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xhc3MgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOworCisjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rp
b25zJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxC
dWlsdGluOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorCitwcml2YXRlOgorICAg
IEpTQzo6Vk0mIG1fdm07CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbjsKKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVnaW4g
RmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgor
CisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQorICAgIDog
bV92bSh2bSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgLCBtX2d1YXJkZWRJbnRlcm5h
bEJ1aWx0aW4obV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit7Cit9CisKK3Zv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZEludGVybmFs
QnVpbHRpbi52aXNpdCh2aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworfQordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4uaW5pdChn
bG9iYWxPYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBKU1ZNQ2xp
ZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0u
Y2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBz
dGF0aWNHbG9iYWxzW10gPSB7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNM
QVJFX0dMT0JBTF9TVEFUSUMobmFtZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQ
cm9wZXJ0eUluZm8oIFwKKyAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkuZ3Vh
cmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgZ3VhcmRl
ZEludGVybmFsQnVpbHRpbigpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9udERl
bGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9SRUFDSF9HVUFSREVESU5URVJO
QUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisj
dW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQorICAgIH07CisgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFs
cywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VEX1BBUkFNKGNs
aWVudERhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1
aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRl
LmpzLXJlc3VsdAppbmRleCA2YTkzZWZlMTc1OWI5ODNlNmIyZDFiYTU5YzFiNTE4M2Q0MDMzZTYw
Li44OTA5MzkzMjY5ZDdjYmU3MGIzZmMxMGUxMGZiMDEwZTMzYmQyYWVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJD
b3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFy
ZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE4NCwzICsxODQsMjA2IEBAIFdFQkNP
UkVfRk9SRUFDSF9VTkdVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9H
RU5FUkFUT1IpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICMjIyBFbmQgRmlsZTogVW5ndWFy
ZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRp
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1
aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVW5ndWFyZGVk
QnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQorICAgICAgICA6IG1fdm0odm0p
CisgICAgICAgICwgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCisgICAgeworICAg
IH0KKworICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIHVuZ3VhcmRlZEJ1aWx0
aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOyB9CisKK3By
aXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNX
cmFwcGVyIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFT
Y3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjaW5jbHVkZSAiVW5n
dWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcCIKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRp
bnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xhc3Mg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworICAgIHZvaWQgdmlzaXQoSlNDOjpT
bG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwor
CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmgiCisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCisg
ICAgOiBtX3ZtKHZtKQoreworfQorCit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2
aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKK30KK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7
CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxz
W10gPSB7CisgICAgfTsKKyAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNH
bG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKKyAgICBVTlVTRURfUEFS
QU0oY2xpZW50RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmls
ZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2Fz
aW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUu
anMtcmVzdWx0CmluZGV4IGM4OWNjYmQ5MDMzNTY1YjM0ZTg3MWQwYzJiYzUzMGEzOGVmNjYzZDAu
LmYyZGY4NzQ1MjMwYmY3MWM5ODc0OTJkMjRhMzI4M2ViYmFmMzQ2MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNv
cmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdU
ZXN0LVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMjc2LDMgKzI3NiwyMzggQEAgV0VCQ09SRV9GT1JF
QUNIX1hNTENBU0lOR1RFU1RfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikK
ICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICMjIyBFbmQgRmlsZTogeG1sQ2FzaW5n
VGVzdEJ1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5z
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1
aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNC
dWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCZtX3Zt
KQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB7CisjaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQorICAgICAgICBtX3htbENhc2luZ1Rlc3RCdWlsdGlucy5leHBvcnROYW1lcygpOwor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9CisKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1
aWx0aW5zKCkgeyByZXR1cm4gbV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciBtX3ht
bENhc2luZ1Rlc3RCdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5z
LmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAK
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5
CisKKyNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuY3BwIgorIyMjIEVuZCBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5J
bnRlcm5hbHMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IK
Ky8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAieG1s
Q2FzaW5nVGVzdEJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5GdW5jdGlvbnMmIHht
bENhc2luZ1Rlc3QoKSB7IHJldHVybiBtX3htbENhc2luZ1Rlc3Q7IH0KKyNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBFTkFC
TEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5GdW5jdGlvbnMgbV94bWxD
YXNpbmdUZXN0OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0
aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgiCisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpW
TSYgdm0pCisgICAgOiBtX3ZtKHZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAsIG1f
eG1sQ2FzaW5nVGVzdChtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK3sKK30K
Kwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV94bWxDYXNpbmdU
ZXN0LnZpc2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7Cit9Cit2b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25z
Ojppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQorICAgIG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEpTVk1DbGllbnREYXRhJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsK
KyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNb
XSA9IHsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisjZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NU
QVRJQyhuYW1lKSBcCisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbygg
XAorICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS54bWxDYXNpbmdUZXN0QnVp
bHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCB4bWxDYXNpbmdUZXN0KCkubV8jI25hbWUjI0Z1
bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFkT25seSksCisgICAgV0VC
Q09SRV9GT1JFQUNIX1hNTENBU0lOR1RFU1RfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVf
R0xPQkFMX1NUQVRJQykKKyN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgfTsKKyAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xv
YmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggNTJmOTE4ZWU1OTc1MTBmZjExMzQ4NDQzZDE0MDEzOTVlNDIzZDA2My4uOTA0
Mzc3ZmNlYmRkNTZlNjBlNjYyZGU1Mjc0MDYxNTY2NTQyODc2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTEyMzgsOCArMTIzOCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5n
cy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCiAgICAgYmluZGluZ3MvanMvU2NyaXB0U3RhdGUu
Y3BwCiAgICAgYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAotICAgIGJpbmRp
bmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0gICAgYmluZGluZ3MvanMvV2Vi
Q29yZUpTQnVpbHRpbnMuY3BwCiAgICAgYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAogICAgIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCiAK
QEAgLTM3MzYsMjUgKzM3MzQsMzEgQEAgc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCiAg
ICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRpbnNfZ2VuZXJhdGVfY29tYmlu
ZWRfaW1wbGVtZW50YXRpb24ucHkKICAgICAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9i
dWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9oZWFkZXIucHkKICAgICAke0phdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSfS9idWlsdGluc19nZW5lcmF0ZV9zZXBhcmF0ZV9pbXBsZW1lbnRhdGlvbi5w
eQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX3dy
YXBwZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vYnVpbHRp
bnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRl
ci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2J1aWx0aW5zX2dlbmVyYXRl
X2ludGVybmFsc193cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29y
ZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKICAgICAke0phdmFTY3JpcHRD
b3JlX1NDUklQVFNfRElSfS9sYXp5d3JpdGVyLnB5CiApCiAKIGZvcmVhY2ggKF9idWlsdGluU291
cmNlICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRfZmlsZW5hbWVfY29tcG9u
ZW50KF9vYmplY3ROYW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0UpCi0gICAgYWRkX2N1c3Rv
bV9jb21tYW5kKAotICAgICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuY3BwCi0gICAgICAgICAgICAgICAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oCi0gICAgICAgIE1BSU5f
REVQRU5ERU5DWSAke19idWlsdGluU291cmNlfQotICAgICAgICBERVBFTkRTICR7QlVJTFRJTlNf
R0VORVJBVE9SX1NDUklQVFN9Ci0gICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0g
JHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1m
cmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9ICR7X2J1aWx0aW5Tb3VyY2V9Ci0gICAgICAgIFZFUkJBVElNKQotICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTCi0gICAgICAgICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmgKLSAgICApCi0gICAgQUREX1NP
VVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdz
L2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcCAke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcCkKKyAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQorICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcCkKIGVuZGZvcmVhY2ggKCkKK2xpc3QoQVBQRU5E
IFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9XZWJDb3JlSlNCdWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJ
TFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCkKKwor
YWRkX2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke1dlYkNvcmVfR0VORVJBVEVEX0JVSUxU
SU5TfQorICAgIE1BSU5fREVQRU5ERU5DWSAke1dlYkNvcmVfQlVJTFRJTlNfU09VUkNFU30KKyAg
ICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9CisgICAgQ09NTUFORCAke1BZ
VEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1q
cy1idWlsdGlucy5weSAtLXdyYXBwZXJzIC0tZnJhbWV3b3JrIFdlYkNvcmUgLS1vdXRwdXQtZGly
ZWN0b3J5ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSAke1dlYkNvcmVfQlVJTFRJTlNf
U09VUkNFU30KKyAgICBWRVJCQVRJTSkKIAorbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NP
VVJDRVMgJHtXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOU30pCiAKIEFERF9TT1VSQ0VfV0VCQ09S
RV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9odG1sL0hUTUxUcmVlQnVpbGRl
ci5jcHAgTWF0aE1MTmFtZXMuY3BwKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRl
eCBiZjZkODc3MGRiNWRlODQ0OGExYTVmYmE5ZDIyNWM3ODI2NDc4MjJmLi5hOWFiYjVlZTk2MzRl
NmVlMDA1NDE0MGE4YTAyMDFjMDY1MTQ2NmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKQEAgLTEzMDksMjEgKzEzMDksMjYgQEAgQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMgPSBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfY29t
YmluZWRfaW1wbGVtZW50YXRpb24ucHkgXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVIpL2J1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSBcCiAgICAgJChKYXZhU2Ny
aXB0Q29yZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50
YXRpb24ucHkgXAorICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5zX2dl
bmVyYXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSBcCisgICAgJChKYXZhU2NyaXB0Q29y
ZV9TQ1JJUFRTX0RJUikvYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVt
ZW50YXRpb24ucHkgXAorICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2J1aWx0aW5z
X2dlbmVyYXRlX3dyYXBwZXJfaGVhZGVyLnB5IFwKKyAgICAkKEphdmFTY3JpcHRDb3JlX1NDUklQ
VFNfRElSKS9idWlsdGluc19nZW5lcmF0ZV93cmFwcGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvbGF6eXdyaXRlci5weSBcCiAjCiAK
ICMgQWRkaW5nL3JlbW92aW5nIHNjcmlwdHMgc2hvdWxkIHRyaWdnZXIgcmVnZW5lcmF0aW9uLCBi
dXQgY2hhbmdpbmcgd2hpY2ggYnVpbHRpbnMgYXJlCiAjIGdlbmVyYXRlZCBzaG91bGQgbm90IGFm
ZmVjdCBvdGhlciBidWlsdGlucyB3aGVuIG5vdCBwYXNzaW5nICctLWNvbWJpbmVkJyB0byB0aGUg
Z2VuZXJhdG9yLgorIyBXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRV9MSVNUID0gJChzaGVsbCBlY2hv
ICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKSB8IHBlcmwgLWUgJ3ByaW50ICIgIiAuIGpvaW4o
IiAtSSIsIHNwbGl0KCIgIiwgPD4pKTsnKQogCiAuUEhPTlk6IGZvcmNlCiBXZWJDb3JlX0JVSUxU
SU5TX0RFUEVOREVOQ0lFU19MSVNUIDogJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvVXBk
YXRlQ29udGVudHMucHkgZm9yY2UKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRT
X0RJUikvVXBkYXRlQ29udGVudHMucHkgJyQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMpJyAk
QAogCi0lQnVpbHRpbnMuaDogJS5qcyAkKEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTKSBXZWJD
b3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19MSVNUCi0JJChQWVRIT04pICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IC0tb3V0cHV0LWRpcmVjdG9y
eSAuIC0tZnJhbWV3b3JrIFdlYkNvcmUgJDwKKwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLW91dHB1dC1k
aXJlY3RvcnkgLiAtLWZyYW1ld29yayBXZWJDb3JlICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VT
KQogCi1hbGwgOiAkKG5vdGRpciAkKFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFUzolLmpzPSVCdWls
dGlucy5oKSkKKworYWxsIDogV2ViQ29yZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVAogCiAj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODAxNzRiMWQxOGEyNGEzYzM4YzRjNGI2
ZDFiNjJjOTE4M2UzNWI2NS4uOTgwNmEzYTYzMjhlZWZlNmI3ODQ1MzNiMzdmZDFiN2U0NWQ0NmM5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTU2Myw3ICsxNTYzLDYgQEAKIAkJNDBFQ0FFN0UxNkI4QjY3MjAwQzM2MTAzIC8q
IEpTRE9NRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQwRUNBRTdEMTZCOEI2NzIwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmggKi87IH07CiAJCTQw
RUNBRTgxMTZCOEI2OEEwMEMzNjEwMyAvKiBKU0RPTUVycm9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQwRUNBRTgwMTZCOEI2OEEwMEMzNjEwMyAv
KiBKU0RPTUVycm9yLmNwcCAqLzsgfTsKIAkJNDEwQjdFNzIxMDQ1RkFCMDAwRDgyMjRGIC8qIEpT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxMEI3RTcxMTA0NUZBQjAwMEQ4MjI0RiAvKiBKU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAgKi87IH07Ci0JCTQxMEQzMzI0MUMxOTk4NTAwMEY3RkRFMiAvKiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxMEQzMzIzMUMxOTk4NDEwMEY3RkRFMiAvKiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcCAqLzsgfTsKIAkJNDEyMzA4MUIxMzhDNDI5NzAwQkNDRkNBIC8qIFdlYkNvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovOyB9Owog
CQk0MTIzMDkxMzEzOEM0MkZGMDBCQ0NGQ0EgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgyMTYyOTkw
MjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJNDEy
N0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAv
KiBTY3JpcHRTdGF0ZS5jcHAgKi87IH07CkBAIC0xNjE0LDkgKzE2MTMsNiBAQAogCQk0MThGODgw
NTBGRjk1N0FGMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4Rjg4MDMwRkY5NTdBRTAwODBGMDQ1IC8q
IEpTQWJzdHJhY3RXb3JrZXIuaCAqLzsgfTsKIAkJNDE5QkMyREUxNjg1MzI5OTAwRDY0RDZEIC8q
IFZpc2l0ZWRMaW5rU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDE5QkMyREMxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUu
Y3BwICovOyB9OwogCQk0MTlCQzJERjE2ODUzMjk5MDBENjRENkQgLyogVmlzaXRlZExpbmtTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkMy
REQxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCAqLzsgfTsKLQkJNDE5QkU3
NTYxQkM3RjQxQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxOUJFNzUzMUJDN0YzREIw
MEUxQzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDE5QkU3NTcxQkM3RjQyMTAwRTFDODVC
IC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxOUJFNzU0MUJDN0YzREIwMEUxQzg1QiAvKiBXZWJDb3JlSlNCdWls
dGlucy5jcHAgKi87IH07Ci0JCTQxOUJFNzU4MUJDN0Y0MjcwMEUxQzg1QiAvKiBXZWJDb3JlSlNC
dWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDE5QkU3NTUxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggKi87IH07CiAJ
CTQxOUJFNzU5MUJDN0Y0MkIwMEUxQzg1QiAvKiBXZWJDb3JlQnVpbHRpbk5hbWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTlCRTc1MjFCQzdGM0RC
MDBFMUM4NUIgLyogV2ViQ29yZUJ1aWx0aW5OYW1lcy5oICovOyB9OwogCQk0MUEzRDU4RTEwMUMx
NTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQTNENThDMTAxQzE1MkQwMDMxNkQwNyAv
KiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwICovOyB9OwogCQk0MUEzRDU4RjEwMUMxNTJEMDAz
MTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUEzRDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNh
dGVkV29ya2VyVGhyZWFkLmggKi87IH07CkBAIC01NTQzLDcgKzU1MzksMTEgQEAKIAkJQkMzM0ZC
MUIwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzNGQjFBMEYzMEVFODUwMDJDREQ3
QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi87IH07CiAJCUJDMzQ4QkJFMERCN0Y1MzEwMDRB
QkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzQ4QkJEMERCN0Y1MzEwMDRBQkFCOSAvKiBKU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMzNDhCRDMwREI3RjgwNDAwNEFCQUI5
IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMzNDhCRDEwREI3RjgwNDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVl
c3QuY3BwICovOyB9OworCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29yZUpTQnVp
bHRpbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMzNDhCRDEwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCAqLzsgfTsK
KwkJQkMzNDhCRDMwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhC
RDEwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICovOyB9
OwogCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzNDhCRDIwREI3Rjgw
NDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAqLzsgfTsKKwkJQkMzNDhCRDQwREI3Rjgw
NDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzM0OEJEMjBEQjdGODA0MDA0QUJBQkEgLyogV2ViQ29y
ZUpTQnVpbHRpbnMuaCAqLzsgfTsKKwkJQkMzNDhCRDQwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQiAvKiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkMzQkMyOUMwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDM0JDMjlCMEU5MUFCMEYwMDgz
NTU4OCAvKiBIb3N0V2luZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkMzQkUxMkIwRTk4MDkyRjAwODM1NTg4IC8qIFBvcHVwTWVudVN0eWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNCRTEy
QTBFOTgwOTJGMDA4MzU1ODggLyogUG9wdXBNZW51U3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzNCRTk5MzBFOUMxQzdDMDA4MzU1ODgg
LyogUmVuZGVyU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDM0JFOTkwMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIu
Y3BwICovOyB9OwpAQCAtOTEzMCw3ICs5MTMwLDYgQEAKIAkJNDBFQ0FFN0QxNkI4QjY3MjAwQzM2
MTAzIC8qIEpTRE9NRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNE
T01FcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MEVDQUU4MDE2QjhCNjhB
MDBDMzYxMDMgLyogSlNET01FcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RPTUVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEw
QjdFNzExMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwRDMzMjMxQzE5OTg0MTAwRjdGREUyIC8q
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxMTg5RUY3MUFEODIzMjgwMEI5MEEwRCAvKiBSZWFkYWJsZVN0cmVh
bUNvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtQ29u
dHJvbGxlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMjdENTM2MEY4QUFC
MUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTY3JpcHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxMjlERjgzMUJCNUI3RjcwMDMyMkExNiAvKiBKU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0
cnVjdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRh
YmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05MTk0LDkgKzkxOTMsNiBAQAogCQk0MTlCQzJEQzE2ODUzMjk5MDBENjRENkQgLyog
VmlzaXRlZExpbmtTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWaXNpdGVkTGlua1N0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE5
QkMyREQxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTlCRTc1MjFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUJ1aWx0aW5O
YW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlQnVpbHRpbk5h
bWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxOUJFNzUzMUJDN0YzREIwMEUx
Qzg1QiAvKiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDE5QkU3NTQxQkM3RjNEQjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0
aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVKU0J1
aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE5QkU3NTUxQkM3RjNE
QjAwRTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVKU0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxOUJFNzVBMUJDQkQzRUQwMEUxQzg1QiAvKiBOYXZpZ2F0b3JVc2VyTWVkaWEuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBOYXZpZ2F0b3JVc2VyTWVkaWEu
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxOUZBRkFEMUFCQUJDRDUwMDVCODI4
QiAvKiBSZWFkYWJsZVN0cmVhbVJlYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVh
ZGFibGVTdHJlYW1SZWFkZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUEw
MjNFRDFBMzlEQjc5MDBGNzIyQ0YgLyogUmVhZGFibGVTdHJlYW0uaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEzNTQ1LDcgKzEzNTQxLDExIEBACiAJCUJDMzQ4QkE3MERCN0YxQjgwMDRBQkFCOSAvKiBY
TUxIdHRwUmVxdWVzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gWE1MSHR0cFJlcXVlc3Qu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzM0OEJCRDBEQjdGNTMxMDA0QUJB
QjkgLyogSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMzNDhCRDEwREI3RjgwNDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVl
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYTUxIdHRwUmVx
dWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMzQ4QkQxMERCN0Y4MDQw
MDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJDb3JlSlNCdWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDMzQ4QkQxMERCN0Y4MDQwMDRBQkFCQiAvKiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzM0
OEJEMjBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlSlNCdWlsdGlucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzM0OEJEMjBEQjdGODA0MDA0QUJBQkIg
LyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDM0JDMjlCMEU5MUFCMEYwMDgzNTU4OCAvKiBIb3N0V2luZG93LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhvc3RXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMzQkUxMkEwRTk4MDkyRjAwODM1NTg4IC8qIFBvcHVwTWVudVN0eWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwTWVudVN0eWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDM0JFOTkwMEU5QzFDN0MwMDgzNTU4OCAvKiBS
ZW5kZXJTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU2Nyb2xsYmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MTQw
LDYgKzE2MTQwLDEwIEBACiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUJD
MzQ4QkQxMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgKi8sCisJCQkJ
QkMzNDhCRDEwREI3RjgwNDAwNEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3Bw
ICovLAorCQkJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQSAvKiBXZWJDb3JlSlNCdWlsdGlucy5o
ICovLAorCQkJCUJDMzQ4QkQyMERCN0Y4MDQwMDRBQkFCQiAvKiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmggKi8sCiAJCQkJMTIyMUUwNTgxQzAyQjQwOTAwNkExQTAwIC8qIEFuaW1hdGlvbiAq
LywKIAkJCQkxQUU5NkE3OTFEMUEwQTVDMDBCODY3NjggLyogQXBwbGVQYXkgKi8sCiAJCQkJQTgz
Qjc5MTAwQ0NCMDAxQjAwMEIwODI1IC8qIENvcmUgKi8sCkBAIC0yMjYwMSwxMCArMjI2MDUsNiBA
QAogCQkJCUE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwICovLAogCQkJCUE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCAqLywKIAkJCQk0MTlCRTc1MjFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29yZUJ1aWx0
aW5OYW1lcy5oICovLAotCQkJCTQxMEQzMzIzMUMxOTk4NDEwMEY3RkRFMiAvKiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcCAqLywKLQkJCQk0MTlCRTc1MzFCQzdGM0RCMDBFMUM4NUIgLyog
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oICovLAotCQkJCTQxOUJFNzU0MUJDN0YzREIwMEUx
Qzg1QiAvKiBXZWJDb3JlSlNCdWlsdGlucy5jcHAgKi8sCi0JCQkJNDE5QkU3NTUxQkM3RjNEQjAw
RTFDODVCIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggKi8sCiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAw
MEQ4MTdFIC8qIFdlYkNvcmVKU0NsaWVudERhdGEuaCAqLywKIAkJCQkwRjA5OUQwNjE3Qjk2OEEx
MDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKIAkJCQkwRjA5
OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8s
CkBAIC0yNzM0OCw2ICsyNzM0OCw4IEBACiAJCQkJN0M0Qzk2REQxQUQ0NDgzNTAwMzY1QTYwIC8q
IEpTV3JpdGFibGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNThDQjcwMUM1MzI3NzUw
MEUwQzJEOCAvKiBKU1hNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzM0OEJENDBE
QjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkMzNDhCRDQwREI3RjgwNDAwNEFCQUJBIC8qIFdlYkNvcmVKU0J1aWx0aW5zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCQzM0OEJENDBEQjdGODA0MDA0QUJBQkIgLyogV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNEMzVBRjIxQzcxOEQ5MDAwRjcwRDVBIC8q
IEpTWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjkxNkM0
OEUwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0RGRDQ5NjBFMzA1OTJGMDA5RDEwQUQgLyogSlNYTUxIdHRwUmVx
dWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODgyNSw4ICsyODgyNyw2IEBACiAJCQkJ
Q0RDNjlEREExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREM2OURENjE2MzIwMjZDMDA3QzM4REYgLyogV2Vi
Q29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QxMjdERUUx
NEYzMDk4NDAwRTg0Nzc5IC8qIFdlYkNvcmVGdWxsU2NyZWVuV2luZG93LmggaW4gSGVhZGVycyAq
LywKLQkJCQk0MTlCRTc1NjFCQzdGNDFCMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDE5QkU3NTgxQkM3RjQyNzAwRTFDODVCIC8qIFdl
YkNvcmVKU0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzUzRDkxMTExNDMxMENDMDAw
RDgxN0UgLyogV2ViQ29yZUpTQ2xpZW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
QkIwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE0MDM3OUIxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTgwLDYgKzMxMTgwLDggQEAKIAkJCQk4MzU4Q0I2RjFD
NTMyNzcyMDBFMEMyRDggLyogSlNYTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
M0E0QTlGOTFDRTdGRDgxMDA3MDlCMDAgLyogSlNYTUxEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQjkgLyogSlNYTUxIdHRwUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzM0OEJEMzBEQjdGODA0MDA0QUJBQkEgLyogV2Vi
Q29yZUpTQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkMzNDhCRDMwREI3RjgwNDAw
NEFCQUJCIC8qIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMzNDhCQkUwREI3RjUzMTAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODNEMzVBRjExQzcxOEQ5MDAwRjcwRDVBIC8qIEpTWE1MSHR0
cFJlcXVlc3RFdmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGOTE2QzQ4RDBEQjUx
MEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0zMjM1MSw4ICszMjM1Myw2IEBACiAJCQkJQ0RDNjlEREIxNjM3MUZENDAwN0Mz
OERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RDNjlERDcxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2Fybmlu
Z1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDEyN0RFRDE0RjMwOTdEMDBFODQ3NzkgLyog
V2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cubW0gaW4gU291cmNlcyAqLywKLQkJCQk0MTBEMzMyNDFD
MTk5ODUwMDBGN0ZERTIgLyogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk0MTlCRTc1NzFCQzdGNDIxMDBFMUM4NUIgLyogV2ViQ29yZUpTQnVpbHRpbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE0MDM3OUMxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNv
cmVNb3Rpb25NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDOTc5RjQxQzQ5OEMwOTAw
REI1MEQ0IC8qIFdlYkNvcmVOU0Vycm9yRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0
RDlCQTUwQjhDMTE2QjAwN0I0MkE5IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCmluZGV4IDhkYTgzMjRlNjZlZmNlZjc3M2VkZThmZTM3N2JhNjZmMGY2ZjcwZWEuLmZi
NTY3NDA5ZDYwODNhMjYxZmEzOWRlOGJjM2U4ZmRlM2Q0Y2VmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKQEAgLTYzLDcgKzYzLDcg
QEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQg
SlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9iYWxzKFZNJiB2bSkKIHsKLSAgICBtX2J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucy5pbml0aWFsaXplKCp0aGlzLCB2bSk7CisgICAgbV9idWls
dGluSW50ZXJuYWxGdW5jdGlvbnMuaW5pdGlhbGl6ZSgqdGhpcyk7CiAKICNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCiAgICAgSlNPYmplY3QqIHByaXZhdGVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJD
b25zdHJ1Y3RvciA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlclByaXZhdGVDb25zdHJ1
Y3Rvcih2bSwgKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmgKaW5kZXggNGRhMGRhOTBlODlmMWQzMTk2ZWVkOTFiZTQ3MWU3NjNkM2I0N2Ez
YS4uMjA4NjA0MWI0NDU0YTY4Zjk2ZDI5YTI2YjAxZTcxOWZiZmIyOGExOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCkBAIC05Miw3ICs5Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgYWRk
QnVpbHRpbkdsb2JhbHMoSlNDOjpWTSYpOwotICAgICAgICBmcmllbmQgdm9pZCBKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6Vk0m
KTsKKyAgICAgICAgZnJpZW5kIHZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKIAogICAgICAgICBKU0J1aWx0aW5JbnRlcm5hbEZ1
bmN0aW9ucyBtX2J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczsKICAgICB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRjMzVhN2Q4NzY3MmViMTcxOGE1M2Zm
YjMzNDg4OTRjOWI1OWJiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNSwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0OgotICogIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqICAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqICBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiAg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCi0gKiAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0gKiAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICog
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtUHJp
dmF0ZUNvbnN0cnVjdG9ycy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNp
bmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYg
dikKLSAgICA6IHZtKHYpCi0jaWYgRU5BQkxFKFdFQl9SVEMpCi0gICAgLCBtX3J0Y1BlZXJDb25u
ZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQotI2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQotICAgICwgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucyh2bSkKLSAgICAs
IG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQotICAgICwgbV93cml0YWJsZVN0cmVhbUlu
dGVybmFsc0Z1bmN0aW9ucyh2bSkKLSNlbmRpZgotewotI2lmICFFTkFCTEUoU1RSRUFNU19BUEkp
ICYmICFFTkFCTEUoV0VCX1JUQykKLSAgICAvLyBGSVhNRTogV2hlbiBub25lIG9mIHRoZSBmZWF0
dXJlcyB0aGF0IHVzZSB0aGlzIGNsYXNzIGFyZSBlbmFibGVkLCB3ZQotICAgIC8vIGRvbid0IGV2
ZXIgdXNlIHRoZSB2bSBtZW1iZXIuIEhvd2V2ZXIsIHRoZSBsb2dpYyBvZiBpbml0aWFsaXppbmcK
LSAgICAvLyBpdCB3aGVuIGFueSBvZiB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgZ2V0cyBwcmV0
dHkgbWVzc3kuCi0gICAgKHZvaWQpdm07Ci0jZW5kaWYKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNpZiBF
TkFCTEUoV0VCX1JUQykKLSAgICBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzRnVuY3Rpb25z
LnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIG1f
cmVhZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7Ci0gICAgbV9z
dHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7Ci0gICAgbV93cml0YWJsZVN0
cmVhbUludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKLSNlbmRpZgotI2lmICFFTkFC
TEUoU1RSRUFNU19BUEkpICYmICFFTkFCTEUoV0VCX1JUQykKLSAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5p
dGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCi17Ci0jaWYg
RU5BQkxFKFdFQl9SVEMpCi0gICAgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0Z1bmN0aW9u
cy5pbml0KGdsb2JhbE9iamVjdCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0g
ICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy5pbml0KGdsb2JhbE9iamVjdCk7
Ci0gICAgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMuaW5pdChnbG9iYWxPYmplY3QpOwotICAg
IG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMuaW5pdChnbG9iYWxPYmplY3QpOwot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IEVOQUJMRShXRUJfUlRDKQotICAg
IEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0KLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVy
dHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSNkZWZpbmUg
REVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpXAotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6
R2xvYmFsUHJvcGVydHlJbmZvKFwKLSAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0
aW9ucygpLnJ0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRl
TmFtZSgpLCBydGNQZWVyQ29ubmVjdGlvbkludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5n
ZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIFdFQkNPUkVfRk9SRUFDSF9S
VENQRUVSQ09OTkVDVElPTklOVEVSTkFMU19CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9H
TE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmCi0jaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQotI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSlc
Ci0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oXAotICAgICAg
ICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxz
KCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAg
ICAgICAgV0VCQ09SRV9GT1JFQUNIX1JFQURBQkxFU1RSRUFNSU5URVJOQUxTX0JVSUxUSU5fRlVO
Q1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCi0jdW5kZWYgREVDTEFSRV9HTE9CQUxf
U1RBVElDCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKVwKLSAgICAgICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhcCi0gICAgICAgICAgICBjbGllbnRE
YXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5zdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1By
aXZhdGVOYW1lKCksIHN0cmVhbUludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAs
IERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIFdFQkNPUkVfRk9SRUFDSF9TVFJFQU1J
TlRFUk5BTFNfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1
bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElD
KG5hbWUpXAotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKFwK
LSAgICAgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLndyaXRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCB3cml0YWJsZVN0cmVhbUlu
dGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25s
eSksCi0gICAgICAgIFdFQkNPUkVfRk9SRUFDSF9XUklUQUJMRVNUUkVBTUlOVEVSTkFMU19CVUlM
VElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVf
R0xPQkFMX1NUQVRJQwotI2VuZGlmCi0gICAgfTsKLQotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0
aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykp
OwotI2VuZGlmCi0jaWYgIUVOQUJMRShTVFJFQU1TX0FQSSkgJiYgIUVOQUJMRShXRUJfUlRDKQot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0j
ZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MzFmZTFlNTE5NDBhMDE0YmExYTcwMjFhMTYwZWQ3M2Q3Nzc2N2JhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0g
KiAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqICBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgV2ViQ29yZUpTQnVpbHRpbkludGVybmFsc19oCi0jZGVmaW5lIFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaAotCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi0j
aWYgRU5BQkxFKFdFQl9SVEMpCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNC
dWlsdGlucy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0jaW5jbHVkZSAi
UmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgotI2luY2x1ZGUgIlN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxP
YmplY3Q7Ci0KLS8vIEZJWE1FOiBNYWtlIGJ1aWx0aW4gZ2VuZXJhdG9yIGdlbmVyYXRlIHRoaXMg
Y2xhc3MKLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBl
eHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSNpZiBFTkFC
TEUoV0VCX1JUQykKLSAgICBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5GdW5jdGlv
bnMgcnRjUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMoKSB7IHJldHVybiBtX3J0Y1BlZXJDb25uZWN0
aW9uSW50ZXJuYWxzRnVuY3Rpb25zOyB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIHJlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9u
czsgfQotICAgIFN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgc3RyZWFtSW50ZXJuYWxz
KCkgeyByZXR1cm4gbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7IH0KLSAgICBXcml0YWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgd3JpdGFibGVTdHJlYW1JbnRlcm5hbHMoKSB7
IHJldHVybiBtX3dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOyB9Ci0jZW5kaWYKLQot
ICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShK
U0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6Vk0mKTsKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiB2
bTsKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1
aWx0aW5GdW5jdGlvbnMgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0Z1bmN0aW9uczsKLSNl
bmRpZgotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBSZWFkYWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5GdW5jdGlvbnMgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9uczsKLSAg
ICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rp
b25zOwotICAgIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3dyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOwotI2VuZGlmCi0KLX07Ci0KLX0KLQotI2VuZGlm
IC8vIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmNzEyOTAzNjJhYjAzZmUwMzViYmY5ZTljOGJlYjRmNDAyMThkOGUyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0g
KiAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgotICogICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqICBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCi0gKiAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkJ5dGVMZW5ndGhRdWV1
aW5nU3RyYXRlZ3lCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiQ291bnRRdWV1aW5nU3RyYXRlZ3lC
dWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiRmV0Y2hIZWFkZXJzQnVpbHRpbnMuY3BwIgotI2luY2x1
ZGUgIkZldGNoUmVzcG9uc2VCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiTWVkaWFEZXZpY2VzQnVp
bHRpbnMuY3BwIgotI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYUJ1aWx0aW5zLmNwcCIKLSNp
bmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSVENQZWVy
Q29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmNwcCIKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGlu
cy5jcHAiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5jcHAiCi0j
aW5jbHVkZSAiUmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlucy5jcHAiCi0jaW5jbHVkZSAiU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwIgotI2luY2x1ZGUgIldyaXRhYmxlU3RyZWFtQnVpbHRp
bnMuY3BwIgotI2luY2x1ZGUgIldyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMTc2NjQ1NjdiMDU4YzkwZDE5ODcwY2QyNGJhYzEx
M2Y1YmZjMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSwgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqICBhcmUgbWV0OgotICogIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiAgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
Ci0gKiAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotICogIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiAgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKLSAqICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYkNvcmVKU0J1aWx0aW5zX2gK
LSNkZWZpbmUgV2ViQ29yZUpTQnVpbHRpbnNfaAotCi0jaW5jbHVkZSAiQnl0ZUxlbmd0aFF1ZXVp
bmdTdHJhdGVneUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiQ291bnRRdWV1aW5nU3RyYXRlZ3lCdWls
dGlucy5oIgotI2luY2x1ZGUgIkZldGNoSGVhZGVyc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiRmV0
Y2hSZXNwb25zZUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiTWVkaWFEZXZpY2VzQnVpbHRpbnMuaCIK
LSNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFCdWlsdGlucy5oIgotI2luY2x1ZGUgIlJUQ1Bl
ZXJDb25uZWN0aW9uQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIgotI2lu
Y2x1ZGUgIlJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiUmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgotI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFt
UmVhZGVyQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgot
I2luY2x1ZGUgIldyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCIKLSNpbmNsdWRlICJXcml0YWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCi0gICAgICAgIDogdm0o
dikKLSNpZiBFTkFCTEUoRkVUQ0hfQVBJKQotICAgICAgICAsIG1fZmV0Y2hIZWFkZXJzQnVpbHRp
bnMoJnZtKQotICAgICAgICAsIG1fZmV0Y2hSZXNwb25zZUJ1aWx0aW5zKCZ2bSkKLSNlbmRpZgot
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2J5dGVMZW5ndGhRdWV1aW5nU3Ry
YXRlZ3lCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9jb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0
aW5zKCZ2bSkKLSAgICAgICAgLCBtX3JlYWRhYmxlU3RyZWFtQnVpbHRpbnMoJnZtKQotICAgICAg
ICAsIG1fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnMoJnZtKQotICAgICAgICAsIG1f
cmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygmdm0pCi0gICAgICAgICwgbV9yZWFkYWJs
ZVN0cmVhbVJlYWRlckJ1aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX3N0cmVhbUludGVybmFsc0J1
aWx0aW5zKCZ2bSkKLSAgICAgICAgLCBtX3dyaXRhYmxlU3RyZWFtQnVpbHRpbnMoJnZtKQotICAg
ICAgICAsIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygmdm0pCi0jZW5kaWYKLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICAsIG1fbWVkaWFEZXZpY2VzQnVpbHRpbnMo
JnZtKQotICAgICAgICAsIG1fbmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnMoJnZtKQotI2VuZGlm
Ci0jaWYgRU5BQkxFKFdFQl9SVEMpCi0gICAgICAgICwgbV9ydGNQZWVyQ29ubmVjdGlvbkJ1aWx0
aW5zKCZ2bSkKLSAgICAgICAgLCBtX3J0Y1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMo
JnZtKQotI2VuZGlmCi0gICAgewotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgbV9y
ZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmV4cG9ydE5hbWVzKCk7Ci0gICAgICAgIG1f
c3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSAgICAgICAgbV93cml0YWJs
ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmV4cG9ydE5hbWVzKCk7Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoV0VCX1JUQykKLSAgICAgICAgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5z
LmV4cG9ydE5hbWVzKCk7Ci0jZW5kaWYKLSAgICB9Ci0jaWYgRU5BQkxFKEZFVENIX0FQSSkKLSAg
ICBGZXRjaEhlYWRlcnNCdWlsdGluc1dyYXBwZXImIGZldGNoSGVhZGVyc0J1aWx0aW5zKCkgeyBy
ZXR1cm4gbV9mZXRjaEhlYWRlcnNCdWlsdGluczsgfQotICAgIEZldGNoUmVzcG9uc2VCdWlsdGlu
c1dyYXBwZXImIGZldGNoUmVzcG9uc2VCdWlsdGlucygpIHsgcmV0dXJuIG1fZmV0Y2hSZXNwb25z
ZUJ1aWx0aW5zOyB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgQnl0ZUxl
bmd0aFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zV3JhcHBlciYgYnl0ZUxlbmd0aFF1ZXVpbmdTdHJh
dGVneUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ieXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRp
bnM7IH0KLSAgICBDb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zV3JhcHBlciYgY291bnRRdWV1
aW5nU3RyYXRlZ3lCdWlsdGlucygpIHsgcmV0dXJuIG1fY291bnRRdWV1aW5nU3RyYXRlZ3lCdWls
dGluczsgfQotICAgIFJlYWRhYmxlU3RyZWFtQnVpbHRpbnNXcmFwcGVyJiByZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbUJ1aWx0aW5zOyB9Ci0gICAgUmVh
ZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnNXcmFwcGVyJiByZWFkYWJsZVN0cmVhbUNvbnRy
b2xsZXJCdWlsdGlucygpIHsgcmV0dXJuIG1fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRp
bnM7IH0KLSAgICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zV3JhcHBlciYgcmVhZGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpIHsgcmV0dXJuIG1fcmVhZGFibGVTdHJlYW1JbnRl
cm5hbHNCdWlsdGluczsgfQotICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVy
JiByZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVh
bVJlYWRlckJ1aWx0aW5zOyB9Ci0gICAgU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyJiBz
dHJlYW1JbnRlcm5hbHNCdWlsdGlucygpIHsgcmV0dXJuIG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRp
bnM7IH0KLSAgICBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBlciYgd3JpdGFibGVTdHJlYW1C
dWlsdGlucygpIHsgcmV0dXJuIG1fd3JpdGFibGVTdHJlYW1CdWlsdGluczsgfQotICAgIFdyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyJiB3cml0YWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zKCkgeyByZXR1cm4gbV93cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zO30K
LSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgTWVkaWFEZXZpY2VzQnVpbHRp
bnNXcmFwcGVyJiBtZWRpYURldmljZXNCdWlsdGlucygpIHsgcmV0dXJuIG1fbWVkaWFEZXZpY2Vz
QnVpbHRpbnM7IH0KLSAgICBOYXZpZ2F0b3JVc2VyTWVkaWFCdWlsdGluc1dyYXBwZXImIG5hdmln
YXRvclVzZXJNZWRpYUJ1aWx0aW5zKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3JVc2VyTWVkaWFCdWls
dGluczt9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICBSVENQZWVyQ29ubmVjdGlv
bkJ1aWx0aW5zV3JhcHBlciYgcnRjUGVlckNvbm5lY3Rpb25CdWlsdGlucygpIHsgcmV0dXJuIG1f
cnRjUGVlckNvbm5lY3Rpb25CdWlsdGluczsgfQotICAgIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJu
YWxzQnVpbHRpbnNXcmFwcGVyJiBydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zKCkg
eyByZXR1cm4gbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zOyB9Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiB2bTsKLSNpZiBFTkFCTEUoRkVUQ0hfQVBJKQotICAg
IEZldGNoSGVhZGVyc0J1aWx0aW5zV3JhcHBlciBtX2ZldGNoSGVhZGVyc0J1aWx0aW5zOwotICAg
IEZldGNoUmVzcG9uc2VCdWlsdGluc1dyYXBwZXIgbV9mZXRjaFJlc3BvbnNlQnVpbHRpbnM7Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJh
dGVneUJ1aWx0aW5zV3JhcHBlciBtX2J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGluczsK
LSAgICBDb3VudFF1ZXVpbmdTdHJhdGVneUJ1aWx0aW5zV3JhcHBlciBtX2NvdW50UXVldWluZ1N0
cmF0ZWd5QnVpbHRpbnM7Ci0gICAgUmVhZGFibGVTdHJlYW1CdWlsdGluc1dyYXBwZXIgbV9yZWFk
YWJsZVN0cmVhbUJ1aWx0aW5zOwotICAgIFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5z
V3JhcHBlciBtX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zOwotICAgIFJlYWRhYmxl
U3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGluczsKLSAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zV3JhcHBlciBtX3JlYWRh
YmxlU3RyZWFtUmVhZGVyQnVpbHRpbnM7Ci0gICAgU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFw
cGVyIG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnM7Ci0gICAgV3JpdGFibGVTdHJlYW1CdWlsdGlu
c1dyYXBwZXIgbV93cml0YWJsZVN0cmVhbUJ1aWx0aW5zOwotICAgIFdyaXRhYmxlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnNXcmFwcGVyIG1fd3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluczsK
LSNlbmRpZgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgTWVkaWFEZXZpY2VzQnVpbHRp
bnNXcmFwcGVyIG1fbWVkaWFEZXZpY2VzQnVpbHRpbnM7Ci0gICAgTmF2aWdhdG9yVXNlck1lZGlh
QnVpbHRpbnNXcmFwcGVyIG1fbmF2aWdhdG9yVXNlck1lZGlhQnVpbHRpbnM7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoV0VCX1JUQykKLSAgICBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zV3JhcHBlciBt
X3J0Y1BlZXJDb25uZWN0aW9uQnVpbHRpbnM7Ci0gICAgUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5h
bHNCdWlsdGluc1dyYXBwZXIgbV9ydGNQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zOwot
I2VuZGlmCi0KLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDFmMGFkOWM3MWY0YjdjYjQxMGFiZDdhZjYwM2RmZjEz
ZmViOTlkZC4uMzM0YTM2MTcxZjdhM2YzNzYwOTMwYTNmYzk4NDU3ZDIxMTg2ZmVmZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE2LTA3LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBHZW5lcmF0ZSBXZWJDb3JlIGJ1aWx0aW4gd3JhcHBlciBmaWxlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NDYxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29kZWdl
bi9tYWluLnB5OgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9t
X2pzX2J1aWx0aW5zKTogQWRkaW5nIGdlbmVyYXRlX3dyYXBwZXIgb3B0aW9uLgorICAgICAgICAo
QnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdHMpOiBVc2luZyB0aGlzIG9wdGlvbiBpbiBX
ZWJDb3JlIHRlc3QgY2FzZXMuCisKIDIwMTYtMDctMDcgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFRoZSB0ZXN0IGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvYmFzaWMt
dXBncmFkZS5odHRwcy5odG1sIGlzIGZhaWxpbmcuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdl
bi9tYWluLnB5CmluZGV4IDAwMzk2ZGI5YTM4YmUwZjA3YmUxODYzYjg4YWVkNDFlZGY5N2Q5Njku
LjE0M2JmMTZlYmY1NWI5ZmQxMWI2MzI1OThhMjgzMmU4MmQyMGNmZjIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29kZWdlbi9tYWluLnB5CkBAIC0yNiw3ICsyNiw2IEBACiBpbXBvcnQgb3MKIGlt
cG9ydCBvcy5wYXRoCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUK
IGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IGRldGVj
dF9zY21fc3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBTY3JpcHRFcnJvcgpAQCAtMzgsNyArMzcsNyBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRl
c3RzOgogICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1bHRzCiAgICAgICAg
IHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAKLSAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc19i
dWlsdGlucyhzZWxmLCBidWlsdGluc19maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBmcmFtZXdvcmtf
bmFtZT0iIiwgY29tYmluZWRfb3V0cHV0cz1GYWxzZSk6CisgICAgZGVmIGdlbmVyYXRlX2Zyb21f
anNfYnVpbHRpbnMoc2VsZiwgYnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSwgZnJhbWV3
b3JrX25hbWU9IiIsIGNvbWJpbmVkX291dHB1dHM9RmFsc2UsIGdlbmVyYXRlX3dyYXBwZXI9RmFs
c2UpOgogICAgICAgICBjbWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAgICAgICAnSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weScsCiAgICAgICAgICAgICAgICAn
LS1vdXRwdXQtZGlyZWN0b3J5Jywgb3V0cHV0X2RpcmVjdG9yeSwKQEAgLTQ5LDYgKzQ4LDkgQEAg
Y2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgaWYgY29tYmluZWRfb3V0cHV0
czoKICAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tY29tYmluZWQnKQogCisgICAgICAgIGlmIGdl
bmVyYXRlX3dyYXBwZXI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXdpdGgtd3JhcHBlci1m
aWxlcycpCisKICAgICAgICAgY21kLmFwcGVuZChidWlsdGluc19maWxlKQogCiAgICAgICAgIGV4
aXRfY29kZSA9IDAKQEAgLTExMCw3ICsxMTIsOCBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRl
c3RzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGNvbWJpbmVkX291
dHB1dHMgPSBvdXRwdXRfbW9kZSA9PSAiQ29tYmluZWQiCi0gICAgICAgICAgICBpZiBzZWxmLmdl
bmVyYXRlX2Zyb21fanNfYnVpbHRpbnMob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5w
dXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT1mcmFtZXdvcmtfbmFtZSwg
Y29tYmluZWRfb3V0cHV0cz1jb21iaW5lZF9vdXRwdXRzKToKKyAgICAgICAgICAgIGdlbmVyYXRl
X3dyYXBwZXIgPSBmcmFtZXdvcmtfbmFtZSA9PSAiV2ViQ29yZSIKKyAgICAgICAgICAgIGlmIHNl
bGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyhvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5
LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPWZyYW1ld29ya19u
YW1lLCBjb21iaW5lZF9vdXRwdXRzPWNvbWJpbmVkX291dHB1dHMsIGdlbmVyYXRlX3dyYXBwZXI9
Z2VuZXJhdGVfd3JhcHBlcik6CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKIAogICAg
ICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>