<?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>138237</bug_id>
          
          <creation_ts>2014-10-30 19:53:20 -0700</creation_ts>
          <short_desc>Web Inspector: standardize language-specific protocol generator file, class, and method prefixes</short_desc>
          <delta_ts>2014-11-19 13:41:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045214</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-10-30 19:53:20 -0700</bug_when>
    <thetext>ObjC and objc for Objective C, Cpp and cpp for C++. JS for JavaScript (duh)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045215</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-10-30 19:53:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/18833453&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045567</commentid>
    <comment_count>2</comment_count>
      <attachid>240802</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-01 19:56:41 -0700</bug_when>
    <thetext>Created attachment 240802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045568</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-01 19:58:23 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045569</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-01 19:58:37 -0700</bug_when>
    <thetext>Attachment 240802 did not pass style-queue:

ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:77:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:103:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:66:  [CppFrontendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:84:  [CppFrontendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:90:  [CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:106:  [CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:61:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:62:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:64:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:66:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py:30:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:66:  [ObjCBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:96:  [ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:58:  [CppAlternateBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppAlternateBackendDispatcherHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:60:  [CppAlternateBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppAlternateBackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:79:  [CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;CppAlternateBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:48:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:64:  [ObjCFrontendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:55:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:56:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:58:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:60:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:87:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:95:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:55:  [JSBackendCommandsGenerator.generate_output] Instance of &apos;JSBackendCommandsGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py:54:  [ObjCConversionHelpersGenerator.domains_to_generate] Instance of &apos;ObjCConversionHelpersGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py:67:  [ObjCConversionHelpersGenerator.generate_output] Instance of &apos;ObjCConversionHelpersGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py:87:  too many blank lines (3)  [pep8/E303] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:62:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:63:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:64:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:65:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:73:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:105:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:113:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:149:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:195:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:69:  [CppBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:86:  [CppBackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:92:  [CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:108:  [CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:120:  [CppBackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:167:  [CppBackendDispatcherHeaderGenerator._generate_async_handler_declaration_for_command] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:183:  [CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:198:  [CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:55:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:274:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:296:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:49:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:50:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;calculate_types_requiring_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:58:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:72:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:115:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:154:  [CppProtocolTypesHeaderGenerator._generate_typedefs_for_domain] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:173:  [CppProtocolTypesHeaderGenerator._generate_builders_for_domain] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:218:  [CppProtocolTypesHeaderGenerator._generate_class_for_object_declaration] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:246:  [CppProtocolTypesHeaderGenerator._generate_struct_for_enum_type] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:314:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:315:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits.&lt;lambda&gt;] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:327:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:42:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:48:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:50:  [ObjCConfigurationImplementationGenerator.domains_to_generate] Instance of &apos;ObjCConfigurationImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:67:  [ObjCConfigurationImplementationGenerator.generate_output] Instance of &apos;ObjCConfigurationImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:98:  [ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_command] Instance of &apos;ObjCConfigurationImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:112:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:131:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:147:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/g
enerate_cpp_protocol_types_implementation.py:48:  [CppProtocolTypesImplementationGenerator.generate_output] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:49:  [CppProtocolTypesImplementationGenerator.generate_output] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;calculate_types_requiring_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:59:  [CppProtocolTypesImplementationGenerator.generate_output] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:76:  [CppProtocolTypesImplementationGenerator._generate_enum_mapping] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;assigned_enum_values&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:86:  [CppProtocolTypesImplementationGenerator._generate_open_field_names] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:96:  [CppProtocolTypesImplementationGenerator._generate_builders_for_domain.&lt;lambda&gt;] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:105:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:59:  [CppFrontendDispatcherImplementationGenerator.generate_output] Instance of &apos;CppFrontendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:72:  [CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;CppFrontendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:79:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:114:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:130:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:164:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:185:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:201:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:68:  [CppBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:82:  [CppBackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:102:  [CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/objc_generator_templates.py:30:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:54:  [ObjCProtocolTypesImplementationGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypesImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:71:  [ObjCProtocolTypesImplementationGenerator.generate_output] Instance of &apos;ObjCProtocolTypesImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:58:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:59:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:62:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:136:  [generate_from_specification] Undefined variable &apos;JSBackendCommandsGenerator&apos;  [pylint/E0602] [5]
Total errors found: 97 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048457</commentid>
    <comment_count>5</comment_count>
      <attachid>240802</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-11-13 12:18:01 -0800</bug_when>
    <thetext>Comment on attachment 240802
Patch

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

r=me on the renames.

&gt; Source/JavaScriptCore/ChangeLog:24
&gt; +        * inspector/scripts/codegen/cpp_generator.py: Copied from Source/JavaScriptCore/inspector/scripts/codegen/generator.py.
&gt; +        (CppGenerator):
&gt; +        (CppGenerator.cpp_getter_method_for_type):
&gt; +        (CppGenerator.cpp_setter_method_for_type):
&gt; +        (CppGenerator.cpp_protocol_type_for_type):
&gt; +        (CppGenerator.cpp_protocol_type_for_type_member):
&gt; +        (CppGenerator.cpp_type_for_unchecked_formal_in_parameter):

You should eliminate these method lines, and include  just the files. The rest is unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049606</commentid>
    <comment_count>6</comment_count>
      <attachid>241816</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-18 14:55:03 -0800</bug_when>
    <thetext>Created attachment 241816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049647</commentid>
    <comment_count>7</comment_count>
      <attachid>241832</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-18 16:36:49 -0800</bug_when>
    <thetext>Created attachment 241832
Final patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049654</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-18 16:46:19 -0800</bug_when>
    <thetext>Attachment 241832 did not pass style-queue:

ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:77:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:103:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:66:  [CppFrontendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:84:  [CppFrontendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:90:  [CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:106:  [CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppFrontendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:61:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:62:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:64:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py:66:  [ObjCBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py:30:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:66:  [ObjCBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:96:  [ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:58:  [CppAlternateBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppAlternateBackendDispatcherHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:60:  [CppAlternateBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppAlternateBackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:79:  [CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;CppAlternateBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:48:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:64:  [ObjCFrontendDispatcherImplementationGenerator.generate_output] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:55:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:56:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:58:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:60:  [ObjCConfigurationHeaderGenerator.generate_output] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:87:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:99:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:106:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:111:  expected 1 blank line, found 0  [pep8/E301] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:55:  [JSBackendCommandsGenerator.generate_output] Instance of &apos;JSBackendCommandsGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py:54:  [ObjCConversionHelpersGenerator.domains_to_generate] Instance of &apos;ObjCConversionHelpersGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py:67:  [ObjCConversionHelpersGenerator.generate_output] Instance of &apos;ObjCConversionHelpersGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py:87:  too many blank lines (3)  [pep8/E303] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:62:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:63:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:64:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:65:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py:73:  [ObjCHeaderGenerator.generate_output] Instance of &apos;ObjCHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:105:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:113:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:149:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:195:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:69:  [CppBackendDispatcherHeaderGenerator.generate_output] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:86:  [CppBackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:92:  [CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:108:  [CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:120:  [CppBackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:167:  [CppBackendDispatcherHeaderGenerator._generate_async_handler_declaration_for_command] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:183:  [CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:198:  [CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;CppBackendDispatcherHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:55:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:274:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:296:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:49:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:50:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;calculate_types_requiring_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:58:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:72:  [CppProtocolTypesHeaderGenerator.generate_output] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:115:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:154:  [CppProtocolTypesHeaderGenerator._generate_typedefs_for_domain] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:173:  [CppProtocolTypesHeaderGenerator._generate_builders_for_domain] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:218:  [CppProtocolTypesHeaderGenerator._generate_class_for_object_declaration] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:246:  [CppProtocolTypesHeaderGenerator._generate_struct_for_enum_type] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:314:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:315:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits.&lt;lambda&gt;] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py:327:  [CppProtocolTypesHeaderGenerator._generate_forward_declarations_for_binding_traits] Instance of &apos;CppProtocolTypesHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:42:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:48:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:50:  [ObjCConfigurationImplementationGenerator.domains_to_generate] Instance of &apos;ObjCConfigurationImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:67:  [ObjCConfigurationImplementationGenerator.generate_output] Instance of &apos;ObjCConfigurationImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:98:  [ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_command] Instance of &apos;ObjCConfigurationImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:112:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protoco
l_types_implementation.py:131:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:147:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:48:  [CppProtocolTypesImplementationGenerator.generate_output] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:49:  [CppProtocolTypesImplementationGenerator.generate_output] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;calculate_types_requiring_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:59:  [CppProtocolTypesImplementationGenerator.generate_output] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:76:  [CppProtocolTypesImplementationGenerator._generate_enum_mapping] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;assigned_enum_values&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:86:  [CppProtocolTypesImplementationGenerator._generate_open_field_names] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:96:  [CppProtocolTypesImplementationGenerator._generate_builders_for_domain.&lt;lambda&gt;] Instance of &apos;CppProtocolTypesImplementationGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:105:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:59:  [CppFrontendDispatcherImplementationGenerator.generate_output] Instance of &apos;CppFrontendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:72:  [CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;CppFrontendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:79:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:114:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:130:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:164:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:185:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:201:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:68:  [CppBackendDispatcherImplementationGenerator.generate_output] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:82:  [CppBackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:102:  [CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;wrap_with_guard_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/objc_generator_templates.py:30:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:54:  [ObjCProtocolTypesImplementationGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypesImplementationGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:71:  [ObjCProtocolTypesImplementationGenerator.generate_output] Instance of &apos;ObjCProtocolTypesImplementationGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:58:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:59:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:62:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:136:  [generate_from_specification] Undefined variable &apos;JSBackendCommandsGenerator&apos;  [pylint/E0602] [5]
Total errors found: 99 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049843</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-19 11:16:12 -0800</bug_when>
    <thetext>Committed r176329: &lt;http://trac.webkit.org/changeset/176329&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049895</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-11-19 13:41:52 -0800</bug_when>
    <thetext>Follow up fixes:
http://trac.webkit.org/changeset/176335</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240802</attachid>
            <date>2014-11-01 19:56:41 -0700</date>
            <delta_ts>2014-11-13 12:18:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138237-20141101195649.patch</filename>
            <type>text/plain</type>
            <size>463224</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZTY3NTMzMmI3MzQwMzBmZGEzYzMxNTQ1ODkwOGIyNDc2ODY5ZWU3Li5jMTE1YTVlZWRlMjZlZGU2
YzZhMmVjNWRjOTk0M2YzZjQwYWVmYjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjYgQEAKKzIwMTQtMTEtMDEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN0YW5kYXJkaXplIGxhbmd1YWdlLXNw
ZWNpZmljIHByb3RvY29sIGdlbmVyYXRvciBmaWxlLCBjbGFzcywgYW5kIG1ldGhvZCBwcmVmaXhl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MjM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2V0dGxl
IG9uIGNwcC9vYmpjL2pzIGZpbGUgcHJlZml4ZXMgYW5kIENwcC9PYmpDL0pTIGNsYXNzIHByZWZp
eGVzIGZvciBnZW5lcmF0b3JzLgorICAgICAgICBNb3ZlIEMrKy1zcGVjaWZpYyBzdGF0aWMgbWV0
aG9kcyBpbnRvIENwcEdlbmVyYXRvciBhbmQgYWRkIGNwcF8gcHJlZml4ZXMgd2hlcmUgcmVsZXZh
bnQuCisgICAgICAgIFNwbGl0IHRoZSB0ZW1wbGF0ZXMgZmlsZSBpbnRvIGxhbmd1YWdlLXNwZWNp
ZmljIHRlbXBsYXRlIGZpbGVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL19faW5pdF9fLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvci5weTogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5LgorICAgICAgICAoQ3BwR2VuZXJh
dG9yKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZSk6
CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAg
ICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAg
KENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIpOgorICAgICAg
ICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRl
cik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2
ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVf
bWVtYmVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25h
bWUpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFt
ZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19w
YXJhbWV0ZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9w
YXJhbWV0ZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRf
cGFyYW1ldGVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0
aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAg
KENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkuCisgICAgICAgIChDcHBHZW5lcmF0b3JUZW1wbGF0ZXMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkuCisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJh
dGVfb3V0cHV0KToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAg
ICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weS4KKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChD
cHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291
dHB1dCk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQuZm9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWlucyk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbnMuQWx0ZXJuYXRlSW5zcGVjdG9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1
Y3Rvcl9mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9k
b21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6Cisg
ICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Lgor
ICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAg
KENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToK
KyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3Rv
X2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAg
ICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9y
X2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFt
ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weS4KKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMp
OgorICAgICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dl
bmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51
bV9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNf
ZW51bV9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2Vu
dW1fbWVtYmVyLmFwcGx5X2luZGVudGF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3Rf
Zm9yX2VudW1fdHlwZSk6CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToK
KyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAg
KF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAgICAoX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weS4KKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6
CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0
X18pOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91
dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKToKKyAgICAgICAgKENw
cFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVs
ZF9uYW1lcyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29i
amVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5LgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZS5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW4pOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9t
YWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4uZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5LgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVj
bGFyYXRpb25zKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyk6CisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAg
ICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAg
ICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9m
aWxlbmFtZSk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmpDQ29uZmln
dXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3Jf
Y29tbWFuZCk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weS4KKyAgICAg
ICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNDb25m
aWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iakNDb25maWd1
cmF0aW9uSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpDQ29u
ZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2Jq
Q0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50
ZXJmYWNlX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVu
dGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbi5weS4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAg
ICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVy
YXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMpOgorICAgICAgICAo
T2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2l2
YXJzKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9kZWFsbG9jKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWlu
KToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKToKKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl92YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5LgorICAgICAgICAoYWRkX25ld2xpbmUpOgor
ICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakND
b252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDQ29udmVy
c2lvbkhlbHBlcnNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNDb252
ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9i
akNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAo
T2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25f
ZnVuY3Rpb25zKToKKyAgICAgICAgKE9iakNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJz
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0
ZXIpOgorICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9l
bnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKToKKyAgICAgICAgKE9iakNDb252ZXJzaW9uSGVs
cGVyc0dlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5LgorICAgICAgICAoT2JqQ0Zyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVu
YW1lKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVu
dF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyk6CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50KToKKyAgICAgICAg
KE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVf
ZXZlbnRfc2lnbmF0dXJlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkuCisgICAgICAgIChhZGRfbmV3bGluZSk6
CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgor
ICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlv
bnMpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bXMpOgorICAg
ICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZXMpOgorICAgICAgICAoT2Jq
Q0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9u
KToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9lbnVtKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2VudW0uTlNfRU5VTSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90
eXBlX2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9p
bml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyk6CisgICAgICAgIChPYmpDSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkpOgorICAgICAgICAoT2JqQ0hlYWRlckdl
bmVyYXRvci5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMpOgorICAgICAgICAoT2JqQ0hlYWRl
ckdlbmVyYXRvci5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2wpOgorICAgICAgICAo
T2JqQ0hlYWRlckdlbmVyYXRvci5fY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQpOgorICAgICAg
ICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcyk6CisgICAg
ICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNl
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50
ZXJuYWxfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVy
LnB5LgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9i
akNJbnRlcm5hbEhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDSW50ZXJu
YWxIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNJbnRlcm5h
bEhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0ludGVybmFs
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJm
YWNlcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChhZGRfbmV3bGluZSk6CisgICAg
ICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAg
KE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAg
ICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlv
bnMpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJl
ZF9tZW1iZXJzKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVy
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAg
ICAgICAgKEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRfc2V0
X21ldGhvZF9mb3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9zdHJpbmdfZm9yX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnByb3Rv
Y29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxf
ZXZlbnRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl90eXBlX3dpdGhfbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdl
bmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQu
CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9w
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGVfbWVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5
cGUpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9y
X3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgIChBbHRlcm5hdGVJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcik6IERlbGV0ZWQuCisgICAgICAgIChBbHRlcm5hdGVJbnNwZWN0b3Ip
OiBEZWxldGVkLgorICAgICAgICAodm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChIYXNoTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEJ1aWxkZXIpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNJbnNwZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmplY3RpdmVfYy5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9y
VGVtcGxhdGVzKToKKyAgICAgICAgKEFsdGVybmF0ZUluc3BlY3Rvcik6CisgICAgICAgIChPYmpD
SW5zcGVjdG9yKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHk6CisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorCiAyMDE0LTExLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKENNYWtlKTogTWFrZSBpdCBwb3NzaWJsZSB0
byBidWlsZCB3aXRob3V0IGludHJvc3BlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCA4Mjg3ZTdlZjA0NTMwZDc5ZTE1ZmZkMTYwMWZjZmFiN2JhYmExMzE2Li5mYWJm
ODg3YjA4NGM0NzEyMTQyYmFlZGYwZTIyM2VkOGYxNGI3MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC05OTIsMTMgKzk5MiwxNSBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Nj
cmlwdAogCiBzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFMKICAg
ICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0gICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQotICAgICR7
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RP
Ul9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQotICAgICR7SmF2
YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFk
ZXIucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkK
KyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1ND
UklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAg
JHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9j
cHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNU
T1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQogICAgICR7SmF2YVNjcmlw
dENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL19faW5pdF9fLnB5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGZhMWMyMGU5MDlmYjI4NmI3
YjQ4MTZjYzAxMmEyZjc0ZjUyZTA4N2UuLmRjODA5NmMwNDc4MWE2YzBmZmEzYWRmMDQ4ODgyNzlh
NjI1NzFmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xNDQsMTMgKzE0NCwxNSBAQCBlbmRpZgogCiBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMg
PSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRf
Xy5weSBcCi0JJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAot
CSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAotCSQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IFwKKwkkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3IucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2
YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKIAkkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBcCiAJJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggMTIxZDc3MzE5NDk5ZDZmMDRhZTViYzhi
M2M4MGQ3NTlkY2Y3MmE3OS4uOWRmNzUyYTlkMGE2Yjg0MjIyMmEwOWE4NDRlZjMxMzZhMDdjMmIw
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC0xNjU4LDEzICsx
NjU4LDE1IEBACiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGlzdC5qc29uIiAvPgotICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5w
eSIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSIg
Lz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkiIC8+Ci0gICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcY29kZWdlblxnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSIgLz4K
KyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGNwcF9nZW5l
cmF0b3IucHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29k
ZWdlblxjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSIgLz4KKyAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hl
YWRlci5weSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2Rl
Z2VuXGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSIgLz4KKyAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2pz
X2JhY2tlbmRfY29tbWFuZHMucHkiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlblxnZW5lcmF0b3IucHkiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IiAvPgogICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cbW9kZWxzLnB5IiAv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IGRiN2M0ZTA5MzViYzgwY2QwNjYyZGI0NDY3NWE4NTdjNTRkMDExYTUuLjUyZjBmMjA2ZGYw
N2UzZjNmZWZhZjg3YjQ1ZmMzNjMxNDA4MmEyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTQxOTcsMjUgKzQxOTcsMzEgQEAg77u/
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXF9faW5pdF9fLnB5Ij4KICAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tl
bmRfY29tbWFuZHMucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGNvZGVnZW5cY3BwX2dlbmVyYXRvci5weSI+CiAgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3Jp
cHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2Vu
XGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Ij4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNj
cmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSI+CiAg
ICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05v
bmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5Ij4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNc
Y29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNv
ZGVnZW5cZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Ij4KICAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4K
LSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRl
X3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSI+CiAgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48
L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNj
cmlwdHNcY29kZWdlblxnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSI+
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5Ij4KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgorICAgIDwvTm9uZT4KKyAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weSI+CisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNv
ZGVnZW48L0ZpbHRlcj4KKyAgICA8L05vbmU+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Ij4KICAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9u
ZT4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVy
YXRvci5weSI+CkBAIC00MzUwLDQgKzQzNTYsNCBAQCDvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVu
Y29kaW5nPSJ1dGYtOCI/PgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L01BU00+
CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
KzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGQyMmEyYjg3NjVh
MWM2Njk4NjY1NmY1Zjc5YThjNjcwYThiZTFlYi4uY2U4ZjM3YmQ2ZTRjYmRkMTQwNGZkZGQ3ZWIy
YTllNDE0MzljZWUzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExODgsMTgg
KzExODgsMTcgQEAKIAkJQTVFQTcwRTcxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRTQxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE1RUE3MEU4MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1RUE3MEU1MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RUE3MEU2MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3
MEVDMTlGNUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMgLyogZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8q
IGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNUVBNzBFRTE5
RjVCNUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUQxOUY1QjVDNDAw
OThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNUVBNzEwMzE5RjZERTZGMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVGMTlG
NkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA1MTlG
NkRFNzQwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRl
ci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3
MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlBNUVBNzEwNjE5RjZERTc2MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA3MTlGNkRFNzgwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMzE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5ICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA4
MTlGNkRFN0EwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVFQTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMDkxOUY2REU3QzAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY1MTlGNkRFNUEwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMEExOUY2REU3RTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMEIxOUY2REU4MDAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjcxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTBDMTlG
NkRFODIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwMzE5RjZERTZGMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMDE5RjZE
RTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlv
bl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlBNUVBNzEwNjE5RjZERTc2MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwNzE5RjZERTc4MDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDgxOUY2REU3QTAwOThGNUVDIC8qIGdlbmVyYXRl
X29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY0MTlGNkRFNUEwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcx
MDkxOUY2REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjUxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBNUVBNzEwQzE5RjZERTgyMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0
b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVB
NzBGODE5RjZERTVBMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0b3IucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVFQTcxMEUxOUY2REY4MTAwOThG
NUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcxMEQxOUY2REY4MTAwOThG
NUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1RkQwMDY3MTg5QUZFOUMw
MDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTVGRDAwNjUxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFy
Z3VtZW50cy5jcHAgKi87IH07CiAJCUE1RkQwMDY4MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRB
cmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RkQwMDY2MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTU2NiwxNiArMTU2NSwz
MyBAQAogCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZD
QUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGRTE4QTQxNkJB
RUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDNDcwM0NDMDE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzQ3MDNDQkYxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1h
bmRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzQ3MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDQ0UxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDMzE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUM0NzAzQ0Q2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQjE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUM0NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQzE5Mjg0
NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCUM0OUZFNEFCMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9w
cm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9j
b2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCUM0OUZFNEFDMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDNEY0QjZEOTFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0RjRCNkNGMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weSAqLzsgfTsKKwkJQzRGNEI2REExQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5l
cmF0b3IucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5ICovOyB9OworCQlD
NEY0QjZFMTFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzRGNEI2RDcxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CisJCUM0RjRCNkUyMUEwNUM3NkYwMDVD
QUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ4MUEwNUM3NkYwMDVDQUI3NiAvKiBv
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IH07CisJCUM0RjRCNkUzMUEwNUM4MTAwMDVD
QUI3NiAvKiBfX2luaXRfXy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5pdF9fLnB5ICovOyB9
OworCQlDNEY0QjZFNDFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVf
Y3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyB9OworCQlDNEY0
QjZFNjFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFNzFBMDVDODExMDA1Q0FCNzYgLyogZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYwMTlGNkRFNUEw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSAqLzsgfTsKKwkJQzRGNEI2RTgxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFOTFBMDVDODExMDA1Q0FC
NzYgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMjE5RjZE
RTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5ICovOyB9OworCQlDNEY0QjZFQTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19j
b252ZXJzaW9uX2hlbHBlcnMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Nv
bnZlcnNpb25faGVscGVycy5weSAqLzsgfTsKKwkJQzRGNEI2RUIxQTA1QzgxMTAwNUNBQjc2IC8q
IGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjQxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLzsgfTsKKwkJQzRGNEI2RUMxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRl
X29iamNfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIu
cHkgKi87IH07CisJCUM0RjRCNkVEMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2lu
dGVybmFsX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaW50ZXJu
YWxfaGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFRTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgKi87IH07CisJCUM0RjRCNkVGMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0b3IucHkgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NCMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi87IH07CisJCUM0RjRCNkYwMUEwNUM4MTEw
MDVDQUI3NiAvKiBtb2RlbHMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi87IH07
CisJCUM0RjRCNkYxMUEwNUM4MTEwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjgxOUY2REU1
QTAwOThGNUVDIC8qIG9iamNfZ2VuZXJhdG9yLnB5ICovOyB9OworCQlDNEY0QjZGMjFBMDVDOEFD
MDA1Q0FCNzYgLyogZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzMxOTI4NDRDQzAwMTNG
QkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgKi87IH07CisJCUM0RjRCNkYz
MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkNGMUEwNUM3NkYwMDVD
QUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgfTsKKwkJQzRGNEI2RjQxQTA1
Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZEMDFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvci5weSAqLzsgfTsKKwkJQzRGNEI2RjUxQTA1Qzk4NDAwNUNBQjc2IC8qIGdlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZENzFBMDVDNzZGMDA1Q0FCNzYgLyog
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsgfTsKKwkJ
QzRGNEI2RjYxQTA1Qzk4NDAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ4MUEw
NUM3NkYwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IH07CiAJCURD
MDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5MDE5RDhC
RTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURDMDAwMzk4MTlEQkE3MDYwMDAy
M0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5NjE5REJBNzA2MDAwMjNFQjAgLyogREZH
UHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovOyB9OwogCQlEQzAwMDM5OTE5REJBNzA2MDAwMjNF
QjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAwMzk3MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRM
b2NhbFNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yODcxLDE4ICsyODg3LDE3IEBACiAJCUE1RUE3MEU0MTlGNUIxMDEwMDk4
RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RUE3MEU1MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RUE3MEU2MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdl
bmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTVFQTcwRUQxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb250ZXh0UmVmSW5zcGVjdG9y
U3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNUVBNzBFRjE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVj
dGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE1RUE3MEYwMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3
MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRl
X29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVt
ZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3MEYzMTlGNkRF
NUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19jb252ZXJzaW9uX2hlbHBlcnMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1
RUE3MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjUxOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRl
ci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjcxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlw
ZXNfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3
MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGMDE5RjZERTVBMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBn
ZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTVFQTcwRjUxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGODE5RjZERTVBMDA5OEY1RUMgLyogb2JqY19n
ZW5lcmF0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBvYmpjX2dl
bmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFQTcxMEQxOUY2REY4
MTAwOThGNUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVGRDAwNjUxODlBRkU5
QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JpcHRBcmd1bWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNUZEMDA2NjE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEFyZ3VtZW50cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzI0MywxNiArMzI1OCwyMCBAQAogCQlDMkZFMThBMzE2
QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzQ3MDNDQkYxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9
ICJnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNDcwM0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBfX2luaXRfXy5weTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2Ny
aXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAz
Q0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzQ3MDNDQ0ExOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IHBhdGggPSBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdG9yLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxz
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gbW9kZWxzLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkgLyogZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5w
eXRob247IHBhdGggPSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2Q0YxQTA1Qzc2RjAwNUNBQjc2IC8q
IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gY3BwX2dlbmVyYXRvci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDExQTA1Qzc2RjAwNUNBQjc2IC8qIGdl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQyMUEwNUM3NkYwMDVD
QUI3NiAvKiBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzRGNEI2RDMxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9
IGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDQxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQ1MUEw
NUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDYx
QTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Nw
cF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzRGNEI2RDcxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEY0QjZEODFBMDVDNzZGMDA1Q0FCNzYgLyog
b2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2
IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
YXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzAwMDM5MDE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGgg
PSBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTI4MywyNyArNTMwMiwzMCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQlDNDcwM0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi8s
Ci0JCQkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAotCQkJCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovLAotCQkJCUM0NzAzQ0M0MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAot
CQkJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAotCQkJCUM0NzAzQ0M3
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAotCQkJCUE1RUE3MEYw
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovLAotCQkJCUE1
RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8sCi0JCQkJQTVF
QTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQTVFQTcwRjUxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSAqLywKLQkJCQlBNUVBNzBGNjE5
RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5
ICovLAotCQkJCUE1RUE3MEY3MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y190eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLywKLQkJCQlBNUVBNzBGODE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi8sCi0JCQkJQzQ5RkU0QTcxOUFBQzgzRTAw
RjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAqLywKLQkJCQlDNDlG
RTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgKi8sCisJCQkJQzRGNEI2Q0YxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJCUM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBf
Z2VuZXJhdG9yLnB5ICovLAorCQkJCUE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCisJCQkJQzRG
NEI2RDExQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5ICovLAorCQkJCUM0RjRCNkQyMUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0RjRCNkQz
MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgKi8sCisJCQkJQzRGNEI2RDQxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0RjRCNkQ1MUEw
NUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICov
LAorCQkJCUM0RjRCNkQ2MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgKi8sCisJCQkJQTVFQTcwRUYxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSAqLywKKwkJCQlBNUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRjExOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgKi8sCisJ
CQkJQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlv
bl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi8sCisJCQkJQTVFQTcwRjQxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLywKKwkJCQlBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19oZWFkZXIucHkgKi8sCisJCQkJQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5ICovLAorCQkJCUM0RjRCNkQ3MUEwNUM3NkYwMDVD
QUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICov
LAogCQkJCUM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5
ICovLAogCQkJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8sCiAJ
CQkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLywKKwkJCQlDNEY0QjZE
ODFBMDVDNzZGMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJ
CUE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSAqLywKIAkJCSk7
CiAJCQlwYXRoID0gY29kZWdlbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01MzUz
LDEwICs1Mzc1LDggQEAKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBDRjg3MTEgLyogQVJNNjRBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBB
Uk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBFMTlGNkRGODEwMDk4RjVF
QyAvKiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICov
LAotCQkJCUM0OUZFNEFCMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBl
c19oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVh
ZGVycyAqLywKKwkJCQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMgLyogZ2VuZXJhdGVfY3BwX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUM0OUZFNEFDMTlBQUM4NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2
MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUQy
RURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNTM2NywyNSArNTM4NywyMCBAQAogCQkJCUMyREE3Nzgz
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUz
MjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29u
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21p
bi5weSBpbiBIZWFkZXJzICovLAotCQkJCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTVFQTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAotCQkJCUM0
NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovLAogCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Nv
bmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEw
NzE5RjZERTc4MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxw
ZXJzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMDgxOUY2REU3QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcx
MEIxOUY2REU4MDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMEMxOUY2REU4MjAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMDkxOUY2
REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBpbiBIZWFkZXJz
ICovLAorCQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZp
Z3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDYxOUY2REU3NjAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA3MTlGNkRFNzgwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2NvbnZlcnNpb25faGVscGVycy5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA4MTlG
NkRFN0EwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlB
NUVBNzEwQzE5RjZERTgyMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAq
LywKKwkJCQlBNUVBNzEwOTE5RjZERTdDMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dG9yLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlD
NDcwM0NDMDE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJz
ICovLAotCQkJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Nv
bW1hbmRzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcw
M0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVF
QTcxMDMxOUY2REU2RjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwMzE5RjZERTZGMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2MzhBMThEN0Qw
RkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTYxMDcsNiArNjEyMiwxMCBAQAogCQkJCUE1N0QyM0VFMTg5MUI1NTQwMDMxQzdGQSAvKiBSZWd1
bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2ODJGQjMxOUJDQjM2NDAwRkEz
QkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVF
RDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUM0RjRCNkY1MUEw
NUM5ODQwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzRGNEI2RjYxQTA1Qzk4NDAwNUNBQjc2IC8qIG9i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0RjRCNkYzMUEw
NUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICov
LAorCQkJCUM0RjRCNkY0MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8q
IFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDIyLDcgKzY0
NDEsMjYgQEAKIAkJCWlzYSA9IFBCWFJlc291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQzRGNEI2RjIxQTA1QzhBQzAw
NUNBQjc2IC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gUmVzb3VyY2VzICov
LAogCQkJCUE1M0YxQUMwMThDOTBGOEYwMDcyRUI2RCAvKiBmcmFtZXdvcmsuc2IgaW4gUmVzb3Vy
Y2VzICovLAorCQkJCUM0RjRCNkUzMUEwNUM4MTAwMDVDQUI3NiAvKiBfX2luaXRfXy5weSBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RDkxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZEQTFBMDVDNzZGMDA1
Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTQx
QTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTYxQTA1QzgxMTAwNUNB
Qjc2IC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJQzRGNEI2RTcxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLywKKwkJ
CQlDNEY0QjZFODFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTkxQTA1QzgxMTAwNUNBQjc2
IC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJQzRGNEI2RUExQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNf
Y29udmVyc2lvbl9oZWxwZXJzLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFQjFBMDVD
ODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFQzFBMDVDODExMDA1Q0FCNzYg
LyogZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkVE
MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTExQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICovLAorCQkJ
CUM0RjRCNkVFMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIFJl
c291cmNlcyAqLywKKwkJCQlDNEY0QjZFRjFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdG9yLnB5
IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZGMDFBMDVDODExMDA1Q0FCNzYgLyogbW9kZWxz
LnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFMjFBMDVDNzZGMDA1Q0FCNzYgLyogb2Jq
Y19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZGMTFB
MDVDODExMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3IucHkgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
X19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9fX2luaXRfXy5weQppbmRleCBlOWM2N2I1ZmQ0ZGNhOWYzMzJhOWFhZTBmMmJkMDA2MWE5
ZDNlMzY0Li42MDc3ZmE5N2E5N2Y4YzIxN2NiMGFiNjM3MGE4NTY0ZjZhNDljNjdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2lu
aXRfXy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9fX2luaXRfXy5weQpAQCAtMiwyMSArMiwyMyBAQAogCiBmcm9tIG1vZGVscyBpbXBvcnQg
KgogZnJvbSBnZW5lcmF0b3IgaW1wb3J0ICoKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgKgor
ZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgKgogCi1mcm9tIGdlbmVyYXRlX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2JhY2tlbmRf
Y29tbWFuZHMgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1w
b3J0ICoKLWZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25m
aWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbnZlcnNpb25faGVscGVycyBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVy
YXRlX29iamVjdGl2ZV9jX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlw
ZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBv
cnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyIGltcG9y
dCAqCitmcm9tIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycyBpbXBvcnQgKgorZnJv
bSBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2Jq
Y19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTgzZTJmYTY5ODE0ZDdmNGYwOTNjYjQ4NjEwNDA1NDNiMDc2NjE2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTAsMCArMSwzMDEgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKKworZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVU
eXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworX1BSSU1JVElWRV9U
T19DUFBfTkFNRV9NQVAgPSB7CisgICAgJ2Jvb2xlYW4nOiAnYm9vbCcsCisgICAgJ2ludGVnZXIn
OiAnaW50JywKKyAgICAnbnVtYmVyJzogJ2RvdWJsZScsCisgICAgJ3N0cmluZyc6ICdTdHJpbmcn
LAorICAgICdvYmplY3QnOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAorICAgICdhbnkn
OiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZScKK30KKworIyBUaGlzIGNsYXNzIGNvbnRhaW5z
IGV4dHJhIHN0YXRpYyBtZXRob2RzIHVzZWQgZm9yIGdlbmVyYXRpb24sIGJ1dCBkb2VzCisjIG5v
dCBwYXJ0aWNpcGF0ZSBpbiBhbnkgaW5oZXJpdGFuY2UgaGllcmFyY2h5LiBGaWxlIGdlbmVyYXRv
cnMgc2hvdWxkCisjIGV4dGVuZCB0aGUgZ2VuZXJpYyAiR2VuZXJhdG9yIiBjbGFzcyBpbnN0ZWFk
LgorY2xhc3MgQ3BwR2VuZXJhdG9yOgorCisgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1
bGF0aW9uIHJvdXRpbmVzLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX2dldHRlcl9t
ZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmpl
Y3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAg
ICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ2dldEludGVnZXInCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ251
bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXREb3VibGUnCisgICAgICAgICAgICBl
bGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdn
ZXRWYWx1ZScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXQn
ICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5j
cHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiAnc2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlz
ICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldEludGVnZXInCisgICAgICAg
ICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ251bWJlcic6CisgICAgICAgICAgICAgICAg
cmV0dXJuICdzZXREb3VibGUnCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMg
J2FueSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFt
ZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBl
LmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlw
ZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgICMgR2VuZXJhdGUgdHlwZSByZXByZXNlbnRh
dGlvbnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgYW5kIGxlbihfdHlwZS5tZW1iZXJzKSA9PSAwOgorICAgICAg
ICAgICAgcmV0dXJuICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZSkpOgorICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9k
ZWNsYXJhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51
bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIHJl
dHVybiAnOjonLmpvaW4oW0NwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShv
YmplY3RfZGVjbGFyYXRpb24udHlwZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBh
cmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0g
X3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KKworICAg
ICAgICBzaWdpbCA9ICcqJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAnJicKKyAgICAg
ICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZpbmVk
IHByb3BlcnRpZXMuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9y
IF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4g
J2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nICsgc2lnaWwKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25h
bWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVy
biAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBj
cHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25h
bWUKKworICAgICAgICByZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0
ZXJfdHlwZSIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2NoZWNr
ZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICByZXR1cm4gQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcihtZW1iZXIpOgorICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShtZW1i
ZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlz
X29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2Jq
ZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBDcHBHZW5l
cmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAg
IGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0
JyAlIGJ1aWxkZXJfdHlwZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICAgICAg
cmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxp
YXNlZF90eXBlKQorICAgICAgICAgICAgZWxpZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVk
X25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMm
JyAlIGJ1aWxkZXJfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gYnVpbGRlcl90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaW4gWydhbnknXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4nCisgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFs
OgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCisg
ICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3Vz
OgorICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0gdWNmaXJzdCh0eXBlX25hbWUpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0gJ0luc3Bl
Y3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICclcyonICUgZW51bV90eXBlX25hbWUKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcycgJSBlbnVtX3R5cGVfbmFtZQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIo
cGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjwlcz4mJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlw
ZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAg
ICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUo
X3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBf
bmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBj
cHBfbmFtZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNw
ZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2Nv
bDo6JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3
X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGZvcm1hbCBvdXQg
cGFyYW1ldGVyIHR5cGUuIikKKworICAgICMgRklYTUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBk
aWZmZXJlbnQgZnJvbSBvdXQgcGFyYW1ldGVyczsgdGhleSBjb3VsZCBiZSB1bmlmaWVkLgorICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0
ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90
eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9i
amVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVz
PicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQor
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PCVzPioiICUgY3BwX25hbWUKKyAg
ICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVt
YmVyJ106CisgICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicg
JSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Bw
X25hbWUKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGZvcm1hbCBhc3luYyBw
YXJhbWV0ZXIgdHlwZS4iKQorCisgICAgIyBJbi1wYXJhbWV0ZXJzIGRvbid0IHVzZSBidWlsZGVy
IHR5cGVzLCBiZWNhdXNlIHRoZXkgY291bGQgYmUgcGFzc2VkCisgICAgIyAib3BlbiB0eXBlcyIg
dGhhdCBhcmUgbWFudWFsbHkgY29uc3RydWN0ZWQgb3V0IG9mIEluc3BlY3Rvck9iamVjdHMuCisK
KyAgICAjIEZJWE1FOiBPbmx5IHBhcmFtZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgb3BlbiB0eXBl
cyBzaG91bGQgbmVlZCBub24tYnVpbGRlciBwYXJhbWV0ZXIgdHlwZXMuCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6
CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0
aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJu
ICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4iCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYg
X3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIlJlZlB0cjwlcz4iICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnc3RyaW5nJywg
J2ludGVnZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDwlcz4iICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90
eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwg
T2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PCVzPiIgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAg
IHJldHVybiAnJXMnICUgYnVpbGRlcl90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5z
cGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBf
YXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNs
YXJhdGlvbik6CisKKyAgICAgICAgZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90
eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgQWxpYXNlZFR5
cGUpOgorICAgICAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9t
ZW1iZXIudHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKKyAg
ICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIo
dHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKworICAgICAgICByZXR1cm4gYXNzZXJ0
aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpOgorICAgICAgICBy
ZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJhd19uYW1lKCkpCisK
KyAgICAjIERlY2lkZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVjZXNzYXJ5IGluIGEg
c2l0dWF0aW9uLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3VzZV93cmFwcGVy
X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6CisgICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZShf
dHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKKyAgICAgICAg
cmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNp
bnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSA9PSAib2JqZWN0IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1w
bGF0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA0ODg0MmJmYzViNmNkODJiZDU0ODk2NzYzMjg3N2JkMDll
YWUxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0wLDAgKzEsMjc2
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgR2VuZXJhdG9yIHRlbXBsYXRlcywgd2hpY2ggY2Fu
IGJlIGZpbGxlZCB3aXRoIHN0cmluZy5UZW1wbGF0ZS4KKyMgRm9sbG93aW5nIGFyZSBjbGFzc2Vz
IHRoYXQgZmlsbCB0aGUgdGVtcGxhdGVzIGZyb20gdGhlIHR5cGVjaGVja2VkIG1vZGVsLgorCitj
bGFzcyBDcHBHZW5lcmF0b3JUZW1wbGF0ZXM6CisKKyAgICBIZWFkZXJQcmVsdWRlID0gKAorICAg
ICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KKyNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0
cmluZ30KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyR7aW5jbHVkZXN9CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCiske3R5cGVkZWZzfSIiIikKKworICAgIEhlYWRlclBvc3RsdWRlID0g
KAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikK
KworICAgIEltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAke3ByaW1hcnlJbmNsdWRlfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworJHtzZWNvbmRhcnlJbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisg
ICAgSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBBbHRlcm5h
dGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiI2lmbmRlZiAke2hlYWRlckd1
YXJkU3RyaW5nfQorI2RlZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyR7aW5jbHVkZXN9CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBkaXNwYXRjaGVyOyB9CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Cit9OworIiIiKQorCisgICAgQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFk
ZXJQb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoJHtoZWFkZXJHdWFyZFN0cmluZ30pIiIiKQorCisgICAgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24gPSAoCisg
ICAgIiIiY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXIoKSB7IH0KKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK307IiIiKQorCisgICAgQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24gPSAoCisgICAgIiIi
JHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlz
cGF0Y2hlckRlY2xhcmF0aW9uID0gKAorICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Ciske2Nv
bW1hbmREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwg
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0
ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyOworI2VuZGlmCit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5
bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCisgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNy
b30gJHtjYWxsYmFja05hbWV9IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICAke2NhbGxiYWNr
TmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwg
aW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsKKyAg
ICB9OworICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0g
MDsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gg
PSAoCisgICAgIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyR7ZGlzcGF0Y2hDYXNlc30K
KyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBt
YWtlU3RyaW5nKCdcXCcnLCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90
IGZvdW5kIikpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25M
YXJnZVN3aXRjaCA9ICgKKyIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgdHlwZWRl
ZiB2b2lkIChJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFu
ZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hN
YXA7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNw
YXRjaE1hcCwgKCkpOworICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBjb21t
YW5kc1tdID0geworJHtkaXNwYXRjaENhc2VzfQorICAgICAgICB9OworICAgICAgICBzaXplX3Qg
bGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29t
bWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgSGFzaE1h
cDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1l
dGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcXCcnLCAiJHtkb21h
aW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5n
ZXQoKSk7Cit9IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRvbWFp
bkNvbnN0cnVjdG9yID0gKAorICAgICIiIlBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
ICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQorI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgICwgbV9hbHRlcm5hdGVEaXNwYXRjaGVyKG51bGxwdHIpCisj
ZW5kaWYKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oQVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIHRoaXMpOworfSIiIikKKworICAg
IEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9
ICgKKyIiIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOworJHtpblBhcmFtZXRlckRlY2xhcmF0aW9uc30KKyAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwnJXNcJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfSIpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisiIiIpCisKKyAgICBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kID0gKAorIiIiSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxi
YWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERp
c3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KKwordm9pZCBJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06
OnNlbmRTdWNjZXNzKCR7Zm9ybWFsUGFyYW1ldGVyc30pCit7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworJHtvdXRQ
YXJhbWV0ZXJBc3NpZ25tZW50c30KKyAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9y
U3RyaW5nKCkpOworfSIiIikKKworICAgIEZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNo
ZXJEZWNsYXJhdGlvbiA9ICgKKyIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtk
b21haW5OYW1lfUZyb250ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUZyb250ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorJHtldmVudERlY2xhcmF0aW9uc30KK3ByaXZhdGU6
CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKK307IiIiKQorCisgICAgUHJvdG9jb2xPYmplY3RCdWlsZGVyRGVjbGFyYXRpb25QcmVsdWRl
ID0gKAorIiIiICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzICR7b2JqZWN0VHlwZX07CisgICAgcHVibGljOiIiIikKKworICAgIFByb3RvY29sT2JqZWN0
QnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUgPSAoCisiIiIKKyAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPCR7b2JqZWN0VHlwZX0+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JHtvYmplY3RUeXBlfT4qPigmbV9yZXN1bHQpOwor
ICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjwke29iamVjdFR5cGV9PigqdGhp
cykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorJHtjb25zdHJ1Y3RvckV4YW1wbGV9CisgICAgICovCisgICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpTdHJ1Y3RJdGVtVHJh
aXRzIEl0ZW1UcmFpdHM7IiIiKQorCisgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgK
KyIiIlBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9
Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKKyAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOworI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECisg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKK30KKyIiIikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE3NmEy
MGM0NTY0Y2QyOThhODZkNWEyYTkyYjY5MzRkM2MyZWQ5ZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWltcG9ydCByZQotZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZy
b20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBs
YXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICdJbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCcKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAg
ICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIn
LAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPicsCi0gICAgICAgIF0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAg
ICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxl
bmFtZSgpKSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcg
KyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAgIH0KLQotICAgICAgICBk
b21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBb
XQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hl
cnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hl
YWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBy
ZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgaWYgbm90IGRv
bWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGNvbW1hbmRf
ZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRz
OgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCkpCi0KLSAgICAgICAgaGFu
ZGxlcl9hcmdzID0gewotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25h
bWUsCi0gICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihjb21tYW5k
X2RlY2xhcmF0aW9ucyksCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hh
bmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQotICAgICAgICBm
b3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91
bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgY29tbWFuZF9hcmdzID0gewotICAgICAgICAgICAgJ2Nv
bW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVy
cyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKLSAgICAgICAgfQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7
JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwOGZiYjQ3MzAyZmRiYTFjOWVmZmZmZTllYmY5ZWU4NTg4
NWIxMWY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfY29tbWFuZHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0j
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKLQotbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
KEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIklu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpOgotICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgotICAg
ICAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIGRlY2xhcmF0aW9uOiBp
c2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFy
YXRpb25zKQotICAgICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uY29tbWFuZHMpID4gMCBvciBs
ZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCi0KLSAg
ICAgICAgcmV0dXJuIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJh
dGVfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCi0gICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9t
YWluKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAg
J2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMu
YXBwZW5kKCcvLyAlKGRvbWFpbilzLicgJSBhcmdzKQotCi0gICAgICAgIGhhc19hc3luY19jb21t
YW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5bmMsIGRvbWFpbi5j
b21tYW5kcykpCi0gICAgICAgIGlmIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5j
X2NvbW1hbmRzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyJShkb21haW4pc0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICIlKGRvbWFpbilzIik7JyAlIGFy
Z3MpCi0KLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9u
czoKLSAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAg
ICAgICAgIGVudW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFp
bi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogZGVjbGFyYXRp
b24udHlwZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihb
JyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVt
X3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gZGVjbGFyYXRpb24udHlwZS5l
bnVtX3ZhbHVlcygpXSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1O
YW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQotCi0gICAgICAgICAgICBkZWYg
aXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVt
YmVyLnR5cGUuaXNfYW5vbnltb3VzCi0KLSAgICAgICAgICAgIGZvciBfbWVtYmVyIGluIGZpbHRl
cihpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyk6Ci0g
ICAgICAgICAgICAgICAgZW51bV9hcmdzID0gewotICAgICAgICAgICAgICAgICAgICAnZG9tYWlu
JzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAn
JXMlcycgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KF9tZW1iZXIubWVtYmVyX25h
bWUpKSwKLSAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVz
IicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSks
IGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
XSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQotCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4u
ZXZlbnRzOgotICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZG9t
YWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICdldmVudE5hbWUnOiBl
dmVudC5ldmVudF9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyci
JXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2
ZW50X3BhcmFtZXRlcnNdKQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUp
cyIsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2FyZ3MpCi0KLSAgICAgICAgZm9yIGNvbW1hbmQg
aW4gZG9tYWluLmNvbW1hbmRzOgotCi0gICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcGFyYW1ldGVy
X29iamVjdChwYXJhbWV0ZXIpOgotICAgICAgICAgICAgICAgIG9wdGlvbmFsX3N0cmluZyA9ICJ0
cnVlIiBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAiZmFsc2UiCi0gICAgICAgICAgICAg
ICAgcGFpcnMgPSBbXQotICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm5hbWUiOiAiJXMi
JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5cGUo
cGFyYW1ldGVyLnR5cGUpKQotICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm9wdGlvbmFs
IjogJXMnICUgb3B0aW9uYWxfc3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiAieyVzfSIg
JSAiLCAiLmpvaW4ocGFpcnMpCi0KLSAgICAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKLSAgICAg
ICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgICAgICdj
YWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRl
cikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAotICAgICAgICAg
ICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKSwK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShjb21tYW5kTmFtZSlzIiwgWyUoY2FsbFBh
cmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKQotCi0gICAgICAg
IGlmIGRvbWFpbi5jb21tYW5kcyBvciBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgYWN0aXZh
dGVfYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgICAgICdhdmFpbGFiaWxpdHknOiBkb21haW4uYXZhaWxhYmlsaXR5LAot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgZG9tYWluLmF2YWlsYWJpbGl0eToKLSAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IiUoZG9tYWluKXMiLCAiJShhdmFpbGFiaWxpdHkpcyIpOycgJSBhY3RpdmF0ZV9hcmdzKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMiKTsnICUgYWN0aXZhdGVfYXJncykKLQot
ICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDlhMDhlNjEwODhlZjNlMDQzOTFjNTI4YmY4NTM1ODMwZmFh
ODQyOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCByZQotaW1wb3J0
IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1U
eXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0
ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5oIicsCi0gICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKLSAgICAgICAgICAg
ICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KLQotICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmlu
ZycsICdFcnJvclN0cmluZycpXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAg
ICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2Zp
bGVuYW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUg
JyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKLSAgICAgICAgICAgICd0eXBlZGVm
cyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVkZWYgaW4g
dHlwZWRlZnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbHRl
cm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhkb21haW5zKSkK
LSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1h
cChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21h
aW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFk
ZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgcmV0
dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQotCi0gICAgIyBQcml2YXRlIG1ldGhvZHMuCi0KLSAg
ICBkZWYgX2dlbmVyYXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgotICAgICAgICBpZiBub3QgZG9tYWluczoKLSAgICAg
ICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKLSAgICAg
ICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnY2xhc3MgQWx0ZXJuYXRlSW5zcGVj
dG9yJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAg
ICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KLSAgICAgICAgZXhwb3J0TWFjcm8gPSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAg
ICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY2xhc3NDb21wb25l
bnRzLmFwcGVuZChleHBvcnRNYWNybykKLQotICAgICAgICB1c2VkX2VudW1fbmFtZXMgPSBzZXQo
KQotCi0gICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9yIGNvbW1h
bmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKLQotICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Ci0gICAg
ICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyks
Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAg
ICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25z
KQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3Mp
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYs
IHBhcmFtZXRlciwgY29tbWFuZCk6Ci0gICAgICAgIGVudW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAg
J2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKLSAgICAgICAgfQotCi0gICAgICAg
IGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFy
YW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZl
bnQgJShjb21tYW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
Ci0gICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRv
ci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5n
X2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
fTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hh
bmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25h
bWVzKToKLSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1h
bmQpCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0
cmluZyYnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9y
LnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBj
b21tYW5kKSkKLSAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRl
cl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRv
ci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFt
ZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVt
X25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQotICAgICAgICAg
ICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQot
ICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21t
YW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBh
cmFtZXRlcnMpCi0gICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fz
eW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAg
ICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5k
X25hbWUpCi0KLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcmJ10KLSAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAg
ICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1Jl
ZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQotCi0gICAgICAgIG91dF9wYXJhbWV0
ZXJzID0gW10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1l
dGVyczoKLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwg
X3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgY2xhc3NfY29tcG9uZW50cyA9
IFsnY2xhc3MnXQotICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAgICAgIGlmIGV4cG9ydF9tYWNybzoK
LSAgICAgICAgICAgIGNsYXNzX2NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydF9tYWNybykKLQotICAg
ICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6
ICcgJy5qb2luKGNsYXNzX2NvbXBvbmVudHMpLAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6
IGNhbGxiYWNrTmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFu
ZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJhbWV0
ZXJzKSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0
ZXJzKSwKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKmNvbW1hbmRfYXJncykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBjbGFzc0NvbXBvbmVu
dHMgPSBbJ2NsYXNzJ10KLSAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAgICAgIGlmIGV4cG9ydE1hY3Jv
IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRN
YWNybykKLQotICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBpZiBsZW4oZG9tYWlu
LmNvbW1hbmRzKSA+IDA6Ci0gICAgICAgICAgICBkZWNsYXJhdGlvbnMuYXBwZW5kKCdwcml2YXRl
OicpCi0gICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFpbi5jb21tYW5kcykpCi0KLSAgICAg
ICAgaGFuZGxlcl9hcmdzID0gewotICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAi
ICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIu
am9pbihkZWNsYXJhdGlvbnMpCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiAiICAg
IHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWJlYzU1NzQ0ZTdlZWMyMGZi
ZWM3NTExOGM0NDE1OTk0ZTBjNDAwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIC9k
ZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENv
cHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBs
b2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQotCi0KLWNsYXNzIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVy
biAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcCIKLQotICAgIGRlZiBkb21haW5zX3Rv
X2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxl
bihkb21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsKLSAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPicsCi0gICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAot
ICAgICAgICAgICAgJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KLQotICAgICAgICBzZWNvbmRhcnlf
aW5jbHVkZXMgPSBbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFy
eV9oZWFkZXJzXQotICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcnKQotICAgICAg
ICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpJykKLSAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lu
Y2x1ZGUgIkluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIicpCi0gICAgICAg
IHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNlbmRpZicpCi0KLSAgICAgICAgaGVhZGVyX2Fy
Z3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oIicsCi0gICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpv
aW4oc2Vjb25kYXJ5X2luY2x1ZGVzKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0g
W10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9u
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCJcbiIuam9pbihtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0
cnVjdG9yX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCi0gICAgICAg
IHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAiXG5c
biIuam9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBtZXRob2RzLgotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbihzZWxmLCBkb21haW4p
OgotICAgICAgICBkZXN0cnVjdG9yX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZQotICAgICAgICB9Ci0gICAgICAgIGRlc3RydWN0b3IgPSAnSW5z
cGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3Il
KGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfScgJSBkZXN0cnVjdG9y
X2FyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCBkZXN0cnVjdG9yKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGltcGxlbWVudGF0aW9u
cyA9IFtdCi0KLSAgICAgICAgY29uc3RydWN0b3JfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21h
aW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICB9Ci0gICAgICAgIGltcGxlbWVu
dGF0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25Eb21haW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbnN0cnVjdG9y
X2FyZ3MpKQotCi0gICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpIDw9IDU6Ci0gICAgICAg
ICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNo
ZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfbGFy
Z2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihkb21haW4pKQot
Ci0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGlm
IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oY29tbWFu
ZCwgZG9tYWluKSkKLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCBkb21h
aW4pKQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVf
c21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBk
b21haW4pOgotICAgICAgICBjYXNlcyA9IFtdCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlm
IChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAg
ICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycg
JSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBmb3IgY29tbWFuZCBp
biBkb21haW4uY29tbWFuZHNbMTpdOgotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxz
ZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBj
b21tYW5kLmNvbW1hbmRfbmFtZSkKLQotICAgICAgICBzd2l0Y2hfYXJncyA9IHsKLSAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2Rpc3Bh
dGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
VGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3
aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6Ci0gICAgICAgIGNhc2VzID0gW10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9t
YWluLmNvbW1hbmRzOgotICAgICAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZG9t
YWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAnY29tbWFuZE5h
bWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZXMuYXBwZW5kKCcgICAgICAgICAgICB7ICIlKGNvbW1hbmROYW1lKXMiLCAmSW5zcGVjdG9yJShk
b21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzIH0sJyAlIGFyZ3Mp
Ci0KLSAgICAgICAgc3dpdGNoX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2lu
KGNhc2VzKQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5C
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9u
ZSwgKipzd2l0Y2hfYXJncykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9j
bGFzc19mb3JfZG9tYWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCi0K
LSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAg
ICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2Qn
OiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCi0g
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
OgotICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3Jl
dHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3Np
Z25lZCgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhv
ZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMu
Z2V0VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAo
JShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtl
eWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFt
ZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci50
eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFs
KCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFt
ZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0KLSAgICAg
ICAgYXN5bmNfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21t
YW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzog
IiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJB
c3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3Mp
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgY29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucyA9IFtdCi0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNw
YXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzID0gWydjYWxsSWQnXQotICAgICAgICBtZXRob2RfcGFy
YW1ldGVycyA9IFsnZXJyb3InXQotCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxs
cHRyJwotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAg
ICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMu
YXBwZW5kKCcgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKLQotICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFy
YW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzog
R2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAotICAg
ICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVu
ZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywg
cHJvdG9jb2xFcnJvcnNQdHIpOycgJSBwYXJhbV9hcmdzKQotCi0gICAgICAgICAgICBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVy
X3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVy
TmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRl
X2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRl
cl9zdHJpbmcpCi0gICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlv
bmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyAr
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1l
dGVycy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAg
aWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7Ci0gICAgICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAg
ICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxi
YWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCi0gICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKLSAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQotICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCi0KLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
LSAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfb3V0X3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9k
JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAot
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9kZWNs
YXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgb3V0XyUocGFyYW1ldGVyTmFt
ZSlzOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBl
cl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBh
cmFtZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAg
cmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUp
cyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCi0g
ICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFt
ZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhv
ZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFt
ZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci50eXBl
LmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFs
KCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVy
YWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFt
X2FyZ3MpCi0KLSAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29w
eV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBt
ZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJh
bWV0ZXJzLmFwcGVuZCgnJm91dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotCi0gICAg
ICAgIGNvbW1hbmRfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6ICclc0NhbGxiYWNrJyAlIHVj
Zmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpLAotICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzog
Y29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAnaW5QYXJhbWV0ZXJEZWNsYXJhdGlv
bnMnOiAnXG4nLmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyksCi0gICAgICAgICAgICAn
aW52b2NhdGlvblBhcmFtZXRlcnMnOiAnLCAnLmpvaW4obWV0aG9kX3BhcmFtZXRlcnMpLAotICAg
ICAgICAgICAgJ2FsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzKSwKLSAgICAgICAgfQotCi0gICAgICAg
IGxpbmVzID0gW10KLSAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAw
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKScgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0K
LSAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA+IDA6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cykuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1h
bmRfYXJncykpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPiUoY29tbWFuZE5hbWUpcyglKGFsdGVybmF0ZUludm9jYXRp
b25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICByZXR1cm47JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUo
Y2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9h
cmdzKQotICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAwOgotICAg
ICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9u
UGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9
JykKLSAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAxOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeycpCi0gICAg
ICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVy
bl9wYXJhbWV0ZXJzKSA9PSAxOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSknKQotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAgaWYg
bm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBl
cnJvcik7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIu
am9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kNGE4ZDVhZmVlZDQ0NTJlZTlmYmY3OGVhNTJiOTQzM2ZhYjIzNjc4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN0cmluZworaW1wb3J0IHJlCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKwor
ZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMK
K2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKworbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiAnSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgnCisKKyAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAg
ICAgJyJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiJywKKyAgICAgICAgICAgICc8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4nLAorICAgICAgICBdCisKKyAgICAg
ICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5z
dWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAnaW5j
bHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVh
ZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicu
am9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4sIGRvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNl
Y3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9t
YWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBkb21haW4uY29tbWFuZHM6CisgICAg
ICAgICAgICByZXR1cm4gJycKKworICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCisg
ICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1h
bmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9u
X2Zvcl9jb21tYW5kKGNvbW1hbmQpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2Nv
bW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwg
KipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4g
Y29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgn
JXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9p
bl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisg
ICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1h
bmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFy
YW1ldGVycyksCisgICAgICAgIH0KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjEyNzJjMDBhZWZhYjU3OWJjZDI3OGM5YzA4ZmM2MDUzYTRkZGMwNGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMCww
ICsxLDIwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
cmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVu
dW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVy
biBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIicsCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKKyAgICAg
ICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KKworICAgICAgICB0eXBlZGVmcyA9IFso
J1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0
cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2lu
Y2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0
eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVk
ZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoKQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhkb21h
aW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
LCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRl
cy5IZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAg
ICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMu
CisKKyAgICBkZWYgX2dlbmVyYXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBpZiBub3QgZG9tYWluczoK
KyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykK
KyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnY2xhc3MgQWx0ZXJuYXRl
SW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4p
OgorICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFj
cm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUp
CisgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3ND
b21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICB1c2VkX2VudW1fbmFtZXMg
PSBzZXQoKQorCisgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgZm9y
IGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJh
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7
CisgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9u
ZW50cyksCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAg
ICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGNvbW1hbmRfZGVjbGFy
YXRpb25zKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6CisgICAgICAgIGVudW1fYXJncyA9IHsKKyAg
ICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAg
ICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgfQor
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgJShjb21tYW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1f
dmFsdWVzKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUg
KEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxm
LmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNl
ZF9lbnVtX25hbWVzKToKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKGNvbW1hbmQpCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0g
WydFcnJvclN0cmluZyYnXQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxf
cGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyBpbl8lcyIgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihf
cGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFy
YW1ldGVyLCBjb21tYW5kKSkKKyAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29t
bWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291
dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgX3BhcmFtZXRl
ci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyAr
IHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUg
KENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRl
ciksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1l
dGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4g
dXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQor
ICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5h
bWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwg
Ii5qb2luKHBhcmFtZXRlcnMpCisgICAgICAgIH0KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
dmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21t
YW5kX2FyZ3MpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CisgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3QoY29tbWFu
ZC5jb21tYW5kX25hbWUpCisKKyAgICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcm
J10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Cisg
ICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVu
ZCgiUGFzc1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQorCisgICAgICAgIG91
dF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMi
ICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFy
YW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgY2xhc3NfY29t
cG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9y
dF9tYWNybzoKKyAgICAgICAgICAgIGNsYXNzX2NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydF9tYWNy
bykKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2xhc3NBbmRFeHBv
cnRNYWNybyc6ICcgJy5qb2luKGNsYXNzX2NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2NhbGxi
YWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1h
bmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihp
bl9wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91
dF9wYXJhbWV0ZXJzKSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBj
bGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlm
IGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFw
cGVuZChleHBvcnRNYWNybykKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBp
ZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDA6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnMuYXBw
ZW5kKCdwcml2YXRlOicpCisgICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFpbi5jb21tYW5k
cykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhw
b3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0
aW9ucyc6ICJcbiIuam9pbihkZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAg
ICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0NjE1ZGQxMzQ1OWMx
ZjMxMjdiNWZiNTE5YjU2YmI5ZWE0MDhjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMjg3IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5n
IGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRv
cgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorCitsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAiCisK
KyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRl
cihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAsIEdlbmVyYXRvci5kb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToK
KyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisK
KyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9y
IGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10KKyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVz
LmFwcGVuZCgnJykKKyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCisgICAgICAgIHNlY29uZGFyeV9p
bmNsdWRlcy5hcHBlbmQoJyNpbmNsdWRlICJJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCInKQorICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYnKQor
CisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzog
JyJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCInLAorICAgICAgICAgICAgJ3NlY29uZGFy
eUluY2x1ZGVzJzogJ1xuJy5qb2luKHNlY29uZGFyeV9pbmNsdWRlcyksCisgICAgICAgIH0KKwor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBs
YXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiXG4iLmpvaW4obWFwKHNlbGYuX2dlbmVyYXRl
X2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKSkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5l
cmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5J
bXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQor
ICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0
aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZGVzdHJ1Y3Rvcl9hcmdzID0geworICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgfQorICAgICAg
ICBkZXN0cnVjdG9yID0gJ0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjp+SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0nICUgZGVzdHJ1Y3Rvcl9hcmdzCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikKKworICAgIGRlZiBfZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAg
ICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQorCisgICAgICAgIGNvbnN0cnVjdG9yX2FyZ3MgPSB7
CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAg
fQorICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5C
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1YnN0aXR1
dGUoTm9uZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkKKworICAgICAgICBpZiBsZW4oZG9tYWluLmNv
bW1hbmRzKSA8PSA1OgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlu
KGRvbWFpbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4oZG9tYWluKSkKKworICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29t
bWFuZHM6CisgICAgICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgICAg
IGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9j
bGFzc19mb3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCisgICAgICAgICAgICBpbXBsZW1lbnRh
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9y
X2NvbW1hbmQoY29tbWFuZCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0aW9ucykp
CisKKyAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0
aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2FzZXMgPSBbXQorICAgICAg
ICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5k
c1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsnICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkK
KyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToKKyAgICAgICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNv
bW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQs
ICptZXNzYWdlLmdldCgpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUpCisKKyAgICAgICAgc3dp
dGNoX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFt
ZSwKKyAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hf
YXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVt
ZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9IFtdCisg
ICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGFyZ3Mg
PSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisg
ICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAiJShjb21t
YW5kTmFtZSlzIiwgJkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUo
Y29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKQorCisgICAgICAgIHN3aXRjaF9hcmdzID0geworICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAn
ZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkxhcmdlU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5k
LCBkb21haW4pOgorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KKyAgICAg
ICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29t
bWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAg
ICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
TmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBh
cmFtZXRlciksCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJz
LmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5
cGUpOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3Mp
CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBh
cmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUg
cGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxp
dGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3Nh
Z2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKCUocGFyYW1ldGVyTmFt
ZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5
ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1l
dGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICBhc3luY19hcmdzID0geworICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAn
Y2FsbGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2sn
LAorICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFt
ZXRlcnMpLAorICAgICAgICAgICAgJ291dFBhcmFtZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2lu
KG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmND
b21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykKKworICAgIGRlZiBfZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCBk
b21haW4pOgorICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAg
b3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzID0gW10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMgPSBbJ2NhbGxJZCddCisgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzID0gWydlcnJvcidd
CisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJ251bGxwdHInCisgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJn
dW1lbnQgPSAnJiVzX3ZhbHVlRm91bmQnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAg
ICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVz
X3ZhbHVlRm91bmQgPSBmYWxzZTsnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAg
ICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzog
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwK
KyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dl
dHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdz
dWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1l
dGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
JShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnNQ
dHIpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBh
cmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlzIDogbnVsbHB0
cicgJSBwYXJhbV9hcmdzCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCisgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRl
cl9zdHJpbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9k
aXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2lu
XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgaWYgY29tbWFuZC5pc19h
c3luYzoKKyAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2NhbGxiYWNrTmFt
ZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAg
ICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7JykKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAg
ICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAor
ICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9y
LmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFw
cGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFy
YW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAg
ICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3Jl
dHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJO
YW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+
JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0
XyUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUg
cGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJ
SUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVt
KCk6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJh
bWV0ZXJOYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0XyUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBh
cmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQor
CisgICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9y
X3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9k
X3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5f
bmFtZSwKKyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0
KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1h
bmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVyRGVjbGFyYXRpb25zJzog
J1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAgICAgICAgICAgJ2ludm9j
YXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKG1ldGhvZF9wYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICdhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9pbihhbHRlcm5hdGVf
ZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPT0gMDoKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
OjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSknICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorCisgICAg
ICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5k
X2FyZ3MpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT4lKGNvbW1hbmROYW1lKXMoJShhbHRlcm5hdGVJbnZvY2F0aW9u
UGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcmV0dXJuOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyNlbmRpZicpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYo
bmV3IEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNh
bGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7JyAlIGNvbW1hbmRfYXJn
cykKKyAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKKyAgICAg
ICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBh
cmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQor
ICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScp
CisgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsnKQorICAgICAg
ICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVycykgPT0gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpJykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorCisgICAgICAgIGlmIG5v
dCBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWUwNGFkZjY4
NDlkOGE2NzU5M2VmYWFjZGEwNWJjY2JkYThkZjI2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENw
cEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyAgICBkZWYgZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9t
YWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRl
cnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCisgICAg
ICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAg
ICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3Rm
L1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQor
CisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5n
JzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAg
ICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVy
IGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAorICAgICAgICB9CisK
KyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAg
ICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9p
bihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQpOgor
ICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVu
dF9uYW1lCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUp
c1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBlbnVt
X2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsnICUg
dWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1
ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9y
X2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51
bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBjbGFz
cyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVy
biAiXG4iLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRz
ID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFj
cm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQorCisgICAgICAgIGV2ZW50
X2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgor
ICAgICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFt
ZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4
cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21h
aW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRp
b25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUo
Q3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVz
ZWRfZW51bV9uYW1lcyk6CisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJh
bWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGV2
ZW50KSkKKyAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUg
KGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQorICAgICAg
ICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjcwYjNiNTkwZjRiNzMzYjdkNzRhZThhYzFmNzFlODJm
YWU5ODYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisK
K2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIGNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVz
Citmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQorCisKK2NsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gIkluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIgorCisgICAgZGVmIGRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjog
bGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdz
ID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JGcm9udGVuZERp
c3BhdGNoZXJzLmgiJywKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9p
bihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJz
XSksCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMg
UHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGltcGxlbWVudGF0aW9u
cyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0
aW9ucykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9y
X2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IHBhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0g
W10KKworICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisK
KyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2VuZXJhdG9y
LnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFs
dWUoJXMpJyAlIHBhcmFtZXRlcl92YWx1ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfYXJncyA9
IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdw
YXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92YWx1ZSwKKyAgICAgICAgICAgICAgICAna2V5
ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFy
YW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmpl
Y3QtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFy
YW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5h
bWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKworICAgICAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBldmVudF9hcmdzID0geworICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZXZl
bnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZSwKKyAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJz
JzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKQorICAgICAgICB9CisKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNwYXRjaGVy
OjolKGV2ZW50TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdzKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiUoZG9tYWluTmFtZSlzLiUoZXZlbnRO
YW1lKXMiKSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9hc3Np
Z25tZW50cykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQor
ICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5
cGVzX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjBjNmFkOGYyOTYyMmRiMTYyOGE1MGZhOTE2ZTFi
NWRlNzg1MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQpAQCAtMCwwICsxLDM0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
YykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQor
Citmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRl
cworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMg
aW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwg
QXJyYXlUeXBlLCBGcmFtZXdvcmtzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQorCisKK2NsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAg
R2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRl
ZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yUHJvdG9j
b2xPYmplY3RzLmgiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBk
b21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxh
dGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBo
ZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5oPicsCisgICAgICAgICAg
ICAnPHd0Zi9QYXNzUmVmUHRyLmg+JworICAgICAgICBdKQorCisgICAgICAgIGV4cG9ydF9tYWNy
byA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkK
KworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmlu
Zyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAg
ICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRl
ciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuX3R5cGUgPSAnU3RyaW5nJworICAgICAgICByZXR1cm5f
dHlwZV93aXRoX2V4cG9ydF9tYWNybyA9IFtyZXR1cm5fdHlwZV0KKyAgICAgICAgaWYgZXhwb3J0
X21hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuX3R5cGVfd2l0aF9leHBvcnRf
bWFjcm9bOjBdID0gW2V4cG9ydF9tYWNyb10KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVz
cGFjZSBQcm90b2NvbCB7JykKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2ZvcndhcmRfZGVjbGFyYXRpb25zKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnJXMgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOycgJSAnICcuam9pbihyZXR1cm5f
dHlwZV93aXRoX2V4cG9ydF9tYWNybykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpv
aW4oWworICAgICAgICAgICAgJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+ICVzIGdldEVudW1Db25zdGFu
dFZhbHVlKFQgZW51bVZhbHVlKScgJSByZXR1cm5fdHlwZSwKKyAgICAgICAgICAgICd7JywKKyAg
ICAgICAgICAgICcgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oZW51bVZhbHVlKSk7JywKKyAgICAgICAgICAgICd9J10pKQorCisgICAgICAgIGJ1aWxkZXJf
c2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNl
Y3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIu
am9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgIyBGSVhNRTog
bW92ZSBidWlsZGVycyBvdXQgb2YgY2xhc3NlcywgdW5jb21tZW50IGZvcndhcmQgZGVjbGFyYXRp
b24KKworICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWlu
cyk6CisgICAgICAgIHNlY3Rpb25zID0gW10KKworICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFp
bnM6CisgICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wg
aW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zXQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0g
ZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSksIGRlY2xh
cmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5
cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAg
ICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisg
ICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4u
ZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgIG9iamVjdF90eXBlX25hbWVzID0gW190eXBlLnJh
d19uYW1lKCkgZm9yIF90eXBlIGluIG9iamVjdF90eXBlc10KKyAgICAgICAgICAgIGVudW1fdHlw
ZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBlbnVtX3R5cGVzXQorCisg
ICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFyZSBhbGwgY2xhc3NlcyBzbyB0aGUgdHlwZSBidWls
ZGVycyB3b24ndCBicmVhayBpZiByZWFycmFuZ2VkLgorICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKG9iamVjdF90eXBl
X25hbWVzKSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2VudW0gY2xhc3MgJXM7
JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKGVudW1fdHlwZV9uYW1lcykpCisgICAgICAgICAg
ICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorCisgICAgICAgIGlmIGxlbihzZWN0
aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorJXMKKy8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKyIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgc2VjdGlvbnMg
PSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAg
ICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25z
KQorCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAn
JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8vIFR5cGVkZWZzLgorJXMK
Ky8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBw
cmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRl
Y2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAg
IGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJu
ICcnCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4g
cHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIHByaW1pdGl2ZV9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShkZWNsYXJhdGlvbi50eXBlLmFs
aWFzZWRfdHlwZSkKKyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMgPSBbXQorICAgICAgICAgICAg
aWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICAgICAgdHlw
ZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQor
ICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmlt
aXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKKyAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGlu
ZXMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFp
bik6CisgICAgICAgIHNlY3Rpb25zID0gW10KKworICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlv
biBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHR5cGVfZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24odHlw
ZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJh
dGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0
aW9uLCBkb21haW4pKQorCisgICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSBzZWN0aW9u
OiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9ucykKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9
PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBl
X2RlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBlbnVt
X21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1i
ZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1l
bWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAg
IG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKKworICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVjbGFyYXRpb24u
ZGVzY3JpcHRpb24pCisgICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QnCisgICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlw
ZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNz
ICsgJ0Jhc2UnCisgICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycg
JSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1Ymxp
YzonKQorICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcg
d2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3Rf
bmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zv
cl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51bV9tZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVjbGFyYXRpb24pKQor
CisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQorICAgICAgICBjb25zdHJ1Y3Rvcl9l
eGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpJyAl
IChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUpKQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVp
cmVkX21lbWJlcnM6CisgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAg
ICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2ZpcnN0KG1lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAg
ICAgICAgYnVpbGRlcl9hcmdzID0geworICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3Rf
bmFtZSwKKyAgICAgICAgICAgICdjb25zdHJ1Y3RvckV4YW1wbGUnOiAnXG4nLmpvaW4oY29uc3Ry
dWN0b3JfZXhhbXBsZSkgKyAnOycsCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBlbmQo
VGVtcGxhdGUoQ3BwVGVtcGxhdGVzLlByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlwZV9tZW1iZXIsIGRvbWFp
bikpCisgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuUHJvdG9jb2xP
YmplY3RCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxk
ZXJfYXJncykpCisgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9t
ZW1iZXIobWVtYmVyLCBkb21haW4pKQorCisgICAgICAgIGlmIEdlbmVyYXRvci50eXBlX2hhc19v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gUHJvcGVydHkgbmFtZXMg
Zm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKKyAgICAgICAgICAgIGZvciB0eXBlX21lbWJl
ciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICBleHBv
cnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycs
IE5vbmUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0
IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lKSkpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJh
dGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51
bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dl
bmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBl
bnVtX2RlY2xhcmF0aW9uLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihzZWxm
LCBlbnVtX21lbWJlcik6CisgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5lKToKKyAg
ICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8nLCAnLy8nKSkgb3Ig
bGVuKGxpbmUpIGlzIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKKworICAgICAgICBp
bmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3Ry
dWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5
cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVudW1fdHlw
ZSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZW51bV9uYW1lID0gdWNmaXJzdChlbnVt
X25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7JyAlIGVudW1fbmFt
ZSkKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1fdmFsdWVzKCk6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2VuZXJhdG9yLnN0eWxp
emVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2Vu
dW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307IC8vIGVudW0g
Y2xhc3MgJXMnICUgZW51bV9uYW1lKQorICAgICAgICByZXR1cm4gbGluZXMgICMgVGhlIGNhbGxl
ciBtYXkgd2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpvaW4gdGhlc2UgbGlu
ZXMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShzZWxmLCB0eXBlX2Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICByZXF1aXJlZF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCisKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwnKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVxdWly
ZWRfbWVtYmVycykpOgorICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0
KHJlcXVpcmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCisgICAgICAgICAgICBlbnVtX3ZhbHVl
cy5hcHBlbmQoZW51bV92YWx1ZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAl
cyA9IDEgPDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKKyAgICAgICAgaWYgbGVuKGVudW1fdmFs
dWVzKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRzU2V0
ID0gKCVzKScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAwJykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgfTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0
dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIu
bWVtYmVyX25hbWUpLAorICAgICAgICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25h
bWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAg
ICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1l
KXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFt
ZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0ZXJfYXJncykK
KworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQp
cyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNldHRlcl9hcmdzKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jl
c3VsdC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBz
ZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPCUoY2FtZWxOYW1lKXNTZXQ+KCk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBl
X21lbWJlciwgZG9tYWluKToKKyAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAn
Y2FtZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAg
ICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlw
ZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVy
X2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHsnKQorICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFs
KCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShz
dGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9y
X2JpbmRpbmdfdHJhaXRzKHNlbGYpOgorICAgICAgICAjIEEgbGlzdCBvZiAoYnVpbGRlcl90eXBl
LCBuZWVkc19ydW50aW1lX2Nhc3QpCisgICAgICAgIHR5cGVfYXJndW1lbnRzID0gW10KKworICAg
ICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgorICAgICAgICAg
ICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5
cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnMpCisKKyAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9u
c190b19nZW5lcmF0ZToKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9k
ZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZV9hcmd1bWVudHMuYXBwZW5kKChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwgRmFsc2UpKQorCisg
ICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVj
dFR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKENwcEdl
bmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUp
LCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlw
ZSkpKQorCisgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KKyAgICAgICAgZnVu
Y3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KKyAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAg
ICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdHJ1Y3Rfa2V5
d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKyAgICAgICAgICAgICNmdW5jdGlvbl9rZXl3b3Jk
c1sxOjFdID0gW2V4cG9ydF9tYWNyb10KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZv
ciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
dGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5
d29yZHMpLCBhcmd1bWVudFswXSkpCisgICAgICAgICAgICBpZiBhcmd1bWVudFsxXToKKyAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBQYXNzUmVmUHRyPCVzPiBydW50aW1lQ2Fz
dChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsnICUgYXJndW1l
bnRbMF0pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3Jk
cykpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMx
ZWY0OTQxMmRhYjljMDNiNzJmMDMzM2VjYmYzYmYwYzg5ZTM5YjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxODEgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3Bw
R2VuZXJhdG9yCitmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwg
RW51bVR5cGUsIE9iamVjdFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CisKKworY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Cisg
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisK
KyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3Rv
clByb3RvY29sT2JqZWN0cy5jcHAiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgor
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2Vs
Zi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKwor
ICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisg
ICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJ
bnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1
ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vj
b25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCduYW1lc3BhY2UgUHJvdG9jb2wgeycpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKKyAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9
IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAg
ICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAw
LCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbCcpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFBy
aXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKKyAgICAgICAgbGluZXMuZXh0
ZW5kKFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gc2VsZi5hc3Np
Z25lZF9lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1
cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVf
b3Blbl9maWVsZF9uYW1lcyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3Ig
ZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgorICAgICAgICAgICAgZm9yIHR5
cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0b3IudHlwZV9oYXNf
b3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKToKKyAgICAg
ICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90
b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKKyAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1l
LCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5l
cmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlv
bnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorCisgICAgICAgIGZvciB0
eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAgICAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAg
ICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9v
YmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgaWYg
R2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUp
OgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVu
dGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisKKyAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9y
dW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmplY3RfZGVjbGFyYXRp
b24pOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBDcHBHZW5l
cmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUp
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Qcm90b2Nv
bE9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKKworICAgIGRlZiBf
Z2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVt
YmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1i
ZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1l
bWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAg
ICAgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5f
ZmllbGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICBsaW5lcyA9IFtdCisKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCIiInsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7
CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAg
QVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIpCisgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9
IHsKKyAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
LAorICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2Vy
dGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRp
b24pCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgewor
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2Jq
ZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMiKSk7CisgICAgICAgIEFTU0VS
VCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgJShhc3NlcnRN
ZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0iIiIgJSBhcmdz
KQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKKworICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGFyZ3MgPSB7
CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwK
KyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRp
b25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9u
KQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKKyAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVj
dC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOworICAgICAgICBpZiAoJSht
ZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgJShhc3NlcnRN
ZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOyIiIiAlIGFyZ3MpCisKKyAg
ICAgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsnKQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgfScpCisKKyAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5l
eHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9l
bnVtKHNlbGYsIGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFs
dWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIo
ZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
eycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmluZyByZXN1bHQ7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJl
c3VsdCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQp
OycpCisKKyAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncmVzdWx0ID09
ICIlcyInICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVu
dW1fdmFsdWVzKCldKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBh
c3NlcnRfY29uZGl0aW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKworICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggNzNmZjdiMGZjZDcyMjUyMmQ2MGIyZWNmNGE0Nzk1N2U2MGRkMmYyOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBh
cmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQot
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEZyb250ZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSAgICBkZWYg
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEg
ZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhl
YWRlcnMgPSBbCi0gICAgICAgICAgICAnIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCi0g
ICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAotICAg
ICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAgICAgICAgICc8
d3RmL1Bhc3NSZWZQdHIuaD4nLAotICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4n
XQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3Ry
aW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAotICAgICAg
ICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVh
ZGVyIGluIGhlYWRlcnNdKSwKLSAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAotICAgICAgICB9
Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
LSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAiXG5cbiIu
am9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBtZXRob2RzLgotCi0gICAgZGVmIF9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQp
OgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5l
dmVudF9uYW1lCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5h
bWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBl
bnVtX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsn
ICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92
YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVf
Zm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBj
bGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgY2xhc3NDb21wb25l
bnRzID0gWydjbGFzcyddCi0gICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCi0KLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQotCi0gICAgICAgIGV2
ZW50X2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRz
OgotICAgICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1f
bmFtZXMpKQotCi0gICAgICAgIGhhbmRsZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKLSAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2V2ZW50RGVjbGFy
YXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxh
dGUoVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVz
ZWRfZW51bV9uYW1lcyk6Ci0gICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJh
bWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGV2
ZW50KSkKLSAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKLQotICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUg
KGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQotICAgICAg
ICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDBkNTUxODM2MGIwMGUxNTg5ZGU1YWMy
MDk4ZTQ5NGFhZmM2NjhlNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dp
bmcKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGlt
cG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCi0KLQotY2xhc3MgRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAi
SW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiCi0KLSAgICBkZWYgZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4o
ZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkK
LQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIHNlY29uZGFyeV9oZWFk
ZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPiddCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvckZyb250ZW5kRGlzcGF0
Y2hlcnMuaCInLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsn
I2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwK
LSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQotCi0gICAgIyBQcml2
YXRlIG1ldGhvZHMuCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgaW1wbGVtZW50YXRpb25zID0g
W10KLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Ci0gICAgICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25z
KSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZl
bnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KLSAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQot
Ci0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKLQotICAg
ICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIG5vdCBHZW5lcmF0b3Iuc2hvdWxk
X3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQotICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykn
ICUgcGFyYW1ldGVyX3ZhbHVlCi0KLSAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0gewotICAg
ICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9z
dGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRl
ck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAgICAgICAgICAgICdrZXllZFNldE1l
dGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBl
KSwKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
OgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAo
JShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVk
U2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRl
clZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+
JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShw
YXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCi0KLSAgICAgICAgICAgIGZvcm1h
bF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jf
Y2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgZXZlbnRfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21h
aW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2
ZW50LmV2ZW50X25hbWUsCi0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9p
bihmb3JtYWxfcGFyYW1ldGVycykKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
dm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5h
bWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycg
JSBldmVudF9hcmdzKQotCi0gICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4g
MDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgICAg
IGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtc09iamVjdCk7JykKLQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
anNfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzFkZjIyMWQ2NTIzM2U5ZmFiYWYyODQ3YmU4MjFlNTQ0Y2Q5YzZjMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTAsMCArMSwxMjcgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmly
c3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
KEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIklu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpOgorICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgorICAg
ICAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIGRlY2xhcmF0aW9uOiBp
c2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFy
YXRpb25zKQorICAgICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uY29tbWFuZHMpID4gMCBvciBs
ZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCisKKyAg
ICAgICAgcmV0dXJuIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJh
dGVfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAg
J2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcvLyAlKGRvbWFpbilzLicgJSBhcmdzKQorCisgICAgICAgIGhhc19hc3luY19jb21t
YW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5bmMsIGRvbWFpbi5j
b21tYW5kcykpCisgICAgICAgIGlmIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5j
X2NvbW1hbmRzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyJShkb21haW4pc0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICIlKGRvbWFpbilzIik7JyAlIGFy
Z3MpCisKKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9u
czoKKyAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAg
ICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFp
bi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogZGVjbGFyYXRp
b24udHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihb
JyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVt
X3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gZGVjbGFyYXRpb24udHlwZS5l
bnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1O
YW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAgICAgICAgICBkZWYg
aXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVt
YmVyLnR5cGUuaXNfYW5vbnltb3VzCisKKyAgICAgICAgICAgIGZvciBfbWVtYmVyIGluIGZpbHRl
cihpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyk6Cisg
ICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAnZG9tYWlu
JzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAn
JXMlcycgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KF9tZW1iZXIubWVtYmVyX25h
bWUpKSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVz
IicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSks
IGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
XSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4u
ZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9t
YWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdldmVudE5hbWUnOiBl
dmVudC5ldmVudF9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyci
JXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2
ZW50X3BhcmFtZXRlcnNdKQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUp
cyIsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgZm9yIGNvbW1hbmQg
aW4gZG9tYWluLmNvbW1hbmRzOgorCisgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcGFyYW1ldGVy
X29iamVjdChwYXJhbWV0ZXIpOgorICAgICAgICAgICAgICAgIG9wdGlvbmFsX3N0cmluZyA9ICJ0
cnVlIiBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAiZmFsc2UiCisgICAgICAgICAgICAg
ICAgcGFpcnMgPSBbXQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm5hbWUiOiAiJXMi
JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5cGUo
cGFyYW1ldGVyLnR5cGUpKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm9wdGlvbmFs
IjogJXMnICUgb3B0aW9uYWxfc3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiAieyVzfSIg
JSAiLCAiLmpvaW4ocGFpcnMpCisKKyAgICAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAg
ICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICdj
YWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRl
cikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAorICAgICAgICAg
ICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKSwK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShjb21tYW5kTmFtZSlzIiwgWyUoY2FsbFBh
cmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKQorCisgICAgICAg
IGlmIGRvbWFpbi5jb21tYW5kcyBvciBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgYWN0aXZh
dGVfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgICAgICdhdmFpbGFiaWxpdHknOiBkb21haW4uYXZhaWxhYmlsaXR5LAor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgZG9tYWluLmF2YWlsYWJpbGl0eToKKyAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IiUoZG9tYWluKXMiLCAiJShhdmFpbGFiaWxpdHkpcyIpOycgJSBhY3RpdmF0ZV9hcmdzKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMiKTsnICUgYWN0aXZhdGVfYXJncykKKwor
ICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI5NjQ1YzdkODkzYWQwOTE3MGYzZTcxNGY3YzcyYWY1YTEzYjQ3MDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAs
MCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHN0cmluZworaW1wb3J0IHJlCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBj
cHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBH
ZW5lcmF0b3IKK2Zyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCitmcm9tIG9iamNfZ2VuZXJh
dG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5k
X2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVh
ZGVycyA9IFsKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+JywKKyAgICAgICAgICAgICc8d3RmL1JldGFpblB0ci5oPics
CisgICAgICAgIF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFk
ZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgp
KSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFk
ZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgICAgICAnZm9yd2FyZERlY2xhcmF0
aW9ucyc6IHNlbGYuX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMoKSwKKyAgICAg
ICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAg
ICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVh
ZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX29i
amNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJl
dHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19mb3J3
YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbJ0Bwcm90b2NvbCAlcyVz
RG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21h
aW5fbmFtZSkgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKV0KKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19mb3J3
YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgbGlu
ZXMgPSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0BjbGFzcyAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgor
ICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBb
XQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBj
b21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9
IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlv
bnMpLAorICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyRG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRs
ZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBw
YXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVz
IGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5f
cGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAg
ICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5k
LmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFt
ZXRlcnMpLAorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9p
ZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpIG92ZXJyaWRlOycgJSBjb21tYW5kX2Fy
Z3MpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlOWE2N2NhZjNkYzRjYzc4YzQ0MzYx
ZjdmMzFjOTIzOWJhZGYyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDE2OCBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgcmUKK2Zyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBtb2RlbHMgaW1wb3J0
IEZyYW1ld29ya3MKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnks
IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSBvYmpjX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwor
Citsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBPYmpDQ29uZmln
dXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLm1tJyAlIE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNl
bGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRl
X2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzSW50ZXJu
YWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICciJXNFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAg
ICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAg
ICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAg
XQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRl
JzogJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUg
JXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAg
fQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAg
ICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xp
Y2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQor
ICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRl
X2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAg
ICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21h
aW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNv
bW1hbmQpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQo
c2VsZiwgZG9tYWluLCBjb21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBwYXJh
bWV0ZXJzID0gWydsb25nIGNhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5f
JXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5f
bmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAor
ICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCisgICAgICAg
ICAgICAnc3VjY2Vzc0NhbGxiYWNrJzogc2VsZi5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3Jf
Y29tbWFuZChkb21haW4sIGNvbW1hbmQpLAorICAgICAgICAgICAgJ2NvbnZlcnNpb25zJzogc2Vs
Zi5fZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSwKKyAg
ICAgICAgICAgICdpbnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29t
bWFuZChkb21haW4sIGNvbW1hbmQpLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfc3VjY2Vz
c19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBsaW5l
cyA9IFtdCisKKyAgICAgICAgIyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzODIyMT4g
V2ViIEluc3BlY3RvcjogT2JqQyBQcm90b2NvbCBJbnRlcmZhY2VzIHNob3VsZCB0aHJvdyBleGNl
cHRpb25zIGZvciBuaWwgYXJndW1lbnRzCisKKyAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtdCisgICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFt
KGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgICAgICAg
ICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tf
cGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXigl
cykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
JykKKworICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBrZXllZF9z
ZXRfbWV0aG9kID0gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFt
ZXRlci50eXBlKQorICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVu
dGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAg
ICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVzJyAlIHZhcl9uYW1lIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAgICAgICAgICAgICAgZXhwb3J0X2V4cHJl
c3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9y
X3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCB2YXJfZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAg
ICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0T2JqZWN0LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVz
KTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0
X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBpZiAoJXMpJyAlIHZhcl9uYW1lKQorICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoQVNDSUlM
aXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHRP
YmplY3QucmVsZWFzZSgpLCBTdHJpbmcoKSk7JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBTdHJpbmcoKSk7JykKKworICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFp
biwgY29tbWFuZCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGluX3Bh
cmFtX25hbWUgPSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAg
ICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCisgICAgICAgICAg
ICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBj
b21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyLCBGYWxzZSkKKyAgICAgICAgICAgIGluX3Bh
cmFtX29wdGlvbmFsX3NhZmVfbmFtZSA9ICcqJXMnICUgaW5fcGFyYW1fbmFtZSBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwgZWxzZSBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbXBvcnRfZXhw
cmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9m
b3JfcGFyYW1ldGVyKGluX3BhcmFtX29wdGlvbmFsX3NhZmVfbmFtZSwgZG9tYWluLCBjb21tYW5k
LmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzOycg
JSAoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgb2JqY19pbl9wYXJhbV9uYW1lKSwgaW1w
b3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAlczsnICUgam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgb2JqY19p
bl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMp
JyAlIGluX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
ICVzID0gJXM7JyAlIChvYmpjX2luX3BhcmFtX25hbWUsIGltcG9ydF9leHByZXNzaW9uKSkKKwor
ICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfaW52b2NhdGlvbl9m
b3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBwYWlycyA9IFtdCisg
ICAgICAgIHBhaXJzLmFwcGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCisg
ICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCisg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQor
ICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIG9iamNf
aW5fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlv
bmFsX2V4cHJlc3Npb24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFtZSwgb2Jq
Y19pbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6JXMnICUg
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb3B0aW9uYWxfZXhwcmVzc2lvbikpCisgICAgICAg
IHJldHVybiAnICAgIFttX2RlbGVnYXRlICVzJXNdOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUs
ICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMmNmOGY0MTFi
ODIyZmY1MDc2MjJkMGZmYjI2OTJkYzI3NmZmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Nv
bmZpZ3VyYXRpb25faGVhZGVyLnB5CkBAIC0wLDAgKzEsODYgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5l
cmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25I
ZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAg
ICAgIHJldHVybiAnJXNDb25maWd1cmF0aW9uLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WAorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsK
KyAgICAgICAgICAgICciJXMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAg
ICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2luY2x1ZGVzJzog
J1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAor
ICAgICAgICB9CisKKyAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9y
LnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVs
KCkpCisgICAgICAgIHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dl
bmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKKyAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rp
b25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmlj
SGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50ZXJmYWNlX2Zv
cl9kb21haW5zKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2Jq
Q1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbnRlcmZhY2VfZm9yX2RvbWFpbnMoc2VsZiwgZG9t
YWlucyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJm
YWNlIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0JykKKyAgICAgICAgZm9yIGRv
bWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRl
X3Byb3BlcnRpZXNfZm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bl
bmQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0
ZV9wcm9wZXJ0aWVzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgcHJvcGVydHlf
YXJncyA9IHsKKyAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAg
ICAgICAgICAgJ3ZhcmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFt
ZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pLAorICAgICAgICB9CisKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVy
KGRvbWFpbik6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRl
cy5Db25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVy
dHlfYXJncykpCisgICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRl
cihkb21haW4pOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0
ZXMuQ29uZmlndXJhdGlvbkV2ZW50UHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0
eV9hcmdzKSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3Vy
YXRpb25faW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTMyMDVjYjlkY2U3Mzg3Yzk0ZTVhYzI2ZGFhNTFiYjA2ODQzODlm
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMCwwICsxLDE1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
YykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKKworCitjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0
dXJuICclc0NvbmZpZ3VyYXRpb24ubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMg
PSBbCisgICAgICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwKKyAgICAgICAgICAgICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAgICAgICAg
ICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4nLAorICAg
ICAgICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUlu
Y2x1ZGUnOiAnIiVzQ29uZmlndXJhdGlvbi5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAl
cycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICB9
CisKKyAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisgICAg
ICAgIHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCisKKyAgICAgICAgZG9t
YWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10K
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9k
b21haW5zKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1Rl
bXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMoc2VsZiwg
ZG9tYWlucyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1w
bGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9uJykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsnKQorICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2Vu
ZXJhdGVfaXZhcnMoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXInKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBzZWxmID0gW3N1cGVyIGluaXRdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghc2VsZiknKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY29udHJvbGxlcik7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOycpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dl
bmVyYXRlX2RlYWxsb2MoZG9tYWlucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAg
ICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRz
IGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKGRvbWFpbikp
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgaWYgZG9tYWlu
LmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0dGVyX2Zvcl9k
b21haW4oZG9tYWluKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2l2YXJzKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGlmIGRvbWFp
bi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAg
ICAgICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBpdmFy
X25hbWUgPSAnXyVzSGFuZGxlcicgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4
X2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlk
PCVzPiAlczsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKKyAgICAgICAgICAgIGlm
IGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgorICAgICAgICAg
ICAgICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChP
YmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAg
ICAgICAgaXZhcl9uYW1lID0gJ18lc0V2ZW50RGlzcGF0Y2hlcicgJSBPYmpDR2VuZXJhdG9yLnZh
cmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICVzIColczsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkK
KyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgX2dlbmVyYXRlX2RlYWxsb2Moc2VsZiwg
ZG9tYWlucyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctICh2
b2lkKWRlYWxsb2MnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBmb3IgZG9t
YWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYu
X2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgW18lc0hhbmRsZXIgcmVsZWFzZV07JyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9w
cmVmaXhfZm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBh
bmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgW18lc0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVyYXRvci52
YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIFtzdXBlciBkZWFsbG9jXTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQor
ICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJf
Zm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ3Zhcmlh
YmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2Rv
bWFpbihkb21haW4pLAorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLkNvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbikuc3Vic3Rp
dHV0ZShOb25lLCAqKnNldHRlcl9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNw
YXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGdldHRlcl9h
cmdzID0geworICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJF
RklYLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAg
ICAgICAgICAndmFyaWFibGVOYW1lUHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1l
X3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbiksCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRl
bXBsYXRlKE9iakNUZW1wbGF0ZXMuQ29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0aW9uKS5z
dWJzdGl0dXRlKE5vbmUsICoqZ2V0dGVyX2FyZ3MpCisKKyAgICBkZWYgX3ZhcmlhYmxlX25hbWVf
cHJlZml4X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBk
b21haW4uZG9tYWluX25hbWUKKyAgICAgICAgaWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnRE9N
Jyk6CisgICAgICAgICAgICByZXR1cm4gJ2RvbScgKyBkb21haW5fbmFtZVszOl0KKyAgICAgICAg
aWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnQ1NTJyk6CisgICAgICAgICAgICByZXR1cm4gJ2Nz
cycgKyBkb21haW5fbmFtZVszOl0KKyAgICAgICAgcmV0dXJuIGRvbWFpbl9uYW1lWzoxXS5sb3dl
cigpICsgZG9tYWluX25hbWVbMTpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVy
cy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiZDVhYjNmNWE5
ZWJiNGM4ZjE2M2NkYTFlMzY4NzYzZDIyMjM3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Nv
bnZlcnNpb25faGVscGVycy5weQpAQCAtMCwwICsxLDE1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVt
cGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBtb2RlbHMgaW1w
b3J0IEVudW1UeXBlCitmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQor
CisKK2RlZiBhZGRfbmV3bGluZShsaW5lcyk6CisgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9
PSAnJzoKKyAgICAgICAgcmV0dXJuCisgICAgbGluZXMuYXBwZW5kKCcnKQorCisKK2NsYXNzIE9i
akNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFt
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclc0VudW1Db252ZXJzaW9uSGVscGVycy5oJyAlIE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNl
bGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRl
X2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAg
ICBoZWFkZXJzID0gWworICAgICAgICAgICAgJyIlc0FycmF5Q29udmVyc2lvbkhlbHBlcnMuaCIn
ICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgXQorCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAn
ICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAg
ZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0g
W10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5Db252ZXJzaW9uSGVs
cGVyc1ByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbnZlcnNpb25IZWxwZXJzU3Rh
bmRhcmQpLnN1YnN0aXR1dGUoTm9uZSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbnZlcnNpb25IZWxwZXJz
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVy
biAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9jb252ZXJz
aW9uX2Z1bmN0aW9ucyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAg
ICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCisgICAgICAgIGZvciBkZWNsYXJhdGlv
biBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGlu
ZShsaW5lcykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlv
bikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5j
ZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29u
dmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisKKyAgICAg
ICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9t
YWluLmNvbW1hbmRzOgorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxf
cGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFt
ZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFt
ZXRlci50eXBlLmlzX2Fub255bW91cyk6CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5l
KGxpbmVzKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5j
b21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisKKyAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51
bXMuCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlm
IChpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBl
LmlzX2Fub255bW91cyk6CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQor
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwg
cGFyYW1ldGVyKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihzZWxm
LCBkb21haW4sIGRlY2xhcmF0aW9uKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNs
YXJhdGlvbikKKyAgICAgICAgZW51bV92YWx1ZXMgPSBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFs
dWVzKCkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92
YWx1ZXMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mcm9tX3By
b3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICByZXR1
cm4gJ1xuXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2NvbnZlcnNpb25fZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIp
OgorICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVf
Zm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICBl
bnVtX3ZhbHVlcyA9IG1lbWJlci50eXBlLmVudW1fdmFsdWVzKCkKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3Rv
Y29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1f
bmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRl
cihzZWxmLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAg
ICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikKKyAgICAgICAgZW51bV92YWx1ZXMgPSBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygp
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2VudW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVz
KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2Nv
bF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAgcmV0dXJuICdc
blxuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9j
b2xfc3RyaW5nKHNlbGYsIG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoJXMgdmFsdWUpJyAlIG9iamNfZW51bV9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzd2l0Y2godmFsdWUpIHsnKQorICAgICAg
ICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3ZhbHVlczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGNhc2UgJXMlczonICUgKG9iamNfZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRf
bmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiJXMiKTsnICUgZW51bV92YWx1ZSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1f
ZnJvbV9wcm90b2NvbF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKToK
KyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ2lubGluZSAlcyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5n
IHZhbHVlKScgJSBvYmpjX2VudW1fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAg
ICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAodmFsdWUgPT0gIiVzIiknICUgZW51bV92YWx1ZSkKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gJXMlczsnICUgKG9iamNfZW51bV9uYW1lLCBH
ZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOycpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIHJldHVybiAlcyVzOycgJSAob2JqY19lbnVtX25hbWUsIEdlbmVyYXRv
ci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWVzWzBdKSkpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhlMDg1
MjU5NzQ1NGZhMjY1MzA2ZTkxNjZhYWU5OGRkMjY3ZWJlMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDEzNyBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitm
cm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBD
cHBHZW5lcmF0b3IKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zy
b20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0
ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzRXZlbnREaXNwYXRjaGVycy5t
bScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICci
JXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwK
KyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
JywKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAg
ICAgICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJ
bmNsdWRlJzogJyIlc0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisg
ICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAl
IGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgIH0KKwor
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2Vj
dGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxl
bWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9ucywgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMoc2VsZiwg
ZG9tYWluKToKKyAgICAgICAgaWYgbm90IGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICByZXR1
cm4gJycKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9t
YWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4u
ZG9tYWluX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzJyAl
IG9iamNfbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIEFTU0VSVChjb250cm9sbGVyKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJu
IHNlbGY7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudChkb21haW4sIGV2ZW50KSkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnQoc2Vs
ZiwgZG9tYWluLCBldmVudCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X3NpZ25hdHVyZShkb21haW4sIGV2ZW50KSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRD
aGFubmVsKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFmcm9udGVuZENoYW5u
ZWwpJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJXMuJXMiKSk7JyAlIChkb21haW4uZG9tYWluX25h
bWUsIGV2ZW50LmV2ZW50X25hbWUpKQorICAgICAgICBpZiBldmVudC5ldmVudF9wYXJhbWV0ZXJz
OgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X291dF9wYXJh
bWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBmcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X3NpZ25hdHVyZShzZWxmLCBkb21h
aW4sIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXMnICUgZXZlbnQuZXZlbnRfbmFtZQorICAgICAgICBw
YWlycyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVy
czoKKyAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBPYmpDR2Vu
ZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJh
bWV0ZXIpLCBwYXJhbV9uYW1lKSkKKyAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBd
KQorICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXMnICUgKGV2ZW50LmV2ZW50X25hbWUs
ICcgJy5qb2luKHBhaXJzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRl
cnMoc2VsZiwgZG9tYWluLCBldmVudCk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQorICAgICAg
ICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHNh
ZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVy
YXRvci5vYmpjX3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0
ZXIudHlwZSwgc2FmZV92YXJfbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0
LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBwYXJhbXNPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0
X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQorICAgICAgICByZXR1cm4gbGluZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU1
NmY0MmU5ZDEzZjhmN2ZmZDhjYjI0OWZmNzVlMWNhZGVhZDk1NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMjI3IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0
ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJvbSBvYmpjX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwor
Citsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgYWRkX25ld2xpbmUo
bGluZXMpOgorICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgICAgIHJldHVy
bgorICAgIGxpbmVzLmFwcGVuZCgnJykKKworCitjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKEdl
bmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
CisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzLmgn
ICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChz
ZWxmKToKKyAgICAgICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4nLAorICAgICAgICBdKQorCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAn
ICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCisgICAgICAgIH0KKwor
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgdHlw
ZV9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90
eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlucykKKyAgICAgICAgY29tbWFuZF9kb21h
aW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5k
X2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisgICAgICAgIGV2ZW50X2Rv
bWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50
X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisKKyAgICAgICAgIyBG
SVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzODIyMj4gV2ViIEluc3BlY3RvcjogUmVkdWNl
IHVubmVjZXNzYXJ5IGVudW1zL3R5cGVzIGdlbmVyYXRlZCBpbiBPYmpDIFByb3RvY29sIEludGVy
ZmFjZXMKKyAgICAgICAgIyBDdXJyZW50bHkgd2UgZ2VuZXJhdGUgZW51bXMvdHlwZXMgZm9yIGFs
bCB0eXBlcyBpbiB0aGUgdHlwZV9kb21haW5zLiBGb3IgdGhlIGJ1aWx0LWluCisgICAgICAgICMg
SlNDIGRvbWFpbnMgKERlYnVnZ2VyLCBSdW50aW1lKSB0aGlzIHByb2R1Y2VzIGV4dHJhIHVudXNl
ZCB0eXBlcy4gV2Ugb25seSBuZWVkIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGhlc2UgdHlwZXMg
aWYgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgY29tbWFuZF9kb21haW5zIG9yIGV2ZW50X2Rv
bWFpbnMuCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShPYmpDVGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1h
cChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSkpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5f
Z2VuZXJhdGVfZW51bXMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2Rv
bWFpbnMpKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9u
ZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xzLCBjb21tYW5kX2RvbWFpbnMp
KSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFw
KHNlbGYuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRlclBvc3RsdWRl
KS5zdWJzdGl0dXRlKE5vbmUpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50
eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1zKHNlbGYsIGRvbWFp
bik6CisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJl
ciBlbnVtcy4KKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0
aW9uczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRp
b24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50
eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxp
bmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkK
KworICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgorICAgICAgICBmb3IgY29tbWFu
ZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1l
dGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50
eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikpCisKKyAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMuCisgICAgICAgIGZvciBl
dmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVu
dC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1l
dGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorCisgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVzKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgIyBUeXBlIGludGVyZmFjZXMuCisgICAgICAg
IGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAgICAg
ICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255
bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQorICAgICAgICByZXR1cm4gc2VsZi5f
Z2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFtZSwgZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVl
cygpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVyKHNlbGYs
IGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0g
T2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRl
Y2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9i
amNfZW51bV9uYW1lLCBtZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3Jf
Y29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgorICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21h
aW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFtZSwgcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1
ZXMoKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bShzZWxmLCBlbnVtX25hbWUsIGVudW1fdmFs
dWVzKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3R5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsICVzKSB7JyAlIGVudW1fbmFtZSkKKyAgICAgICAgZm9yIGVudW1f
dmFsdWUgaW4gZW51bV92YWx1ZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyVz
LCcgJSAoZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShl
bnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZShzZWxm
LCBkb21haW4sIGRlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBvYmpj
X25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBl
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgOiAlcycgJSAob2JqY19uYW1l
LCBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRSkpCisgICAgICAgIHJlcXVpcmVk
X21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwg
ZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmls
dGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9t
ZW1iZXJzKQorICAgICAgICBpZiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKGRv
bWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQorICAgICAgICBmb3IgbWVtYmVy
IGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qIHJlcXVp
cmVkICovICcgKyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoZGVjbGFyYXRpb24sIG1l
bWJlcikpCisgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnLyogb3B0aW9uYWwgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJl
cl9wcm9wZXJ0eShkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdA
ZW5kJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJh
dGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoc2VsZiwgZG9tYWluLCBkZWNsYXJh
dGlvbiwgcmVxdWlyZWRfbWVtYmVycyk6CisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgZm9y
IG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgb2JqY190eXBlID0gT2Jq
Q0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAg
ICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVu
dGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6
KCVzKSVzJyAlICh2YXJfbmFtZSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIHBhaXJz
WzBdID0gdWNmaXJzdChwYWlyc1swXSkKKyAgICAgICAgcmV0dXJuICctIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGglczsnICUgJyAnLmpvaW4ocGFpcnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX21lbWJl
cl9wcm9wZXJ0eShzZWxmLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgYWNjZXNzb3Jf
dHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIobWVtYmVy
KQorICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIHJldHVybiAnQHByb3BlcnR5IChub25hdG9t
aWMsICVzKSAlczsnICUgKGFjY2Vzc29yX3R5cGUsIGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5
cGUsIE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1l
bWJlcl9uYW1lKSkpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xzKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRz
OgorICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5IYW5kbGVyJyAlIChPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0Bwcm90b2NvbCAlcyA8TlNPYmplY3Q+JyAlIG9iamNfbmFtZSkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQHJlcXVpcmVkJykKKyAgICAgICAgICAgIGZvciBjb21tYW5kIGlu
IGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBjb21tYW5kKSkKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFp
biwgY29tbWFuZCk6CisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgcGFpcnMuYXBwZW5kKCdF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjaycpCisg
ICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vzc0NhbGxiYWNrOiglcylzdWNjZXNzQ2FsbGJhY2sn
ICUgc2VsZi5fY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSkKKyAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNf
dHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwg
cGFyYW1fbmFtZSkpCisgICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsnICUgKGNvbW1h
bmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCisKKyAgICBkZWYgX2NhbGxiYWNrX2Js
b2NrX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIHBhaXJzID0g
W10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFpcnMuYXBwZW5kKGpvaW5fdHlwZV9hbmRfbmFtZShPYmpDR2VuZXJhdG9y
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICd2b2lkKF4p
KCVzKScgJSAnLCAnLmpvaW4ocGFpcnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2ludGVy
ZmFjZXMoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBkb21h
aW4uZXZlbnRzOgorICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3Bh
dGNoZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlcyA6IE5TT2JqZWN0JyAlIG9i
amNfbmFtZSkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJm
YWNlKGRvbWFpbiwgZXZlbnQpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xl
X2V2ZW50X2ludGVyZmFjZShzZWxmLCBkb21haW4sIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2
ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXM7JyAl
IGV2ZW50LmV2ZW50X25hbWUKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9uYW1lID0g
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOigl
cyklcycgJSAocGFyYW1fbmFtZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRv
bWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCisgICAgICAg
IHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1swXSkKKyAgICAgICAgcmV0dXJuICctICh2b2lkKSVz
V2l0aCVzOycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNTAxYWQzMjQyYmRhNWEzYWNhMGUyNmJjNzg2ZDQ0YmEwMjE0MDAyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkKQEAgLTAsMCArMSw3NSBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAorZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBv
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
T2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitj
bGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnJXNJbnRlcm5hbC5oJyAlIE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAg
IGhlYWRlcnMgPSBzZXQoWworICAgICAgICAgICAgJyIlcy5oIicgJSBPYmpDR2VuZXJhdG9yLk9C
SkNfUFJFRklYLAorICAgICAgICAgICAgJyJSV0lQcm90b2NvbEpTT05PYmplY3RJbnRlcm5hbC5o
IicsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPicsCisg
ICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPicsCisgICAgICAgIF0pCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAg
ICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBp
biBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKE9i
akNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRl
cihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5HZW5lcmljSGVhZGVyUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0
Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQb3N0bHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5q
b2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZh
dGVfaW50ZXJmYWNlcyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGlmIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2
ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFp
bl9uYW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIChQcml2YXRl
KScgJSBvYmpjX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVhNTI3YWMzNzAwNTQwNmVmMmYzZTdmZDI4OTllNzEwY2Ri
MTcwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTAsMCArMSwxNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20g
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBP
YmplY3RUeXBlCitmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9t
IG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBh
cyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisK
K2RlZiBhZGRfbmV3bGluZShsaW5lcyk6CisgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAn
JzoKKyAgICAgICAgcmV0dXJuCisgICAgbGluZXMuYXBwZW5kKCcnKQorCisKK2NsYXNzIE9iakNQ
cm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9y
Ll9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRf
ZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBPYmpDR2VuZXJh
dG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5f
dHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25k
YXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgi
JyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+
JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICBdCisKKyAgICAg
ICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzSW50
ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdzZWNv
bmRhcnlJbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFk
ZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMg
PSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRl
bmQobWFwKHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlv
blBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1l
bnRhdGlvbnMoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYg
KGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
LmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBs
ZW1lbnRhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlcycgJSBPYmpDR2VuZXJh
dG9yLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKSkKKyAgICAgICAgcmVxdWly
ZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFs
LCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBk
ZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCisgICAgICAgIGZvciBtZW1iZXIgaW4gZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKGRv
bWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZ2V0dGVyX2Zvcl9tZW1i
ZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVt
YmVycyhzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKKyAgICAg
ICAgcGFpcnMgPSBbXQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Cisg
ICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0
b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQorICAg
ICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHZhcl9uYW1lLCBvYmpjX3R5cGUs
IHZhcl9uYW1lKSkKKyAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQorICAgICAg
ICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBP
YmpDIFByb3RvY29sIEludGVyZmFjZXMgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBh
cmd1bWVudHMKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aCVzOycgJSAnICcuam9pbihwYWlycykpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAg
dmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1l
bWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYuJXMg
PSAlczsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBf
Z2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVt
YmVyKToKKyAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21l
bWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0
b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQorICAg
ICAgICBzZXR0ZXJfbWV0aG9kID0gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9y
X21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Np
b24gPSBPYmpDR2VuZXJhdG9yLm9iamNfdG9fcHJvdG9jb2xfZXhwcmVzc2lvbl9mb3JfbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIsIHZhcl9uYW1lKQorICAgICAgICAjIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29sIEludGVy
ZmFjZXMgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAl
ICh1Y2ZpcnN0KHZhcl9uYW1lKSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtzdXBlciAlczolcyBmb3JL
ZXk6QCIlcyJdOycgJSAoc2V0dGVyX21ldGhvZCwgY29udmVyc2lvbl9leHByZXNzaW9uLCBtZW1i
ZXIubWVtYmVyX25hbWUpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJl
cihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBvYmpjX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIp
CisgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRl
bnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgIGdldHRlcl9tZXRob2QgPSBPYmpD
R2VuZXJhdG9yLm9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1i
ZXIpCisgICAgICAgIGJhc2ljX2V4cHJlc3Npb24gPSAnW3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0
dGVyX21ldGhvZCwgbWVtYmVyLm1lbWJlcl9uYW1lKQorICAgICAgICBjb252ZXJzaW9uX2V4cHJl
c3Npb24gPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVt
YmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIGJhc2ljX2V4cHJlc3Npb24pCisgICAgICAgIGxpbmVz
ID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctICglcyklcycgJSAob2JqY190eXBlLCB2YXJf
bmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHJldHVybiAlczsnICUgY29udmVyc2lvbl9leHByZXNzaW9uKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqZWN0aXZlX2MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMGE4MDM5MjZhZDVhYWUxZDRlODZlYzMzYjZiMzBjNmEwOTFhZDU0OC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weQorKysg
L2Rldi9udWxsCkBAIC0xLDQ5NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMg
Q29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1mcm9t
IGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQg
UHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5
cGUsIEZyYW1ld29ya3MKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQot
ZGVmIGpvaW5fdHlwZV9hbmRfbmFtZSh0eXBlX3N0ciwgbmFtZV9zdHIpOgotICAgIGlmIHR5cGVf
c3RyLmVuZHN3aXRoKCcqJyk6Ci0gICAgICAgIHJldHVybiB0eXBlX3N0ciArIG5hbWVfc3RyCi0g
ICAgcmV0dXJuIHR5cGVfc3RyICsgJyAnICsgbmFtZV9zdHIKLQotCi1kZWYgc3RyaXBfYmxvY2tf
Y29tbWVudF9tYXJrZXJzKHN0cik6Ci0gICAgcmV0dXJuIHN0ci5yZXBsYWNlKCcvKicsICcnKS5y
ZXBsYWNlKCcqLycsICcnKQotCi0KLWRlZiByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKHN0ciwg
cG9zc2libGVfZHVwbGljYXRlKToKLSAgICByZXR1cm4gc3RyLnJlcGxhY2UocG9zc2libGVfZHVw
bGljYXRlICsgcG9zc2libGVfZHVwbGljYXRlLCBwb3NzaWJsZV9kdXBsaWNhdGUpCi0KLQotX09C
SkNfSURFTlRJRklFUl9SRU5BTUVfTUFQID0gewotICAgICd0aGlzJzogJ3RoaXNPYmplY3QnLCAg
IyBEZWJ1Z2dlci5DYWxsRnJhbWUudGhpcwotICAgICdkZXNjcmlwdGlvbic6ICdzdHJpbmdSZXBy
ZXNlbnRhdGlvbicsICAjIFJ1bnRpbWUuUmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uCi0gICAgJ2lk
JzogJ2lkZW50aWZpZXInLCAgIyBQYWdlLkZyYW1lLmlkLCBSdW50aW1lLkV4ZWN1dGlvbkNvbnRl
eHREZXNjcmlwdGlvbi5pZCwgRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbi5pZAotfQotCi1fT0JK
Q19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGlu
IF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5pdGVyaXRlbXMoKSkKLQotCi1jbGFzcyBPYmpD
VHlwZUNhdGVnb3J5OgotICAgIFNpbXBsZSA9IDAKLSAgICBTdHJpbmcgPSAxCi0gICAgT2JqZWN0
ID0gMgotICAgIEFycmF5ID0gMwotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjYXRlZ29y
eV9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRp
dmVUeXBlKSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdzdHJpbmcnOgot
ICAgICAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZwotICAgICAgICAg
ICAgaWYgIF90eXBlLnJhd19uYW1lKCkgaW4gWydvYmplY3QnLCAnYW55J106Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0Ci0gICAgICAgICAgICBpZiBfdHlw
ZS5yYXdfbmFtZSgpIGlzICdhcnJheSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBl
Q2F0ZWdvcnkuQXJyYXkKLSAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LlNpbXBs
ZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAg
ICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0Ci0gICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5
LkFycmF5Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAg
ICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUu
YWxpYXNlZF90eXBlKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToK
LSAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKF90
eXBlLnByaW1pdGl2ZV90eXBlKQotICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIE9iakNH
ZW5lcmF0b3I6Ci0gICAgT0JKQ19QUkVGSVggPSAnUldJUHJvdG9jb2wnCi0gICAgT0JKQ19KU09O
X09CSkVDVF9CQVNFID0gJyVzSlNPTk9iamVjdCcgJSBPQkpDX1BSRUZJWAotCi0gICAgIyBBZGp1
c3QgaWRlbnRpZmllciBuYW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBPYmpDIGtleXdvcmRzLgotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBpZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihu
YW1lKToKLSAgICAgICAgcmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5nZXQobmFt
ZSwgbmFtZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19pZGVudGlmaWVyX3Rv
X2lkZW50aWZpZXIobmFtZSk6Ci0gICAgICAgIHJldHVybiBfT0JKQ19JREVOVElGSUVSX1JFVkVS
U0VfUkVOQU1FX01BUC5nZXQobmFtZSwgbmFtZSkKLQotICAgICMgR2VuZXJhdGUgT2JqQyB0eXBl
cywgY29tbWFuZCBoYW5kbGVycywgYW5kIGV2ZW50IGRpc3BhdGNoZXJzIGZvciBhIHN1YnNldCBv
ZiBkb21haW5zLgotCi0gICAgRE9NQUlOU19UT19HRU5FUkFURSA9IFsnQ1NTJywgJ0RPTScsICdE
T01TdG9yYWdlJywgJ05ldHdvcmsnLCAnUGFnZSddCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKG1vZGVsKToKLSAgICAgICAg
ZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXMoZG9tYWluKToKLSAgICAgICAgICAgIGlm
IG1vZGVsLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKLSAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJ
TlNfVE9fR0VORVJBVEUpCi0gICAgICAgICAgICB3aGl0ZWxpc3QudXBkYXRlKHNldChbJ0NvbnNv
bGUnLCAnRGVidWdnZXInLCAnUnVudGltZSddKSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4u
ZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX3R5cGVzCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0
ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihtb2RlbCk6Ci0gICAgICAgIGRlZiBzaG91
bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcihkb21haW4pOgotICAgICAgICAgICAg
aWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQotICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9N
QUlOU19UT19HRU5FUkFURSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUg
aW4gd2hpdGVsaXN0Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1h
bmRfaGFuZGxlcgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3Vs
ZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcihkb21haW4pOgotICAgICAgICAgICAg
aWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQotICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9N
QUlOU19UT19HRU5FUkFURSkKLSAgICAgICAgICAgIHdoaXRlbGlzdC5hZGQoJ0NvbnNvbGUnKQot
ICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKLSAgICAg
ICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcgotCi0gICAg
IyBPYmpDIGVudW0gYW5kIHR5cGUgbmFtZXMuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IG9iamNfbmFtZV9mb3JfdHlwZSh0eXBlKToKLSAgICAgICAgbmFtZSA9IHR5cGUucXVhbGlmaWVk
X25hbWUoKS5yZXBsYWNlKCcuJywgJycpCi0gICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRl
X2Zyb21fc3RyKG5hbWUsIHR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSkKLSAgICAgICAg
cmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1f
ZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pOgotICAgICAgICBkb21haW5fbmFtZSA9IGRlY2xhcmF0
aW9uLnR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMn
ICUgKGRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIG5h
bWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQotICAgICAg
ICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCi0KLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51
bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gbWVt
YmVyLnR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMl
cycgJSAoZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwgdWNmaXJzdCht
ZW1iZXIubWVtYmVyX25hbWUpKQotICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9t
X3N0cihuYW1lLCBkb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBv
YmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRf
b3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgotICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFp
bi5kb21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25hbWUsIHVj
Zmlyc3QoZXZlbnRfb3JfY29tbWFuZF9uYW1lKSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQotICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBk
b21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2VudW1fbmFt
ZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKF90eXBlKToKLSAgICAgICAgZG9tYWluX25hbWUgPSBf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lCi0gICAgICAgIG5hbWUgPSBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpLnJlcGxhY2UoJy4nLCAnJykKLSAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBs
aWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiAnJXMlcycg
JSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKLQotICAgICMgTWlzY2VsbGFuZW91
cyBuYW1lIGhhbmRsaW5nLgotICAgIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdmFyaWFi
bGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICBkb21haW5fbmFtZSA9
IGRvbWFpbi5kb21haW5fbmFtZQotICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdE
T00nKToKLSAgICAgICAgICAgIHJldHVybiAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAg
ICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdDU1MnKToKLSAgICAgICAgICAgIHJldHVybiAn
Y3NzJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxv
d2VyKCkgKyBkb21haW5fbmFtZVsxOl0KLQotICAgICMgVHlwZSBiYXNpY3MuCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIG9iamNfYWNjZXNzb3JfdHlwZV9mb3JfcmF3X25hbWUocmF3X25h
bWUpOgotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ3N0cmluZycsICdhcnJheSddOgotICAgICAg
ICAgICAgcmV0dXJuICdjb3B5JwotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2ludGVnZXInLCAn
bnVtYmVyJywgJ2Jvb2xlYW4nXToKLSAgICAgICAgICAgIHJldHVybiAnYXNzaWduJwotICAgICAg
ICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgIHJldHVybiAn
cmV0YWluJwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBvYmpjX3R5cGVfZm9yX3Jhd19uYW1lKHJhd19uYW1lKToKLSAgICAgICAgaWYgcmF3X25hbWUg
aXMgJ3N0cmluZyc6Ci0gICAgICAgICAgICByZXR1cm4gJ05TU3RyaW5nIConCi0gICAgICAgIGlm
IHJhd19uYW1lIGlzICdhcnJheSc6Ci0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkgKicKLSAg
ICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgotICAgICAgICAgICAgcmV0dXJuICdOU0lu
dGVnZXInCi0gICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgotICAgICAgICAgICAgcmV0
dXJuICdkb3VibGUnCi0gICAgICAgIGlmIHJhd19uYW1lIGlzICdib29sZWFuJzoKLSAgICAgICAg
ICAgIHJldHVybiAnQk9PTCcKLSAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0
J106Ci0gICAgICAgICAgICByZXR1cm4gJyVzIConICUgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05f
T0JKRUNUX0JBU0UKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgb2JqY19jbGFzc19mb3JfcmF3X25hbWUocmF3X25hbWUpOgotICAgICAgICBpZiByYXdf
bmFtZSBpcyAnc3RyaW5nJzoKLSAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcnCi0gICAgICAg
IGlmIHJhd19uYW1lIGlzICdhcnJheSc6Ci0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXknCi0g
ICAgICAgIGlmIHJhd19uYW1lIGluIFsnaW50ZWdlcicsICdudW1iZXInLCAnYm9vbGVhbiddOgot
ICAgICAgICAgICAgcmV0dXJuICdOU051bWJlcicKLSAgICAgICAgaWYgcmF3X25hbWUgaW4gWydh
bnknLCAnb2JqZWN0J106Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5PQkpDX0pT
T05fT0JKRUNUX0JBU0UKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgRklYTUU6IENhbiB0
aGVzZSBwcm90b2NvbF90eXBlIGZ1bmN0aW9ucyBiZSByZW1vdmVkIGluIGZhdm9yIG9mIEMrKyBn
ZW5lcmF0b3JzIGZ1bmN0aW9ucz8KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9j
b2xfdHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgotICAgICAgICBpZiByYXdfbmFtZSBpcyAn
c3RyaW5nJzoKLSAgICAgICAgICAgIHJldHVybiAnU3RyaW5nJwotICAgICAgICBpZiByYXdfbmFt
ZSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAgICByZXR1cm4gJ2ludCcKLSAgICAgICAgaWYgcmF3
X25hbWUgaXMgJ251bWJlcic6Ci0gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZScKLSAgICAgICAg
aWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgotICAgICAgICAgICAgcmV0dXJuICdib29sJwotICAg
ICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgIHJldHVy
biAnSW5zcGVjdG9yT2JqZWN0JwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBwcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90
eXBlLmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9m
b3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQotICAgICAgICBpZiAoaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
KToKLSAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zv
cl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8JXM+JyAlIHN1Yl90eXBlCi0gICAgICAgIHJldHVybiBOb25lCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUpOgot
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKLSAgICAgICAgICAg
IF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpj
X2NsYXNzX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiAoaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9y
Lm9iamNfY2xhc3NfZm9yX3Jhd19uYW1lKF90eXBlLnByaW1pdGl2ZV90eXBlLnJhd19uYW1lKCkp
Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAg
ICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHN1Yl90eXBl
ID0gc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19m
b3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpKQotICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5
Lyo8JXM+Ki8nICUgc3ViX3R5cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIobWVtYmVyKToKLSAg
ICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXJf
aW50ZXJuYWwobWVtYmVyLnR5cGUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNf
YWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlKToKLSAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBl
LmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nvcl90eXBl
X2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnYXNzaWduJwotICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdy
ZXRhaW4nCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAg
ICAgICAgIHJldHVybiAnY29weScKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgb2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6
Ci0gICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyX2ludGVy
bmFsKG1lbWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBvYmpjX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRp
b24sIG1lbWJlcik6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkp
OgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKLSAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpD
R2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKLSAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6Ci0gICAgICAgICAgICBpZiAoX3R5
cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5v
YmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1i
ZXIpCi0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jf
bm9uX2Fub255bW91c19lbnVtKF90eXBlKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19uYW1l
X2Zvcl90eXBlKF90eXBlKSArICcgKicKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFy
cmF5VHlwZSkpOgotICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50X21h
cmtlcnMoT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlw
ZSkpCi0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLyAqJyAlIHN1Yl90eXBlCi0g
ICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfdHlw
ZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgcmVz
cGVjdF9vcHRpb25hbD1UcnVlKToKLSAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5v
YmpjX3R5cGVfZm9yX3BhcmFtX2ludGVybmFsKHBhcmFtZXRlci50eXBlLCBkb21haW4sIGV2ZW50
X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQotICAgICAgICBpZiByZXNwZWN0X29wdGlvbmFs
IGFuZCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICBpZiBvYmpjX3R5cGUuZW5k
c3dpdGgoJyonKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqY190eXBlICsgJyonCi0gICAg
ICAgICAgICByZXR1cm4gb2JqY190eXBlICsgJyAqJwotICAgICAgICByZXR1cm4gb2JqY190eXBl
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJu
YWwoX3R5cGUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgotICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5
cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgot
ICAgICAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9h
bm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBh
cmFtZXRlcikKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1l
X2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5cGUpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpj
X25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAqJwotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2NrX2NvbW1l
bnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUuZWxlbWVu
dF90eXBlKSkKLSAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiovIConICUgc3ViX3R5
cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgT2JqQyA8LT4gUHJvdG9jb2wgY29udmVy
c2lvbiBmb3IgY29tbWFuZHMgYW5kIGV2ZW50cy4KLSAgICAjICAgLSBjb252ZXJ0IGEgY29tbWFu
ZCBjYWxsIHBhcmFtZXRlciByZWNlaXZlZCBmcm9tIFByb3RvY29sIHRvIE9iakMgZm9yIGhhbmRs
ZXIKLSAgICAjICAgLSBjb252ZXJ0IGEgY29tbWFuZCByZXR1cm4gcGFyYW1ldGVyIGluIGNhbGxi
YWNrIGJsb2NrIGZyb20gT2JqQyB0byBQcm90b2NvbCB0byBzZW5kCi0gICAgIyAgIC0gY29udmVy
dCBhbiBldmVudCBwYXJhbWV0ZXIgZnJvbSBPYmpDIEFQSSB0byBQcm90b2NvbCB0byBzZW5kCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Np
b25fZm9yX3ZhcmlhYmxlKHZhcl90eXBlLCB2YXJfbmFtZSk6Ci0gICAgICAgIGNhdGVnb3J5ID0g
T2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZSh2YXJfdHlwZSkKLSAgICAgICAgaWYg
Y2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0
cmluZ106Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhcl90eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICd0b1Byb3RvY29sU3RyaW5nKCVzKScgJSB2YXJfbmFtZQot
ICAgICAgICAgICAgcmV0dXJuIHZhcl9uYW1lCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNU
eXBlQ2F0ZWdvcnkuT2JqZWN0OgotICAgICAgICAgICAgcmV0dXJuICdbJXMgdG9JbnNwZWN0b3JP
YmplY3RdJyAlIHZhcl9uYW1lCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdv
cnkuQXJyYXk6Ci0gICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90
b2NvbF90eXBlX2Zvcl90eXBlKHZhcl90eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgIG9i
amNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUuZWxl
bWVudF90eXBlKQotICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAnSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0
b3JTdHJpbmdBcnJheUFycmF5KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAgaWYgcHJvdG9j
b2xfdHlwZSBpcyAnU3RyaW5nJyBhbmQgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yU3RyaW5nQXJyYXkoJXMpJyAlIHZhcl9uYW1lCi0g
ICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdpbnQnIGFuZCBvYmpjX2NsYXNzIGlzICdO
U051bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JJbnRlZ2VyQXJyYXko
JXMpJyAlIHZhcl9uYW1lCi0gICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdkb3VibGUn
IGFuZCBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdp
bnNwZWN0b3JEb3VibGVBcnJheSglcyknICUgdmFyX25hbWUKLSAgICAgICAgICAgIHJldHVybiAn
aW5zcGVjdG9yT2JqZWN0QXJyYXkoJXMpJyAlIHZhcl9uYW1lCi0KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX21lbWJlcihuYW1l
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlw
ZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgot
ICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9i
akNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNs
YXJhdGlvbiwgbWVtYmVyKSwgbmFtZSkKLSAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29s
U3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9h
bm9ueW1vdXNfZW51bShtZW1iZXIudHlwZSksIG5hbWUpCi0gICAgICAgIHJldHVybiBPYmpDR2Vu
ZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKG1lbWJl
ci50eXBlLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3Byb3RvY29s
X2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0ZXIobmFtZSwgZG9tYWluLCBldmVudF9vcl9j
b21tYW5kX25hbWUsIHBhcmFtZXRlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255
bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMp
JyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJh
bWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIG5hbWUpCi0g
ICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2Vu
ZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0ocGFyYW1ldGVyLnR5
cGUpLCBuYW1lKQotICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2lt
cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9m
b3JfdmFyaWFibGUodmFyX3R5cGUsIHZhcl9uYW1lKToKLSAgICAgICAgY2F0ZWdvcnkgPSBPYmpD
VHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKHZhcl90eXBlKQotICAgICAgICBpZiBjYXRl
Z29yeSBpbiBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5n
XToKLSAgICAgICAgICAgIHJldHVybiB2YXJfbmFtZQotICAgICAgICBpZiBjYXRlZ29yeSBpcyBP
YmpDVHlwZUNhdGVnb3J5Lk9iamVjdDoKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUpCi0gICAgICAgICAgICByZXR1cm4g
J1tbWyVzIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDolc10gYXV0b3JlbGVhc2VdJyAl
IChvYmpjX2NsYXNzLCB2YXJfbmFtZSkKLSAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVD
YXRlZ29yeS5BcnJheToKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9i
amNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQotICAgICAgICAgICAgaWYg
b2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY1N0
cmluZ0FycmF5KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAn
TlNOdW1iZXInOiAgIyBGSVhNRTogSW50ZWdlciBvciBEb3VibGU/Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdvYmpjSW50ZWdlckFycmF5KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAgcmV0
dXJuICdvYmpjQXJyYXk8JXM+KCVzKScgJSAob2JqY19jbGFzcywgdmFyX25hbWUpCi0KLSAgICAj
IE9iakMgPC0+IEpTT04gb2JqZWN0IGNvbnZlcnNpb24gZm9yIHR5cGVzIGdldHRlcnMvc2V0dGVy
cy4KLSAgICAjICAgLSBjb252ZXJ0IGEgbWVtYmVyIHNldHRlciBmcm9tIE9iakMgQVBJIHRvIEpT
T04gb2JqZWN0IHNldHRlcgotICAgICMgICAtIGNvbnZlcnQgYSBtZW1iZXIgZ2V0dGVyIGZyb20g
SlNPTiBvYmplY3QgdG8gT2JqQyBBUEkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2Jq
Y190b19wcm90b2NvbF9leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwg
c3ViX2V4cHJlc3Npb24pOgotICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0
ZWdvcnlfZm9yX3R5cGUobWVtYmVyLnR5cGUpCi0gICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpD
VHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgotICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAg
IHJldHVybiAndG9Qcm90b2NvbFN0cmluZyglcyknICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAg
ICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlw
ZUNhdGVnb3J5Lk9iamVjdDoKLSAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgotICAg
ICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgotICAgICAgICAgICAg
b2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShtZW1iZXIudHlw
ZS5lbGVtZW50X3R5cGUpCi0gICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheSglcyknICUgc3Vi
X2V4cHJlc3Npb24KLSAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKLSAg
ICAgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBl
X2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgICAgICBpZiBw
cm90b2NvbF90eXBlIGlzICdkb3VibGUnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2lu
c3BlY3RvckRvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAgICAgICAgICAgICAg
IHJldHVybiAnaW5zcGVjdG9ySW50ZWdlckFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAg
ICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUgc3ViX2V4cHJlc3Np
b24KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9jb2xfdG9fb2JqY19leHByZXNz
aW9uX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3ViX2V4cHJlc3Npb24pOgotICAg
ICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUobWVtYmVy
LnR5cGUpCi0gICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSwg
T2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1i
ZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGlmIG1lbWJlci50eXBlLmlzX2Fu
b255bW91czoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8
JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2Vu
dW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBzdWJfZXhwcmVzc2lvbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0obWVtYmVyLnR5cGUpLCBz
dWJfZXhwcmVzc2lvbikKLSAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgotICAgICAg
ICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdDoKLSAgICAgICAgICAgIG9i
amNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24s
IG1lbWJlcikKLSAgICAgICAgICAgIHJldHVybiAnKCVzKSVzJyAlIChvYmpjX3R5cGUsIHN1Yl9l
eHByZXNzaW9uKQotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5
OgotICAgICAgICAgICAgcHJvdG9jb2xfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgICAgICBvYmpjX2Ns
YXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1l
bnRfdHlwZSkKLSAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ29iamNTdHJpbmdBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24K
LSAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKLSAgICAgICAgICAgICAg
ICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1l
bWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBl
IGlzICdkb3VibGUnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNEb3VibGVBcnJh
eSglcyknICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNJbnRl
Z2VyQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCi0gICAgICAgICAgICByZXR1cm4gJ29iamNB
cnJheTwlcz4oJXMpJyAlIChvYmpjX2NsYXNzLCBzdWJfZXhwcmVzc2lvbikKLQotICAgICMgSlNP
TiBvYmplY3Qgc2V0dGVyL2dldHRlciBzZWxlY3RvcnMgZm9yIHR5cGVzLgotCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBvYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlv
biwgbWVtYmVyKToKLSAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19zZXR0ZXJfbWV0
aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIp
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVt
YmVyX2ludGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBl
LmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlw
ZSkpOgotICAgICAgICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdfbmFtZSgpCi0gICAgICAgICAg
ICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRC
b29sJwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnc2V0SW50ZWdlcicKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1i
ZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJwotICAgICAgICAgICAgaWYg
cmF3X25hbWUgaXMgJ3N0cmluZyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcn
Ci0gICAgICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdh
cnJheSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnNwZWN0b3JBcnJheScKLSAgICAg
ICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCi0gICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcK
LSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAg
cmV0dXJuICdzZXRJbnNwZWN0b3JBcnJheScKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFy
YXRpb24sIG1lbWJlcik6Ci0gICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVy
X21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKG1lbWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVt
YmVyKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2dldHRlcl9tZXRob2RfZm9y
X21lbWJlcl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5hbGlhc2VkX3R5cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2
ZVR5cGUpKToKLSAgICAgICAgICAgIHJhd19uYW1lID0gX3R5cGUucmF3X25hbWUoKQotICAgICAg
ICAgICAgaWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgotICAgICAgICAgICAgICAgIHJldHVybiAn
Ym9vbEZvcktleScKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ2ludGVnZXJGb3JLZXknCi0gICAgICAgICAgICBpZiByYXdfbmFt
ZSBpcyAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2RvdWJsZUZvcktleScKLSAg
ICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVy
biAnc3RyaW5nRm9yS2V5JwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2Jq
ZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdvYmplY3RGb3JLZXknCi0gICAgICAgICAg
ICBpZiByYXdfbmFtZSBpcyAnYXJyYXknOgotICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVj
dG9yQXJyYXlGb3JLZXknCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBpZiAoaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnc3RyaW5nRm9y
S2V5JwotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAg
ICAgICAgcmV0dXJuICdvYmplY3RGb3JLZXknCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yQXJyYXlGb3JLZXkn
Ci0gICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGJiZDBmZjU1NTBhOWVkMzI3ZDA2
MmJlMWY0ODY5OThhZGZhOWZkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyAv
ZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5
cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQg
bG9nZ2luZwotaW1wb3J0IHN0cmluZwotaW1wb3J0IHJlCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVt
cGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgot
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBv
cnQgRnJhbWV3b3JrcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1j
bGFzcyBPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAg
ICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAg
IGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlz
cGF0Y2hlcnMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9y
LnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5l
cmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPicsCi0g
ICAgICAgICAgICAnPHd0Zi9SZXRhaW5QdHIuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVh
ZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xX
KycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAnaW5jbHVkZXMn
OiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10p
LAotICAgICAgICAgICAgJ2ZvcndhcmREZWNsYXJhdGlvbnMnOiBzZWxmLl9nZW5lcmF0ZV9vYmpj
X2ZvcndhcmRfZGVjbGFyYXRpb25zKCksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0g
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4sIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMp
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZik6Ci0g
ICAgICAgIGxpbmVzID0gWydAcHJvdG9jb2wgJXMlc0RvbWFpbkhhbmRsZXI7JyAlIChPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpIGZvciBkb21haW4gaW4gc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCldCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
bnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGRvbWFp
biBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xhc3MgJXMlc0RvbWFp
bkhhbmRsZXI7JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25h
bWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAg
ICAgICAgaWYgbm90IGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0g
ICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4g
ZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21t
YW5kKSkKLQotICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFt
ZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25z
JzogJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSwKLSAgICAgICAgICAgICdvYmpjUHJl
Zml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5l
cmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6
Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQn
XQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoR2VuZXJhdG9yLnR5cGVf
c3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgY29tbWFuZF9hcmdzID0gewotICAg
ICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAg
ICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKLSAgICAgICAgfQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1l
dGVycylzKSBvdmVycmlkZTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxNWU5Nzc2M2JhMTRjY2Uz
OWMzZGZkNjAzMTQxOTc3ODQ3YTEwNzRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWltcG9ydCByZQotZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9i
akNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQotZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgRnJh
bWV3b3JrcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBP
YmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAg
IEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3Bh
dGNoZXJzLm1tJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKLQotICAgIGRlZiBkb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwo
KSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAgICAg
ICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAg
ICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpD
X1BSRUZJWCwKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+JywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+JywKLSAgICAgICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAg
J3ByaW1hcnlJbmNsdWRlJzogJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2VuZXJh
dG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5q
b2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRl
cnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBkb21h
aW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAg
ICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBk
b21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgcmV0
dXJuICcnCi0KLSAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBmb3Ig
Y29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29t
bWFuZChkb21haW4sIGNvbW1hbmQpKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29tbWFu
ZF9kZWNsYXJhdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRp
b25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAgbGluZXMgPSBb
XQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCi0gICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZCgnJXMgaW5fJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2Vk
X2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQu
Y29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1l
dGVycyksCi0gICAgICAgICAgICAnc3VjY2Vzc0NhbGxiYWNrJzogc2VsZi5fZ2VuZXJhdGVfc3Vj
Y2Vzc19ibG9ja19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAotICAgICAgICAgICAgJ2Nv
bnZlcnNpb25zJzogc2VsZi5fZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQoZG9tYWlu
LCBjb21tYW5kKSwKLSAgICAgICAgICAgICdpbnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVfaW52
b2NhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0
ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxl
bWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKLQotICAgIGRlZiBf
Z2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQp
OgotICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAgICAgIyBGSVhNRTogPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzEzODIyMT4gV2ViIEluc3BlY3RvcjogT2JqQyBQcm90b2NvbCBJbnRlcmZhY2VzIHNo
b3VsZCB0aHJvdyBleGNlcHRpb25zIGZvciBuaWwgYXJndW1lbnRzCi0KLSAgICAgICAgaWYgY29t
bWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpj
X3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikK
LSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19v
YmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAg
IHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNf
dHlwZSwgdmFyX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXiglcykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJz
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57JykKLQotICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJz
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAg
ICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9y
X3R5cGUocGFyYW1ldGVyLnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2Vu
ZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKLSAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgdmFyX25hbWUKLSAgICAgICAgICAgICAgICBl
eHBvcnRfZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9leHBvcnRfZXhw
cmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHZhcl9leHByZXNzaW9uKQotICAg
ICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRPYmplY3QtPiVzKEFTQ0lJTGl0ZXJh
bCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcyknICUgdmFyX25hbWUpCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsnKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsn
KQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKLSAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQo
c2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBpZiBj
b21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQot
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUK
LSAgICAgICAgICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGluX3BhcmFtX25hbWUK
LSAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJh
bShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIEZhbHNlKQotICAgICAg
ICAgICAgaW5fcGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lID0gJyolcycgJSBpbl9wYXJhbV9uYW1l
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIGluX3BhcmFtX25hbWUKLSAgICAgICAgICAg
IGltcG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9l
eHByZXNzaW9uX2Zvcl9wYXJhbWV0ZXIoaW5fcGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lLCBkb21h
aW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCi0gICAgICAgICAgICBpZiBub3Qg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICVzID0gJXM7JyAlIChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2luX3BhcmFt
X25hbWUpLCBpbXBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzOycgJSBqb2luX3R5cGVfYW5kX25hbWUob2JqY190
eXBlLCBvYmpjX2luX3BhcmFtX25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGlmICglcyknICUgaW5fcGFyYW1fbmFtZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgJXMgPSAlczsnICUgKG9iamNfaW5fcGFyYW1fbmFtZSwgaW1wb3J0X2V4cHJl
c3Npb24pKQotCi0gICAgICAgIGlmIGxpbmVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9p
bnZvY2F0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAgICAgIHBh
aXJzID0gW10KLSAgICAgICAgcGFpcnMuYXBwZW5kKCdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrJykKLSAgICAgICAgcGFpcnMuYXBwZW5kKCdzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrJykKLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCi0gICAgICAgICAgICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18lcycgJSBpbl9w
YXJhbV9uYW1lCi0gICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSwgb2JqY19pbl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJh
bV9uYW1lLCBvYmpjX2luX3BhcmFtX25hbWUpCi0gICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5k
KCclczolcycgJSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9u
KSkKLSAgICAgICAgcmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNv
bW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29u
ZmlndXJhdGlvbl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5w
eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGZhZjk3ZmYyMDk5NmYxMjcyMzlmYTZh
NGY2MDExMmZiZWIzMWYxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weQorKysgL2Rldi9udWxs
CkBAIC0xLDg2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQg
KGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwot
aW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJh
dGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9y
dCBHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
LQotCi1jbGFzcyBPYmplY3RpdmVDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAg
ICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0g
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0NvbmZpZ3Vy
YXRpb24uaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICBoZWFkZXJzID0gWwotICAgICAgICAgICAgJyIlcy5oIicg
JSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVy
X2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICcg
KyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAgIH0KLQotICAgICAgICBz
ZWxmLl9jb21tYW5kX2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLSAgICAgICAgc2VsZi5fZXZl
bnRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rp
c3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLQotICAgICAgICBkb21haW5zID0gc2VsZi5k
b21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbnRlcmZhY2VfZm9yX2RvbWFpbnMoZG9tYWlucykpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFk
ZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9jb25maWd1cmF0
aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgUldJUHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QnKQotICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAg
ICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9tYWlu
KGRvbWFpbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3Byb3BlcnRpZXNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgotICAgICAgICBwcm9wZXJ0eV9hcmdzID0gewotICAgICAgICAgICAg
J29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAndmFyaWFibGVOYW1l
UHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRv
bWFpbiksCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRvbWFp
bi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5k
UHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0eV9hcmdzKSkKLSAgICAgICAgaWYg
ZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNDb25maWd1cmF0aW9uRXZlbnRQ
cm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3BlcnR5X2FyZ3MpKQotICAgICAgICByZXR1
cm4gbGluZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1Njg5OTRjNGMyZGVkNzU1MTg3NzliOWNjNmNl
YjA1ZjA3ZTFjYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHly
aWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdo
dCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dn
aW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBn
ZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQotCi0KLWNsYXNzIE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gJyVzQ29uZmlndXJhdGlvbi5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0K
LSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWNvbmRhcnlfaGVhZGVy
cyA9IFsKLSAgICAgICAgICAgICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLAotICAgICAgICAgICAgJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPicsCi0gICAgICAgICAgICAnPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPicsCi0gICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPicsCi0g
ICAgICAgIF0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdwcmltYXJ5
SW5jbHVkZSc6ICciJXNDb25maWd1cmF0aW9uLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgsCi0gICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCi0gICAgICAg
IH0KLQotICAgICAgICBzZWxmLl9jb21tYW5kX2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLSAg
ICAgICAgc2VsZi5fZXZlbnRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLQotICAgICAgICBk
b21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBb
XQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9u
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbnMoZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlucyhzZWxm
LCBkb21haW5zKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bp
bXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24nKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOycpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9n
ZW5lcmF0ZV9pdmFycyhkb21haW5zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcicpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
aWYgKCFzZWxmKScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjb250cm9sbGVyKTsnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7JykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5f
Z2VuZXJhdGVfZGVhbGxvYyhkb21haW5zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAg
ICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBpZiBkb21haW4uY29tbWFu
ZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21haW4oZG9tYWlu
KSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBpZiBkb21h
aW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9y
X2RvbWFpbihkb21haW4pKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
LQotICAgIGRlZiBfZ2VuZXJhdGVfaXZhcnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIGxpbmVz
ID0gW10KLSAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgaWYgZG9t
YWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgotICAgICAgICAg
ICAgICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicgJSAoT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAgIGl2
YXJfbmFtZSA9ICdfJXNIYW5kbGVyJyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVm
aXhfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
aWQ8JXM+ICVzOycgJSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUpKQotICAgICAgICAgICAg
aWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAg
ICAgICAgICAgb2JqY19jbGFzc19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUg
KE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAg
ICAgICAgICBpdmFyX25hbWUgPSAnXyVzRXZlbnREaXNwYXRjaGVyJyAlIE9iakNHZW5lcmF0b3Iu
dmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgJXMgKiVzOycgJSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUp
KQotICAgICAgICByZXR1cm4gbGluZXMKLQotICAgIGRlZiBfZ2VuZXJhdGVfZGVhbGxvYyhzZWxm
LCBkb21haW5zKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0g
KHZvaWQpZGVhbGxvYycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGZvciBk
b21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2Vs
Zi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBbXyVzSGFuZGxlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1l
X3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCi0gICAgICAgICAgICBpZiBkb21haW4uZXZlbnRz
IGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBbXyVzRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOycgJSBPYmpDR2VuZXJhdG9y
LnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSkKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgW3N1cGVyIGRlYWxsb2NdOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScp
Ci0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX3NldHRl
cl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHNldHRlcl9hcmdzID0gewotICAg
ICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAndmFy
aWFibGVOYW1lUHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3Jf
ZG9tYWluKGRvbWFpbiksCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBs
YXRlcy5PYmpDQ29uZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eUltcGxlbWVudGF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqc2V0dGVyX2FyZ3MpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rp
c3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgZ2V0dGVy
X2FyZ3MgPSB7Ci0gICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19Q
UkVGSVgsCi0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAg
ICAgICAgICAgICd2YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25h
bWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSwKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
VGVtcGxhdGUoVGVtcGxhdGVzLk9iakNDb25maWd1cmF0aW9uR2V0dGVySW1wbGVtZW50YXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipnZXR0ZXJfYXJncykKLQotICAgIGRlZiBfdmFyaWFibGVfbmFt
ZV9wcmVmaXhfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBkb21haW5fbmFtZSA9
IGRvbWFpbi5kb21haW5fbmFtZQotICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdE
T00nKToKLSAgICAgICAgICAgIHJldHVybiAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAg
ICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdDU1MnKToKLSAgICAgICAgICAgIHJldHVybiAn
Y3NzJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxv
d2VyKCkgKyBkb21haW5fbmFtZVsxOl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNp
b25faGVscGVycy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2Y3NTIxYWRkMTkxMGM1YWIxNThlMjUyNWVmMWY1ZjEx
MTk0YzE4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3Ry
aW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3Rp
dmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
cgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
VGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKLQotbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKLSAgICBpZiBs
aW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgotICAgICAgICByZXR1cm4KLSAgICBsaW5lcy5hcHBl
bmQoJycpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKEdl
bmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
Ci0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzRW51
bUNvbnZlcnNpb25IZWxwZXJzLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAotCi0gICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5l
cmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVz
QXJyYXlDb252ZXJzaW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAot
ICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaW5jbHVk
ZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJz
XSksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVy
YXRlKCkKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuT2JqQ0NvbnZlcnNpb25IZWxwZXJzUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAq
KmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRl
cy5PYmpDQ29udmVyc2lvbkhlbHBlcnNTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKLSAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVu
Y3Rpb25zLCBkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5PYmpDQ29udmVyc2lvbkhlbHBlcnNQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAg
ZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zKHNlbGYsIGRvbWFpbik6Ci0g
ICAgICAgIGxpbmVzID0gW10KLQotICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVt
cy4KLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoK
LSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNs
YXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1l
bWJlci50eXBlLmlzX2Fub255bW91cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNs
YXJhdGlvbiwgbWVtYmVyKSkKLQotICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgot
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlm
IChpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBl
LmlzX2Fub255bW91cyk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQot
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25h
bWUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKLQotICAg
ICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFp
bi5ldmVudHM6Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQotCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZl
cnNpb25fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgotICAgICAg
ICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255
bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQotICAgICAgICBlbnVtX3ZhbHVlcyA9
IGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKQotICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3Ry
aW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBl
bnVtX3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKHNlbGYsIGRv
bWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gT2Jq
Q0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xh
cmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIGVudW1fdmFsdWVzID0gbWVtYmVyLnR5cGUuZW51bV92
YWx1ZXMoKQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVt
X3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21f
cHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIHJl
dHVybiAnXG5cbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFu
ZF9uYW1lLCBwYXJhbWV0ZXIpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0
b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2
ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IHBh
cmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCkKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhv
YmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92
YWx1ZXMpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2VudW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUs
IGVudW1fdmFsdWVzKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQo
J2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyglcyB2YWx1ZSknICUgb2JqY19lbnVtX25h
bWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IHN3aXRjaCh2YWx1ZSkgeycpCi0gICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVz
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgY2FzZSAlcyVzOicgJSAob2JqY19lbnVt
X25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUp
KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCIlcyIpOycgJSBlbnVtX3ZhbHVlKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
LQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpj
X2VudW1fbmFtZSwgZW51bV92YWx1ZXMpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnaW5saW5lICVz
IGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpJyAlIG9iamNfZW51bV9uYW1lKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3Zh
bHVlczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICh2YWx1ZSA9PSAiJXMiKScg
JSBlbnVtX3ZhbHVlKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiAl
cyVzOycgJSAob2JqY19lbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuICVzJXM7JyAl
IChvYmpjX2VudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZXNbMF0pKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMTNh
ZjJmODEyMzA4MzI4OTg5ZjE0ZmI3OTExNWZiMjlkN2VmOGEyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQg
T2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAot
ZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVt
cGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIE9i
amVjdGl2ZUNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0
b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAg
ICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0g
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0V2ZW50RGlz
cGF0Y2hlcnMubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRv
ci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9k
ZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAg
ICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC5oPicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPicsCi0gICAgICAgIF0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAg
ICdwcmltYXJ5SW5jbHVkZSc6ICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2lt
cG9ydCAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAotICAg
ICAgICB9Ci0KLSAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0g
ICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
Lk9iakNJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2Vj
dGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21haW4uZXZlbnRzOgotICAgICAg
ICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBvYmpjX25hbWUg
PSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRh
dGlvbiAlcycgJSBvYmpjX25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghc2VsZiknKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBBU1NFUlQoY29udHJvbGxlcik7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHJldHVybiBzZWxmOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnQoZG9tYWluLCBldmVudCkp
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGVu
ZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2V2ZW50KHNlbGYsIGRvbWFpbiwgZXZlbnQpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9zaWduYXR1cmUoZG9tYWluLCBldmVu
dCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsID0gX2NvbnRyb2xsZXIt
PmZyb250ZW5kQ2hhbm5lbCgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZnJv
bnRlbmRDaGFubmVsKScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiVzLiVzIikpOycgJSAoZG9tYWlu
LmRvbWFpbl9uYW1lLCBldmVudC5ldmVudF9uYW1lKSkKLSAgICAgICAgaWYgZXZlbnQuZXZlbnRf
cGFyYW1ldGVyczoKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVu
dF9vdXRfcGFyYW1ldGVycyhkb21haW4sIGV2ZW50KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgZnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9zaWduYXR1cmUo
c2VsZiwgZG9tYWluLCBldmVudCk6Ci0gICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgcmV0dXJuICctICh2b2lkKSVzJyAlIGV2ZW50LmV2ZW50X25hbWUK
LSAgICAgICAgcGFpcnMgPSBbXQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50
X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCi0gICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFt
ZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQuZXZlbnRf
bmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJz
dChwYWlyc1swXSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzJyAlIChldmVudC5l
dmVudF9uYW1lLCAnICcuam9pbihwYWlycykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X291
dF9wYXJhbWV0ZXJzKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgotICAgICAgICBsaW5lcyA9IFtdCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhv
ZCA9IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQot
ICAgICAgICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAg
ICAgIHNhZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGVsc2UgdmFyX25hbWUKLSAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gT2Jq
Q0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShw
YXJhbWV0ZXIudHlwZSwgc2FmZV92YXJfbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1z
T2JqZWN0LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2Qs
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBwYXJhbXNPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5
ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lv
bikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQotICAgICAgICByZXR1cm4gbGlu
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRl
ci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGJjZTU1ZjhmOTNjNGEyZTVjMDAz
YTBlNTcwNGQ4OWE3MzFlMzc2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3Ry
aW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3Rp
dmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCi1mcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9y
dCBPYmplY3RUeXBlLCBFbnVtVHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKLQotCi1kZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1st
MV0gPT0gJyc6Ci0gICAgICAgIHJldHVybgotICAgIGxpbmVzLmFwcGVuZCgnJykKLQotCi1jbGFz
cyBPYmplY3RpdmVDSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WAotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVycyA9IHNl
dChbCi0gICAgICAgICAgICAnPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4n
LAotICAgICAgICBdKQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2lu
Y2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29y
dGVkKGhlYWRlcnMpXSksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgdHlwZV9kb21haW5zID0gZmlsdGVyKE9iakNHZW5l
cmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwg
ZG9tYWlucykKLSAgICAgICAgY29tbWFuZF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwo
KSksIGRvbWFpbnMpCi0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRv
ci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9k
ZWwoKSksIGRvbWFpbnMpCi0KLSAgICAgICAgIyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzEzODIyMj4gV2ViIEluc3BlY3RvcjogUmVkdWNlIHVubmVjZXNzYXJ5IGVudW1zL3R5cGVzIGdl
bmVyYXRlZCBpbiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMKLSAgICAgICAgIyBDdXJyZW50bHkg
d2UgZ2VuZXJhdGUgZW51bXMvdHlwZXMgZm9yIGFsbCB0eXBlcyBpbiB0aGUgdHlwZV9kb21haW5z
LiBGb3IgdGhlIGJ1aWx0LWluCi0gICAgICAgICMgSlNDIGRvbWFpbnMgKERlYnVnZ2VyLCBSdW50
aW1lKSB0aGlzIHByb2R1Y2VzIGV4dHJhIHVudXNlZCB0eXBlcy4gV2Ugb25seSBuZWVkIHRvCi0g
ICAgICAgICMgZ2VuZXJhdGUgdGhlc2UgdHlwZXMgaWYgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0
aGUgY29tbWFuZF9kb21haW5zIG9yIGV2ZW50X2RvbWFpbnMuCi0KLSAgICAgICAgc2VjdGlvbnMg
PSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0hlYWRlclByZWx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2Rl
Y2xhcmF0aW9ucywgdHlwZV9kb21haW5zKSkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xu
Jy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bXMsIHR5cGVfZG9tYWlu
cykpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFw
KHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2NvbW1h
bmRfcHJvdG9jb2xzLCBjb21tYW5kX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2ludGVy
ZmFjZXMsIGV2ZW50X2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuT2JqQ0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUpKQotICAgICAg
ICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb25zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAgICAgICAg
ICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAg
ICAgICAgICAgICBvYmpjX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShk
ZWNsYXJhdGlvbi50eXBlKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVz
OycgJSBvYmpjX25hbWUpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBk
ZWYgX2dlbmVyYXRlX2VudW1zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLQot
ICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJl
ci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIo
ZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKLQotICAgICAgICAjIEFub255bW91cyBjb21t
YW5kIGVudW1zLgotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFy
YW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGlu
ZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwgcGFyYW1ldGVyKSkKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCi0KLSAgICAgICAgIyBBbm9ueW1v
dXMgZXZlbnQgZW51bXMuCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgotICAg
ICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFy
YW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGlu
ZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBw
YXJhbWV0ZXIpKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYg
X2dlbmVyYXRlX3R5cGVzKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgIyBUeXBlIGludGVyZmFjZXMuCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQot
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFj
ZShkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
LQotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKHNlbGYs
IGRvbWFpbiwgZGVjbGFyYXRpb24pOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5l
cmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xh
cmF0aW9uKQotICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFt
ZSwgZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVlcygpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJl
cik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAg
IHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1lLCBtZW1iZXIudHlwZS5l
bnVtX3ZhbHVlcygpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFy
YW1ldGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgot
ICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9y
X2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwg
cGFyYW1ldGVyKQotICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1f
bmFtZSwgcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVf
ZW51bShzZWxmLCBlbnVtX25hbWUsIGVudW1fdmFsdWVzKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsICVzKSB7JyAl
IGVudW1fbmFtZSkKLSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyVzLCcgJSAoZW51bV9uYW1lLCBHZW5lcmF0b3Iu
c3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnfTsnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVm
IF9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZShzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKLSAg
ICAgICAgbGluZXMgPSBbXQotICAgICAgICBvYmpjX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
bmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bp
bnRlcmZhY2UgJXMgOiAlcycgJSAob2JqY19uYW1lLCBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9P
QkpFQ1RfQkFTRSkpCi0gICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1l
bWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQot
ICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5p
c19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBpZiByZXF1aXJl
ZF9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRf
bWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVk
X21lbWJlcnMpKQotICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJy8qIHJlcXVpcmVkICovICcgKyBzZWxmLl9nZW5lcmF0ZV9t
ZW1iZXJfcHJvcGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCi0gICAgICAgIGZvciBtZW1iZXIg
aW4gb3B0aW9uYWxfbWVtYmVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogb3B0aW9u
YWwgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShkZWNsYXJhdGlvbiwgbWVt
YmVyKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVk
X21lbWJlcnMoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycyk6Ci0g
ICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJz
OgotICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21l
bWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2Vu
ZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkK
LSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlICh2YXJfbmFtZSwgb2JqY190
eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1swXSkKLSAg
ICAgICAgcmV0dXJuICctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGglczsnICUgJyAnLmpvaW4ocGFp
cnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShzZWxmLCBkZWNsYXJhdGlv
biwgbWVtYmVyKToKLSAgICAgICAgYWNjZXNzb3JfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY19h
Y2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXIobWVtYmVyKQotICAgICAgICBvYmpjX3R5cGUgPSBPYmpD
R2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAg
ICAgIHJldHVybiAnQHByb3BlcnR5IChub25hdG9taWMsICVzKSAlczsnICUgKGFjY2Vzc29yX3R5
cGUsIGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIE9iakNHZW5lcmF0b3IuaWRlbnRpZmll
cl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKSkpCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xzKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgb2JqY19uYW1lID0g
JyVzJXNEb21haW5IYW5kbGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4u
ZG9tYWluX25hbWUpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bwcm90b2NvbCAlcyA8TlNP
YmplY3Q+JyAlIG9iamNfbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQHJlcXVpcmVk
JykKLSAgICAgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9j
b2woZG9tYWluLCBjb21tYW5kKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0g
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3Npbmds
ZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAgICAgIHBhaXJz
ID0gW10KLSAgICAgICAgcGFpcnMuYXBwZW5kKCdFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjaycpCi0gICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vz
c0NhbGxiYWNrOiglcylzdWNjZXNzQ2FsbGJhY2snICUgc2VsZi5fY2FsbGJhY2tfYmxvY2tfZm9y
X2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSkKLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21t
YW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChw
YXJhbV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21t
YW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHJldHVy
biAnLSAodm9pZCklc1dpdGglczsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihw
YWlycykpCi0KLSAgICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFp
biwgY29tbWFuZCk6Ci0gICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKGpv
aW5fdHlwZV9hbmRfbmFtZShPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWlu
LCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKLSAgICAgICAgcmV0dXJuICd2b2lkKF4pKCVzKScgJSAnLCAnLmpvaW4ocGFpcnMpCi0K
LSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMoc2VsZiwgZG9tYWluKToKLSAgICAg
ICAgbGluZXMgPSBbXQotICAgICAgICBpZiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgb2Jq
Y19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
QGludGVyZmFjZSAlcyA6IE5TT2JqZWN0JyAlIG9iamNfbmFtZSkKLSAgICAgICAgICAgIGZvciBl
dmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFpbiwgZXZlbnQpKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKLQotICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShzZWxmLCBkb21h
aW4sIGV2ZW50KToKLSAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAg
ICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXM7JyAlIGV2ZW50LmV2ZW50X25hbWUKLSAgICAgICAg
cGFpcnMgPSBbXQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0g
ICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgT2JqQ0dl
bmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFy
YW1ldGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1sw
XSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAoZXZlbnQuZXZlbnRfbmFt
ZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCBiYWRjOGMyYjY2NWFiNDY4OWJjYjVkNGRiZTkwNTZjYzI1MDY3NjdkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9j
X2ludGVybmFsX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLSMhL3Vz
ci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9i
akNHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZy
b20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBs
YXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBPYmpl
Y3RpdmVDVHlwZXNJbnRlcm5hbEhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3Iu
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0ludGVybmFsLmgnICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAg
ICAgaGVhZGVycyA9IHNldChbCi0gICAgICAgICAgICAnIiVzLmgiJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgsCi0gICAgICAgICAgICAnIlJXSVByb3RvY29sSlNPTk9iamVjdEludGVybmFs
LmgiJywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywK
LSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+JywKLSAgICAgICAgXSkKLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAg
ICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVy
IGluIHNvcnRlZChoZWFkZXJzKV0pLAotICAgICAgICB9Ci0KLSAgICAgICAgZG9tYWlucyA9IHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIo
T2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmls
dGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCi0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNw
YXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hlYWRlclBvc3RsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4n
LmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJp
dmF0ZV9pbnRlcmZhY2VzKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgaWYgZG9tYWluLmV2ZW50czoKLSAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWlu
RXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9t
YWluX25hbWUpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgKFByaXZh
dGUpJyAlIG9iamNfbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcp
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVf
Y190eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjNmQ1MDExYWEzODMxMWJmZTE0
YzgyMmFmMzY2Mjg3N2QzOGY2OGZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyAvZGV2
L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0j
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9n
Z2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20g
Z2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotZGVmIGFk
ZF9uZXdsaW5lKGxpbmVzKToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgotICAg
ICAgICByZXR1cm4KLSAgICBsaW5lcy5hcHBlbmQoJycpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ1R5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmls
dGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQot
Ci0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hlYWRl
cnMgPSBbCi0gICAgICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKLSAgICAg
ICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVy
X2FyZ3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzSW50ZXJuYWwuaCIn
ICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICdzZWNvbmRhcnlJbmNs
dWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vj
b25kYXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNl
bGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4n
LmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMo
c2VsZiwgZG9tYWluKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgZGVjbGFyYXRp
b24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgotICAgICAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdlbmVyYXRl
X3R5cGVfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlv
bihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlcycgJSBPYmpDR2VuZXJhdG9yLm9iamNf
bmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKSkKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVy
cyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlv
biwgcmVxdWlyZWRfbWVtYmVycykpCi0gICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVj
bGFyYXRpb24sIG1lbWJlcikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZ2V0dGVyX2Zvcl9tZW1iZXIoZG9tYWlu
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhzZWxm
LCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKLSAgICAgICAgcGFpcnMg
PSBbXQotICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAg
ICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0
aW9uLCBtZW1iZXIpCi0gICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRp
Zmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQotICAgICAgICAgICAg
cGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHZhcl9uYW1lLCBvYmpjX3R5cGUsIHZhcl9uYW1l
KSkKLSAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQotICAgICAgICAjIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3Rv
Y29sIEludGVyZmFjZXMgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMK
LSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aCVzOycgJSAnICcuam9pbihwYWlycykpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
eycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICByZXR1cm4gbmlsOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAg
ICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgdmFyX25hbWUg
PSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1i
ZXJfbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYuJXMgPSAlczsnICUg
KHZhcl9uYW1lLCB2YXJfbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
c2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAg
ICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNs
YXJhdGlvbiwgbWVtYmVyKQotICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRp
Zmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQotICAgICAgICBzZXR0
ZXJfbWV0aG9kID0gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcihk
ZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpD
R2VuZXJhdG9yLm9iamNfdG9fcHJvdG9jb2xfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0
aW9uLCBtZW1iZXIsIHZhcl9uYW1lKQotICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTM4MjIxPiBXZWIgSW5zcGVjdG9yOiBPYmpDIFByb3RvY29sIEludGVyZmFjZXMgc2hv
dWxkIHRocm93IGV4Y2VwdGlvbnMgZm9yIG5pbCBhcmd1bWVudHMKLSAgICAgICAgbGluZXMgPSBb
XQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0
KHZhcl9uYW1lKSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
eycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJd
OycgJSAoc2V0dGVyX21ldGhvZCwgY29udmVyc2lvbl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVy
X25hbWUpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBk
b21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAg
IHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllciht
ZW1iZXIubWVtYmVyX25hbWUpCi0gICAgICAgIGdldHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9y
Lm9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAg
ICAgIGJhc2ljX2V4cHJlc3Npb24gPSAnW3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhv
ZCwgbWVtYmVyLm1lbWJlcl9uYW1lKQotICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBP
YmpDR2VuZXJhdG9yLnByb3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xh
cmF0aW9uLCBtZW1iZXIsIGJhc2ljX2V4cHJlc3Npb24pCi0gICAgICAgIGxpbmVzID0gW10KLSAg
ICAgICAgbGluZXMuYXBwZW5kKCctICglcyklcycgJSAob2JqY190eXBlLCB2YXJfbmFtZSkpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVy
biAlczsnICUgY29udmVyc2lvbl9leHByZXNzaW9uKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30n
KQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCA0N2I0MzgyM2IzMTYxMjI1MDFmMzBlZmRhMDZmMzdkYjgxOGZmZjBi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29s
X3R5cGVzX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwot
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmpl
Y3RUeXBlLCBQcmltaXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBGcmFtZXdvcmtz
Ci0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIFByb3RvY29s
VHlwZXNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCi0KLSAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkKLSAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBl
X2Fzc2VydGlvbnMoZG9tYWlucykKLQotICAgICAgICBoZWFkZXJzID0gc2V0KFsKLSAgICAgICAg
ICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4nLAotICAgICAgICAgICAg
Jzx3dGYvQXNzZXJ0aW9ucy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+Jwot
ICAgICAgICBdKQotCi0gICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKLQotICAgICAgICBoZWFkZXJfYXJncyA9
IHsKLSAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBz
ZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9p
bihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwK
LSAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
X3R5cGUgPSAnU3RyaW5nJwotICAgICAgICByZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyA9
IFtyZXR1cm5fdHlwZV0KLSAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgcmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm9bOjBdID0gW2V4cG9ydF9tYWNy
b10KLQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5DcHBIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBQcm90b2NvbCB7JykKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKGRv
bWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnMo
ZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnJXMgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOycgJSAnICcuam9pbihyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybykp
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oWwotICAgICAgICAgICAgJ3RlbXBs
YXRlPHR5cGVuYW1lIFQ+ICVzIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKScgJSBy
ZXR1cm5fdHlwZSwKLSAgICAgICAgICAgICd7JywKLSAgICAgICAgICAgICcgICAgcmV0dXJuIGdl
dEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7JywKLSAgICAg
ICAgICAgICd9J10pKQotCi0gICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2Vu
ZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0
ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0
aW9ucykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2Rl
Y2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMg
UHJpdmF0ZSBtZXRob2RzLgotCi0gICAgIyBGSVhNRTogbW92ZSBidWlsZGVycyBvdXQgb2YgY2xh
c3NlcywgdW5jb21tZW50IGZvcndhcmQgZGVjbGFyYXRpb24KLQotICAgIGRlZiBfZ2VuZXJhdGVf
Zm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIHNlY3Rpb25zID0g
W10KLQotICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBkZWNsYXJh
dGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zXQotICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNp
bnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAg
ICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCi0gICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5
cGVzKSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0K
LSAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCi0gICAgICAgICAgICBkb21haW5fbGluZXMu
YXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCi0KLSAgICAgICAg
ICAgIG9iamVjdF90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9yIF90eXBlIGluIG9i
amVjdF90eXBlc10KLSAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFt
ZSgpIGZvciBfdHlwZSBpbiBlbnVtX3R5cGVzXQotCi0gICAgICAgICAgICAjIEZvcndhcmQtZGVj
bGFyZSBhbGwgY2xhc3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFy
cmFuZ2VkLgotICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5h
bWUgZm9yIG5hbWUgaW4gc29ydGVkKG9iamVjdF90eXBlX25hbWVzKSkKLSAgICAgICAgICAgIGRv
bWFpbl9saW5lcy5leHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29y
dGVkKGVudW1fdHlwZV9uYW1lcykpCi0gICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9
IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFp
bl9saW5lcykpKQotCi0gICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKLSAgICAgICAgICAg
IHJldHVybiAnJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICIiIi8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgotJXMKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSIi
IiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhz
ZWxmLCBkb21haW5zKToKLSAgICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlw
ZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFt
YmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25zKQotCi0gICAgICAgIGlmIGxlbihzZWN0
aW9ucykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgcmV0dXJuICIiIi8vIFR5cGVkZWZzLgotJXMKLS8vIEVuZCBvZiB0eXBlZGVmcy4iIiIg
JSAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0g
ZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQWxpYXNlZFR5cGUpLCBk
b21haW4udHlwZV9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFy
YXRpb25zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgc2VjdGlvbnMg
PSBbXQotICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gcHJpbWl0aXZlX2RlY2xhcmF0aW9uczoK
LSAgICAgICAgICAgIHByaW1pdGl2ZV9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShkZWNsYXJhdGlvbi50eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgICAgIHR5
cGVkZWZfbGluZXMgPSBbXQotICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0
aW9uKSA+IDA6Ci0gICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICov
JyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQotICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5h
cHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlw
ZV9uYW1lKSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9s
aW5lcykpCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVz
cGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdc
blxuJy5qb2luKHNlY3Rpb25zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRv
bWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9i
dWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHNlY3Rpb25zID0gW10K
LQotICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlv
bnM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgRW51
bVR5cGUpOgotICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9z
dHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0gICAgICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29i
amVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pKQotCi0gICAgICAgIHNl
Y3Rpb25zID0gZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9u
cykKLSAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICcn
Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAl
cyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9p
bihzZWN0aW9ucykpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9t
YWluX25hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9y
X29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgotICAg
ICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6Ci0gICAgICAg
ICAgICByZXR1cm4gJycKLQotICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1l
bWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5p
c19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICByZXF1
aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9u
YWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJh
dGlvbi50eXBlX25hbWUKLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGxlbih0eXBl
X2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
Jy8qICVzICovJyAlIHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCi0gICAgICAgIGJhc2Vf
Y2xhc3MgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCi0gICAgICAgIGlmIG5vdCBHZW5l
cmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKLSAgICAg
ICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3Mp
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQotICAgICAgICBmb3IgZW51bV9tZW1i
ZXIgaW4gZW51bV9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVu
dW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51
bV9tZW1iZXIpKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9z
dGF0ZV9lbnVtKHR5cGVfZGVjbGFyYXRpb24pKQotCi0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1w
bGUgPSBbXQotICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0
cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpJyAlIChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUp
KQotICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBj
b25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2Zp
cnN0KG1lbWJlci5tZW1iZXJfbmFtZSkpCi0KLSAgICAgICAgYnVpbGRlcl9hcmdzID0gewotICAg
ICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKLSAgICAgICAgICAgICdjb25zdHJ1
Y3RvckV4YW1wbGUnOiAnXG4nLmpvaW4oY29uc3RydWN0b3JfZXhhbXBsZSkgKyAnOycsCi0gICAg
ICAgIH0KLQotICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLlByb3RvY29s
T2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxk
ZXJfYXJncykpCi0gICAgICAgIGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zv
cl9tZW1iZXIodHlwZV9tZW1iZXIsIGRvbWFpbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZChUZW1w
bGF0ZShUZW1wbGF0ZXMuUHJvdG9jb2xPYmplY3RCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCi0gICAgICAgIGZvciBtZW1iZXIgaW4g
b3B0aW9uYWxfbWVtYmVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIobWVtYmVyLCBkb21haW4pKQotCi0gICAgICAg
IGlmIEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUp
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKLSAg
ICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
czoKLSAgICAgICAgICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1Y2Zp
cnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCd9
OycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNl
bGYsIGVudW1fZGVjbGFyYXRpb24pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKLSAgICAg
ICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1f
ZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5cGUpKQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fu
b255bW91c19lbnVtX21lbWJlcihzZWxmLCBlbnVtX21lbWJlcik6Ci0gICAgICAgIGRlZiBhcHBs
eV9pbmRlbnRhdGlvbihsaW5lKToKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMn
LCAnLyonLCAnKi8nLCAnLy8nKSkgb3IgbGVuKGxpbmUpIGlzIDA6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGxpbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcg
ICAgJyArIGxpbmUKLQotICAgICAgICBpbmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRh
dGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVt
YmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGlu
ZGVudGVkX2xpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShz
ZWxmLCBlbnVtX25hbWUsIGVudW1fdHlwZSk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
ZW51bV9uYW1lID0gdWNmaXJzdChlbnVtX25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnZW51
bSBjbGFzcyAlcyB7JyAlIGVudW1fbmFtZSkKLSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51
bV90eXBlLmVudW1fdmFsdWVzKCk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9
ICVzLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJ307IC8vIGVudW0gY2xhc3MgJXMnICUgZW51bV9uYW1lKQotICAgICAgICBy
ZXR1cm4gbGluZXMgICMgVGhlIGNhbGxlciBtYXkgd2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24s
IHNvIGRvbid0IGpvaW4gdGhlc2UgbGluZXMuCi0KLSAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bShzZWxmLCB0eXBlX2RlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1i
ZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBl
bnVtX3ZhbHVlcyA9IFtdCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIE5vRmllbGRzU2V0ID0gMCwnKQotICAgICAgICBm
b3IgaSBpbiByYW5nZShsZW4ocmVxdWlyZWRfbWVtYmVycykpOgotICAgICAgICAgICAgZW51bV92
YWx1ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0KHJlcXVpcmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUp
Ci0gICAgICAgICAgICBlbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9IDEgPDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkK
LSAgICAgICAgaWYgbGVuKGVudW1fdmFsdWVzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgQWxsRmllbGRzU2V0ID0gKCVzKScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVz
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxG
aWVsZHNTZXQgPSAwJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBk
ZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIs
IGRvbWFpbik6Ci0gICAgICAgIHNldHRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2NhbWVsTmFt
ZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAotICAgICAgICAgICAgJ2tleWVk
U2V0JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlw
ZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAg
ICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyKQotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgJShjYW1lbE5hbWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJU
eXBlKXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgeycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG5hbWUpc19hbHJlYWR5X3Nl
dCk7JyAlIHNldHRlcl9hcmdzKQotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIu
dHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBt
X3Jlc3VsdC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkp
KTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5h
bWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVy
X2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9m
b3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgotICAgICAgICBzZXR0ZXJfYXJn
cyA9IHsKLSAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lKSwKLSAgICAgICAgICAgICdrZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0
aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUnOiB0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJh
dG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKLSAgICAgICAgfQot
Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMg
dmFsdWUpJyAlIHNldHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKLSAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNl
dClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFs
dWUpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRf
ZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKLSAgICAgICAgIyBBIGxpc3Qg
b2YgKGJ1aWxkZXJfdHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQotICAgICAgICB0eXBlX2FyZ3Vt
ZW50cyA9IFtdCi0KLSAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKToKLSAgICAgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1i
ZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zKQotCi0gICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlv
biBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6Ci0gICAgICAgICAgICAgICAgZm9yIHR5cGVf
bWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgotICAgICAgICAgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnByb3RvY29s
X3R5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlv
biksIEZhbHNlKSkKLQotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJh
dGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVu
dHMuYXBwZW5kKChHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUodHlwZV9k
ZWNsYXJhdGlvbi50eXBlKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBl
X2RlY2xhcmF0aW9uLnR5cGUpKSkKLQotICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBbJ3N0cnVj
dCddCi0gICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9pZCddCi0gICAgICAg
IGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21h
Y3JvJywgTm9uZSkKLSAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgc3RydWN0X2tleXdvcmRzLmFwcGVuZChleHBvcnRfbWFjcm8pCi0gICAgICAgICAgICAj
ZnVuY3Rpb25fa2V5d29yZHNbMToxXSA9IFtleHBvcnRfbWFjcm9dCi0KLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAn
LmpvaW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQotICAgICAgICAgICAgaWYgYXJn
dW1lbnRbMV06Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0
cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2
YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFT
U0VSVF9ESVNBQkxFRCcpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4o
ZnVuY3Rpb25fa2V5d29yZHMpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8g
IUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKLSAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ4M2JhMTI0Yjg0OGZhOGZiYmYzY2YxMmI1Y2VmNzQy
N2E4ZDZlZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODAg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3Ry
aW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0
IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5l
cmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5
cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1
cm4gIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAiCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkK
LSAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMo
ZG9tYWlucykKLQotICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJp
bmcuaD4nXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJ
bmNsdWRlJzogJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAotICAgICAgICAgICAgJ3Nl
Y29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBo
ZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rp
b25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVu
dGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgUHJvdG9jb2wgeycpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKLSAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKLSAgICAgICAgYnVpbGRl
cl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21h
aW5zKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4o
c2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKLQotICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMp
Ci0KLSAgICAjIFByaXZhdGUgbWV0aG9kcy4KLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBw
aW5nKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKLSAgICAg
ICAgbGluZXMuZXh0ZW5kKFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUg
aW4gc2VsZi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpXSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9
OycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCdTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyhzZWxmKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAg
ICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0
b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zKToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9u
YW1lKToKLSAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3Bl
Y3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKLSAg
ICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAl
IChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCi0KLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIGRlY2xhcmF0
aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3No
YXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQotCi0g
ICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToK
LSAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVt
YmVyczoKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVu
dW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCi0K
LSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RU
eXBlKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNz
ZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0gICAgICAg
ICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xh
cmF0aW9uLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJh
dGlvbikpCi0KLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVm
IF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmpl
Y3RfZGVjbGFyYXRpb24pOgotICAgICAgICBhcmdzID0gewotICAgICAgICAgICAgJ29iamVjdFR5
cGUnOiBHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGUpCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRl
cy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKLQot
ICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwg
b2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihs
YW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKLSAgICAgICAgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVf
aGFzX29wZW5fZmllbGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQotICAgICAgICBsaW5lcyA9
IFtdCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChHZW5lcmF0
b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUp
KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCIiInsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIp
Ci0gICAgICAgIGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAg
ICAgYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1l
bWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNz
ZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJh
dGlvbikKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7
Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBv
YmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIlKG1lbWJlck5hbWUpcyIpKTsKLSAgICAgICAgQVNT
RVJUKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICAlKGFzc2Vy
dE1ldGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfSIiIiAlIGFy
Z3MpCi0KLSAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQ
cm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQotCi0gICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgotICAgICAgICAgICAgYXJncyA9
IHsKLSAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
LAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7Ci0gICAgICAg
IEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZp
bmQoQVNDSUlMaXRlcmFsKCIlKG1lbWJlck5hbWUpcyIpKTsKLSAgICAgICAgaWYgKCUobWVtYmVy
TmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9k
KXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQotCi0gICAgICAg
ICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7JykKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotCi0gICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6
ZSgpKScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgRkFUQUwoIlVuZXhwZWN0
ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShz
ZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBb
XQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScg
JSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIs
IG9iamVjdF9kZWNsYXJhdGlvbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIFN0cmluZyByZXN1bHQ7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCi0KLSAgICAg
ICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyInICUgZW51
bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCld
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0
aW9uKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CmluZGV4IGI5YzQzOGZmN2FhOTA4ZGU5ZjNmYzI0
ODRjZDFkMTQ2MTJkNTAwNDcuLjQwOGQzN2NmMmFlZDFkNTVmYzhjNDA5Mjk5ZDVhMTQyMDQ4ODIx
OWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTM4LDE1ICszOCw2IEBAIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogZGVmIHVjZmlyc3Qoc3RyKToKICAgICByZXR1cm4g
c3RyWzoxXS51cHBlcigpICsgc3RyWzE6XQogCi1fUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9
IHsKLSAgICAnYm9vbGVhbic6ICdib29sJywKLSAgICAnaW50ZWdlcic6ICdpbnQnLAotICAgICdu
dW1iZXInOiAnZG91YmxlJywKLSAgICAnc3RyaW5nJzogJ1N0cmluZycsCi0gICAgJ29iamVjdCc6
ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcsCi0gICAgJ2FueSc6ICdJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlJwotfQotCiBfQUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJ
TkdTID0gc2V0KFsnQVBJJywgJ0NTUycsICdET00nLCAnSFRNTCcsICdYSFInLCAnWE1MJ10pCiAK
ICMgVGhlc2Ugb2JqZWN0cyBhcmUgYnVpbHQgbWFudWFsbHkgYnkgY3JlYXRpbmcgYW5kIHNldHRp
bmcgSW5zcGVjdG9yVmFsdWVzLgpAQCAtMjI4LDI0OSArMjE5LDYgQEAgY2xhc3MgR2VuZXJhdG9y
OgogICAgICAgICByZXR1cm4gcmUuc3ViKHJlLmNvbXBpbGUocmVnZXgsIHJlLklHTk9SRUNBU0Up
LCByZXBsYWNlQ2FsbGJhY2ssICIiLmpvaW4oc3Vid29yZHMpKQogCiAgICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBrZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ2dldE9i
amVjdCcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAg
ICAgIHJldHVybiAnZ2V0QXJyYXknCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBf
dHlwZS5yYXdfbmFtZSgpIGlzICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0
RG91YmxlJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhbnknOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkK
LSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0
dXJuIEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90
eXBlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBrZXllZF9zZXRfbWV0aG9kX2Zvcl90
eXBlKF90eXBlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0g
ICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnc2V0QXJyYXknCi0gICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUu
cmF3X25hbWUoKSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRl
Z2VyJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdudW1iZXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5y
YXdfbmFtZSgpIGlzICdhbnknOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3Qo
X3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90
eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zv
cl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQotCi0gICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJl
c2VudGF0aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgcHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6
Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JwotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBl
KSk6Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAo
X3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAn
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8JXM+JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBl
X3N0cmluZ19mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5j
cHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIHByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
b2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAg
ICAgICAgcmV0dXJuICc6Oicuam9pbihbR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zv
cl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSldKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5w
cm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQotCi0gICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9w
YXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlw
ZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRp
dmUuCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0
aXZlLgotCi0gICAgICAgIHNpZ2lsID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNl
ICcmJwotICAgICAgICAjIFRoaXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3
aXRoIGRlZmluZWQgcHJvcGVydGllcy4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2Jq
ZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKLSAgICAgICAg
ICAgIHJldHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicgKyBz
aWdpbAotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAg
ICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4nICsgc2ln
aWwKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAg
ICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3Qg
JXMmJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVy
biBjcHBfbmFtZQotCi0gICAgICAgIHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2lu
X3BhcmFtZXRlcl90eXBlIgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmlu
Z19mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAg
IHJldHVybiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRl
ci50eXBlLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkK
LQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVy
KG1lbWJlcik6Ci0gICAgICAgIHJldHVybiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVf
d2l0aF9uYW1lKG1lbWJlci50eXBlLCBtZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUoX3R5
cGUsIHR5cGVfbmFtZSwgaXNfb3B0aW9uYWwpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQ
dHI8JXM+JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkK
LSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAg
YnVpbGRlcl90eXBlID0gR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90
eXBlKQotICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdjb25zdCAlcyogY29uc3QnICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbGlmIF90eXBl
LmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVf
dHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRf
dHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICdjb25zdCAlcyYnICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHJldHVybiBidWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicKLSAgICAgICAgICAgIGVsaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueSddOgotICAgICAgICAgICAgICAgIHJldHVybiAn
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPicKLSAgICAgICAgICAgIGVsaWYg
aXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUg
Y3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0
cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5
cGVfbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgICAgICAgICBpZiBpc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBlbnVtX3R5cGVfbmFtZQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9u
YW1lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
Ci0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPCVzPiYnICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5n
X2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwl
cz4qIiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVy
biAnJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcyonICUgKF90eXBl
LnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0
b3I6OlByb3RvY29sOjolczo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24g
Zm9ybWFsIG91dCBwYXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5
IHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVu
aWZpZWQuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfZm9ybWFs
X2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90
eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4g
J1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlw
ZShfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0g
ICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+KiIgJSBj
cHBfbmFtZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50
ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29u
c3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFs
IGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCi0KLSAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNl
IGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKLSAgICAjICJvcGVu
IHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2Jq
ZWN0cy4KLQotICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBv
cGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIo
cGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBl
LmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlw
ZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4iCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAg
ICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKLSAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFt
ZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAg
ICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgotICAg
ICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIgJSBHZW5lcmF0b3IuY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJp
bmcnLCAnaW50ZWdlciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
dHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAg
X3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJy
YXlUeXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUg
R2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5
cGUgPSBHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCi0gICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+IiAlIGJ1aWxkZXJfdHlwZQotICAg
ICAgICAgICAgcmV0dXJuICclcycgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRv
ci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMn
ICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pOgotCi0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKF90eXBl
KToKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlJyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShf
dHlwZSkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRU
eXBlKToKLSAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVf
bWVtYmVyLnR5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVt
YmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0g
ICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZScgJSBHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVy
KHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCi0KLSAgICAgICAgcmV0dXJuIGFzc2Vy
dGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKToKLSAgICAgICAg
cmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQot
Ci0gICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBqc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZShf
dHlwZSk6CiAgICAgICAgIF90eXBlID0gX3R5cGUKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgpAQCAtNDg3LDEyICsyMzUsMyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInCiAgICAgICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgICAgIHJldHVybiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpCi0KLSAgICAjIERlY2lkZSB3
aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVjZXNzYXJ5IGluIGEgc2l0dWF0aW9uLgotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlw
ZShfdHlwZSk6Ci0gICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlw
ZSwgT2JqZWN0VHlwZSkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9wYXNz
X2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFu
Y2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwg
KFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAib2JqZWN0IikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cm9sZCBtb2RlIDEwMDc1
NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggZmU4ZWQ1OWViNzZhNWZhNzQ4ODVkYTczNDFkZDU4NmI3
ZWJkMzdhZS4uZjJlMzMwYTcyODkyNjg5NmI2YTJmOGUxNjI0OGRmZmEzODFmODhiOAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTU5LDM3NCArNTksMyBAQCBjbGFz
cyBHZW5lcmF0b3JUZW1wbGF0ZXM6CiAKIC8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9CiAvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IiIiKQotCi0gICAgQ3BwSGVhZGVyUHJlbHVk
ZSA9ICgKLSAgICAiIiIjaWZuZGVmICR7aGVhZGVyR3VhcmRTdHJpbmd9Ci0jZGVmaW5lICR7aGVh
ZGVyR3VhcmRTdHJpbmd9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0ke2luY2x1ZGVzfQot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotJHt0eXBlZGVmc30iIiIpCi0KLSAgICBDcHBIZWFk
ZXJQb3N0bHVkZSA9ICgKLSAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1YXJk
U3RyaW5nfSkiIiIpCi0KLSAgICBDcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCi0gICAgIiIi
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgJHtwcmltYXJ5SW5jbHVkZX0KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0KLSR7c2Vjb25kYXJ5SW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgeyIiIikKLQotICAgIENwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCi0gICAgIiIi
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQot
IiIiKQotCi0gICAgQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlID0gKAotICAgICIi
IiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KLSNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0cmlu
Z30KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0ke2lu
Y2x1ZGVzfQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLSIiIikKLQotICAgIEFsdGVy
bmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikKLQot
ICAgIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFj
ZURlY2xhcmF0aW9uID0gKAotICAgICIiImNsYXNzIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9
Ci19OyIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xh
cmF0aW9uID0gKAotICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0ke2NvbW1hbmREZWNs
YXJhdGlvbnN9Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsiIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKLSAgICAiIiIke2NsYXNz
QW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpIG92ZXJyaWRlOwotJHtjb21tYW5kRGVjbGFyYXRpb25zfQotcHJpdmF0ZToKLSAgICBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBtX2FnZW50OwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJp
dmF0ZToKLSAgICBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcjsKLSNlbmRpZgotfTsiIiIpCi0KLSAgICBCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uID0gKAotICAgICIiIiAgICAk
e2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoK
LSAgICAgICAgJHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtv
dXRQYXJhbWV0ZXJzfSk7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0o
JHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQotCi0gICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvblNtYWxsU3dpdGNoID0gKAotICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQotewotICAgIFJlZjxJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwot
Ci0ke2Rpc3BhdGNoQ2FzZXN9Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLics
IG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLX0iIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkIEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKLXsKLSAg
ICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewotICAg
ICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRs
ZXI7Ci0gICAgICAgIH0gY29tbWFuZHNbXSA9IHsKLSR7ZGlzcGF0Y2hDYXNlc30KLSAgICAgICAg
fTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwot
ICAgIH0KLQotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0g
ZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQo
KSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0
cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3Vu
ZCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICgoKnRoaXMpLippdC0+dmFsdWUp
KGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwotfSIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgKLSAgICAiIiJQYXNzUmVmUHRyPElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
LX0KLQotSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICAsIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcihudWxscHRyKQotI2VuZGlmCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0
aGlzKTsKLX0iIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFy
ZUNvbW1hbmRBcmd1bWVudHMgPSAoCi0iIiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKLSR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9
Ci0gICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVz
XCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdl
LCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotIiIi
KQotCi0gICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgK
LSIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2Fs
bGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkg
eyB9Ci0KLXZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQotewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9Ci0gICAgc2VuZElmQWN0aXZl
KGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKLX0iIiIpCi0KLSAgICBGcm9udGVuZERpc3Bh
dGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCi0iIiIke2NsYXNzQW5kRXhwb3J0
TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KLSR7ZXZlbnREZWNs
YXJhdGlvbnN9Ci1wcml2YXRlOgotICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7Ci19OyIiIikKLQotICAgIFByb3RvY29sT2JqZWN0QnVpbGRl
ckRlY2xhcmF0aW9uUHJlbHVkZSA9ICgKLSIiIiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAg
Y2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwotICAgICAgICB9
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyAke29iamVjdFR5cGV9OwotICAgIHB1YmxpYzoiIiIpCi0K
LSAgICBQcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0gKAotIiIiCi0g
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5
cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7
Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR7b2JqZWN0VHlw
ZX0+Kj4oJm1fcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8JHtvYmpl
Y3RUeXBlfT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
JHtvYmplY3RUeXBlfT4oKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSR7Y29uc3RydWN0b3JFeGFtcGxl
fQotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90
b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOyIiIikKLQotICAgIFByb3RvY29sT2Jq
ZWN0UnVudGltZUNhc3QgPSAoCi0iIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdU
cmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0
KHJlc3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVk
KTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSNlbmRpZiAgLy8g
IUFTU0VSVF9ESVNBQkxFRAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9
KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3By
b2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nh
c3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0i
IiIpCi0KLSAgICBPYmpDSGVhZGVyUHJlbHVkZSA9ICgKLSAgICAiIiIjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KLQotJHtpbmNsdWRlc30KLSIiIikKLQotICAgIE9iakNIZWFkZXJQ
b3N0bHVkZSA9ICgKLSAgICAiIiIiIiIpCi0KLSAgICBPYmpDQ29udmVyc2lvbkhlbHBlcnNQcmVs
dWRlID0gKAotICAgICIiIiR7aW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikK
LQotICAgIE9iakNDb252ZXJzaW9uSGVscGVyc1Bvc3RsdWRlID0gKAotICAgICIiIn0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIiIiKQotCi0gICAgT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlID0g
KAotICAgICIiIiR7aW5jbHVkZXN9IiIiKQotCi0gICAgT2JqQ0dlbmVyaWNIZWFkZXJQb3N0bHVk
ZSA9ICgKLSAgICAiIiIiIiIpCi0KLSAgICBPYmpDQ29udmVyc2lvbkhlbHBlcnNTdGFuZGFyZCA9
ICgKLSAgICAiIiJ0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUg
ZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSk7IiIiKQotCi0gICAgT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySGVhZGVyUHJlbHVkZSA9ICgKLSAgICAiIiIke2luY2x1ZGVzfQotCi0ke2Zvcndh
cmREZWNsYXJhdGlvbnN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotIiIiKQotCi0gICAgT2Jq
Q0JhY2tlbmREaXNwYXRjaGVySGVhZGVyUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0iIiIpCi0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvblByZWx1ZGUgPSAoCi0gICAgIiIiI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICR7cHJp
bWFyeUluY2x1ZGV9Ci0KLSR7c2Vjb25kYXJ5SW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgeyIiIikKLQotICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUG9zdGx1
ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0iIiIpCi0KLSAgICBPYmpD
SW1wbGVtZW50YXRpb25QcmVsdWRlID0gKAotICAgICIiIiNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAke3ByaW1hcnlJbmNsdWRlfQotCi0ke3NlY29uZGFyeUluY2x1ZGVzfQotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOyIiIikKLQotICAgIE9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRl
ID0gKAotICAgICIiIiIiIikKLQotICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFp
bkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbiA9ICgKLSAgICAiIiJjbGFzcyBBbHRlcm5hdGVJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVy
bmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotJHtjb21t
YW5kRGVjbGFyYXRpb25zfQotfTsiIiIpCi0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xhcmF0aW9uID0gKAotICAgICIiImNsYXNzIE9iakNJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKGlkPCR7b2JqY1By
ZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0g
aGFuZGxlcjsgfQotJHtjb21tYW5kRGVjbGFyYXRpb25zfQotcHJpdmF0ZToKLSAgICBSZXRhaW5Q
dHI8aWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKLX07IiIiKQotCi0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ckltcGxlbWVudGF0aW9uID0gKAotICAgICIiInZvaWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0ZXJzfSkKLXsKLSAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSwgZXJyb3IpOwotICAgIH07Ci0KLSR7c3VjY2Vzc0NhbGxiYWNrfQotJHtjb252ZXJzaW9u
c30KLSR7aW52b2NhdGlvbn0KLX0KLSIiIikKLQotICAgIE9iakNDb25maWd1cmF0aW9uQ29tbWFu
ZFByb3BlcnR5ID0gKAotICAgICIiIkBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRl
cj1zZXQke2RvbWFpbk5hbWV9SGFuZGxlcjopIGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9
RG9tYWluSGFuZGxlcj4gJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsiIiIpCi0KLSAgICBP
YmpDQ29uZmlndXJhdGlvbkV2ZW50UHJvcGVydHkgPSAoCi0gICAgIiIiQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSAke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyOyIiIikKLQotICAg
IE9iakNDb25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5SW1wbGVtZW50YXRpb24gPSAoCi0gICAg
IiIiLSAodm9pZClzZXQke2RvbWFpbk5hbWV9SGFuZGxlcjooaWQ8JHtvYmpjUHJlZml4fSR7ZG9t
YWluTmFtZX1Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gXyR7
dmFyaWFibGVOYW1lUHJlZml4fUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfJHt2
YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlciByZWxlYXNlXTsKLSAgICBfJHt2YXJpYWJsZU5hbWVQ
cmVmaXh9SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURp
c3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIFdURjo6bW92
ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFnZW50UmVnaXN0cnko
KS5hcHBlbmQoV1RGOjptb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPCR7b2JqY1By
ZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4pJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFu
ZGxlcgotewotICAgIHJldHVybiBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsKLX0iIiIp
Ci0KLSAgICBPYmpDQ29uZmlndXJhdGlvbkdldHRlckltcGxlbWVudGF0aW9uID0gKAotICAgICIi
Ii0gKCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVyICopJHt2
YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfJHt2YXJpYWJs
ZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfJHt2YXJpYWJsZU5hbWVQcmVm
aXh9RXZlbnREaXNwYXRjaGVyID0gW1ske29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2
ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAg
ICByZXR1cm4gXyR7dmFyaWFibGVOYW1lUHJlZml4fUV2ZW50RGlzcGF0Y2hlcjsKLX0iIiIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNzU0YmUzMTQxMjEx
Y2RjZDM3MTJjYTc3ZTBhYjM2MjZiOTcwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQpA
QCAtMCwwICsxLDUwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAo
YykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5
cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdv
cmtzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiBqb2luX3R5
cGVfYW5kX25hbWUodHlwZV9zdHIsIG5hbWVfc3RyKToKKyAgICBpZiB0eXBlX3N0ci5lbmRzd2l0
aCgnKicpOgorICAgICAgICByZXR1cm4gdHlwZV9zdHIgKyBuYW1lX3N0cgorICAgIHJldHVybiB0
eXBlX3N0ciArICcgJyArIG5hbWVfc3RyCisKKworZGVmIHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFy
a2VycyhzdHIpOgorICAgIHJldHVybiBzdHIucmVwbGFjZSgnLyonLCAnJykucmVwbGFjZSgnKi8n
LCAnJykKKworCitkZWYgcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihzdHIsIHBvc3NpYmxlX2R1
cGxpY2F0ZSk6CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBvc3NpYmxlX2R1cGxpY2F0ZSArIHBv
c3NpYmxlX2R1cGxpY2F0ZSwgcG9zc2libGVfZHVwbGljYXRlKQorCisKK19PQkpDX0lERU5USUZJ
RVJfUkVOQU1FX01BUCA9IHsKKyAgICAndGhpcyc6ICd0aGlzT2JqZWN0JywgICMgRGVidWdnZXIu
Q2FsbEZyYW1lLnRoaXMKKyAgICAnZGVzY3JpcHRpb24nOiAnc3RyaW5nUmVwcmVzZW50YXRpb24n
LCAgIyBSdW50aW1lLlJlbW90ZU9iamVjdC5kZXNjcmlwdGlvbgorICAgICdpZCc6ICdpZGVudGlm
aWVyJywgICMgUGFnZS5GcmFtZS5pZCwgUnVudGltZS5FeGVjdXRpb25Db250ZXh0RGVzY3JpcHRp
b24uaWQsIERlYnVnZ2VyLkJyZWFrcG9pbnRBY3Rpb24uaWQKK30KKworX09CSkNfSURFTlRJRklF
Ul9SRVZFUlNFX1JFTkFNRV9NQVAgPSBkaWN0KCh2LCBrKSBmb3IgaywgdiBpbiBfT0JKQ19JREVO
VElGSUVSX1JFTkFNRV9NQVAuaXRlcml0ZW1zKCkpCisKKworY2xhc3MgT2JqQ1R5cGVDYXRlZ29y
eToKKyAgICBTaW1wbGUgPSAwCisgICAgU3RyaW5nID0gMQorICAgIE9iamVjdCA9IDIKKyAgICBB
cnJheSA9IDMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2F0ZWdvcnlfZm9yX3R5cGUo
X3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgor
ICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnc3RyaW5nJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmcKKyAgICAgICAgICAgIGlmICBfdHlw
ZS5yYXdfbmFtZSgpIGluIFsnb2JqZWN0JywgJ2FueSddOgorICAgICAgICAgICAgICAgIHJldHVy
biBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdAorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSBpcyAnYXJyYXknOgorICAgICAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LkFy
cmF5CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBP
YmpDVHlwZUNhdGVnb3J5Lk9iamVjdAorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5BcnJheQorICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIHJl
dHVybiBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlw
ZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAg
ICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShfdHlwZS5wcmltaXRp
dmVfdHlwZSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCisKKyMgVGhpcyBjbGFzcyBjb250YWlu
cyBleHRyYSBzdGF0aWMgbWV0aG9kcyB1c2VkIGZvciBnZW5lcmF0aW9uLCBidXQgZG9lcworIyBu
b3QgcGFydGljaXBhdGUgaW4gYW55IGluaGVyaXRhbmNlIGhpZXJhcmNoeS4gRmlsZSBnZW5lcmF0
b3JzIHNob3VsZAorIyBleHRlbmQgdGhlIGdlbmVyaWMgIkdlbmVyYXRvciIgY2xhc3MgaW5zdGVh
ZC4KK2NsYXNzIE9iakNHZW5lcmF0b3I6CisgICAgT0JKQ19QUkVGSVggPSAnUldJUHJvdG9jb2wn
CisgICAgT0JKQ19KU09OX09CSkVDVF9CQVNFID0gJyVzSlNPTk9iamVjdCcgJSBPQkpDX1BSRUZJ
WAorCisgICAgIyBBZGp1c3QgaWRlbnRpZmllciBuYW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBPYmpD
IGtleXdvcmRzLgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpZGVudGlmaWVyX3RvX29i
amNfaWRlbnRpZmllcihuYW1lKToKKyAgICAgICAgcmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVO
QU1FX01BUC5nZXQobmFtZSwgbmFtZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2Jq
Y19pZGVudGlmaWVyX3RvX2lkZW50aWZpZXIobmFtZSk6CisgICAgICAgIHJldHVybiBfT0JKQ19J
REVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01BUC5nZXQobmFtZSwgbmFtZSkKKworICAgICMgR2Vu
ZXJhdGUgT2JqQyB0eXBlcywgY29tbWFuZCBoYW5kbGVycywgYW5kIGV2ZW50IGRpc3BhdGNoZXJz
IGZvciBhIHN1YnNldCBvZiBkb21haW5zLgorCisgICAgRE9NQUlOU19UT19HRU5FUkFURSA9IFsn
Q1NTJywgJ0RPTScsICdET01TdG9yYWdlJywgJ05ldHdvcmsnLCAnUGFnZSddCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKG1v
ZGVsKToKKyAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXMoZG9tYWluKToK
KyAgICAgICAgICAgIGlmIG1vZGVsLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpD
R2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUpCisgICAgICAgICAgICB3aGl0ZWxpc3QudXBk
YXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdnZXInLCAnUnVudGltZSddKSkKKyAgICAgICAgICAg
IHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0CisgICAgICAgIHJldHVybiBz
aG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihtb2RlbCk6Cisg
ICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcihkb21haW4p
OgorICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9i
akNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKKyAgICAgICAgICAgIHJldHVybiBkb21h
aW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0CisgICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJh
dGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBz
aG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKG1vZGVsKToKKyAg
ICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcihkb21haW4p
OgorICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9i
akNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKKyAgICAgICAgICAgIHdoaXRlbGlzdC5h
ZGQoJ0NvbnNvbGUnKQorICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3
aGl0ZWxpc3QKKyAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlz
cGF0Y2hlcgorCisgICAgIyBPYmpDIGVudW0gYW5kIHR5cGUgbmFtZXMuCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIG9iamNfbmFtZV9mb3JfdHlwZSh0eXBlKToKKyAgICAgICAgbmFtZSA9
IHR5cGUucXVhbGlmaWVkX25hbWUoKS5yZXBsYWNlKCcuJywgJycpCisgICAgICAgIG5hbWUgPSBy
ZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIHR5cGUudHlwZV9kb21haW4oKS5kb21haW5f
bmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3Jf
YW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pOgorICAgICAgICBkb21haW5f
bmFtZSA9IGRlY2xhcmF0aW9uLnR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZQorICAgICAg
ICBuYW1lID0gJyVzJXMnICUgKGRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFp
bl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZW51bV9uYW1lX2Zv
cl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIGRv
bWFpbl9uYW1lID0gbWVtYmVyLnR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZQorICAgICAg
ICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25h
bWUoKSwgdWNmaXJzdChtZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAgICBuYW1lID0gcmVtb3Zl
X2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICcl
cyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVy
KGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgorICAgICAgICBkb21h
aW5fbmFtZSA9IGRvbWFpbi5kb21haW5fbmFtZQorICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAo
ZG9tYWluX25hbWUsIHVjZmlyc3QoZXZlbnRfb3JfY29tbWFuZF9uYW1lKSwgdWNmaXJzdChwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9m
cm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpD
R2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBvYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKF90eXBlKToKKyAgICAgICAg
ZG9tYWluX25hbWUgPSBfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lCisgICAgICAgIG5h
bWUgPSBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpLnJlcGxhY2UoJy4nLCAnJykKKyAgICAgICAgbmFt
ZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCisgICAgICAg
IHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAg
ICMgTWlzY2VsbGFuZW91cyBuYW1lIGhhbmRsaW5nLgorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiB2YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgIGRv
bWFpbl9uYW1lID0gZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0
YXJ0c3dpdGgoJ0RPTScpOgorICAgICAgICAgICAgcmV0dXJuICdkb20nICsgZG9tYWluX25hbWVb
MzpdCisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0NTUycpOgorICAgICAgICAg
ICAgcmV0dXJuICdjc3MnICsgZG9tYWluX25hbWVbMzpdCisgICAgICAgIHJldHVybiBkb21haW5f
bmFtZVs6MV0ubG93ZXIoKSArIGRvbWFpbl9uYW1lWzE6XQorCisgICAgIyBUeXBlIGJhc2ljcy4K
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9yYXdf
bmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnc3RyaW5nJywgJ2FycmF5
J106CisgICAgICAgICAgICByZXR1cm4gJ2NvcHknCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsn
aW50ZWdlcicsICdudW1iZXInLCAnYm9vbGVhbiddOgorICAgICAgICAgICAgcmV0dXJuICdhc3Np
Z24nCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAg
ICAgcmV0dXJuICdyZXRhaW4nCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIG9iamNfdHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgorICAgICAgICBp
ZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcgKicK
KyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnTlNB
cnJheSAqJworICAgICAgICBpZiByYXdfbmFtZSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICBy
ZXR1cm4gJ05TSW50ZWdlcicKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6CisgICAg
ICAgICAgICByZXR1cm4gJ2RvdWJsZScKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4n
OgorICAgICAgICAgICAgcmV0dXJuICdCT09MJworICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2Fu
eScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnJXMgKicgJSBPYmpDR2VuZXJhdG9y
Lk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBvYmpjX2NsYXNzX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6CisgICAg
ICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdOU1N0cmlu
ZycKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAn
TlNBcnJheScKKyAgICAgICAgaWYgcmF3X25hbWUgaW4gWydpbnRlZ2VyJywgJ251bWJlcicsICdi
b29sZWFuJ106CisgICAgICAgICAgICByZXR1cm4gJ05TTnVtYmVyJworICAgICAgICBpZiByYXdf
bmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBG
SVhNRTogQ2FuIHRoZXNlIHByb3RvY29sX3R5cGUgZnVuY3Rpb25zIGJlIHJlbW92ZWQgaW4gZmF2
b3Igb2YgQysrIGdlbmVyYXRvcnMgZnVuY3Rpb25zPworCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBwcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJh
d19uYW1lIGlzICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdTdHJpbmcnCisgICAgICAg
IGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgIHJldHVybiAnaW50JworICAg
ICAgICBpZiByYXdfbmFtZSBpcyAnbnVtYmVyJzoKKyAgICAgICAgICAgIHJldHVybiAnZG91Ymxl
JworICAgICAgICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6CisgICAgICAgICAgICByZXR1cm4g
J2Jvb2wnCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAg
ICAgICAgcmV0dXJuICdJbnNwZWN0b3JPYmplY3QnCisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgor
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90
b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
J0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21h
aW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUs
IEFycmF5VHlwZSkpOgorICAgICAgICAgICAgc3ViX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgcmV0dXJu
ICdJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUgc3ViX3R5cGUKKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19jbGFzc19mb3JfdHlw
ZShfdHlwZSk6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2Vu
ZXJhdG9yLm9iamNfY2xhc3NfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9i
akNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfcmF3X25hbWUoX3R5cGUucHJpbWl0aXZlX3R5cGUu
cmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToK
KyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlw
ZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAg
ICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50X21hcmtlcnMoT2JqQ0dlbmVyYXRvci5v
YmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkpCisgICAgICAgICAgICByZXR1
cm4gJ05TQXJyYXkvKjwlcz4qLycgJSBzdWJfdHlwZQorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2FjY2Vzc29yX3R5cGVfZm9yX21lbWJlciht
ZW1iZXIpOgorICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVf
Zm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUpOgorICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2Fj
Y2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdhc3NpZ24n
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAg
ICByZXR1cm4gJ3JldGFpbicKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlw
ZSkpOgorICAgICAgICAgICAgcmV0dXJuICdjb3B5JworICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlv
biwgbWVtYmVyKToKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9t
ZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBl
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFs
aWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFt
ZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAg
ICAgIGlmIChfdHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAgICAgICAgIHJldHVybiBPYmpD
R2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFy
YXRpb24sIG1lbWJlcikKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51
bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5cGUpCisgICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRv
ci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAqJworICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2Nr
X2NvbW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUu
ZWxlbWVudF90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiovIConICUg
c3ViX3R5cGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgb2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyLCByZXNwZWN0X29wdGlvbmFsPVRydWUpOgorICAgICAgICBvYmpjX3R5cGUgPSBPYmpD
R2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJuYWwocGFyYW1ldGVyLnR5cGUsIGRv
bWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAgIGlmIHJlc3Bl
Y3Rfb3B0aW9uYWwgYW5kIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgIGlmIG9i
amNfdHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpjX3R5cGUg
KyAnKicKKyAgICAgICAgICAgIHJldHVybiBvYmpjX3R5cGUgKyAnIConCisgICAgICAgIHJldHVy
biBvYmpjX3R5cGUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY190eXBlX2Zvcl9w
YXJhbV9pbnRlcm5hbChfdHlwZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLm9iamNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICBpZiBfdHlwZS5pc19h
bm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVt
X25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2Jq
Y19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSkKKyAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2Vu
ZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkgKyAnIConCisgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHN1Yl90eXBlID0gc3RyaXBf
YmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShf
dHlwZS5lbGVtZW50X3R5cGUpKQorICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8g
KicgJSBzdWJfdHlwZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBPYmpDIDwtPiBQcm90
b2NvbCBjb252ZXJzaW9uIGZvciBjb21tYW5kcyBhbmQgZXZlbnRzLgorICAgICMgICAtIGNvbnZl
cnQgYSBjb21tYW5kIGNhbGwgcGFyYW1ldGVyIHJlY2VpdmVkIGZyb20gUHJvdG9jb2wgdG8gT2Jq
QyBmb3IgaGFuZGxlcgorICAgICMgICAtIGNvbnZlcnQgYSBjb21tYW5kIHJldHVybiBwYXJhbWV0
ZXIgaW4gY2FsbGJhY2sgYmxvY2sgZnJvbSBPYmpDIHRvIFByb3RvY29sIHRvIHNlbmQKKyAgICAj
ICAgLSBjb252ZXJ0IGFuIGV2ZW50IHBhcmFtZXRlciBmcm9tIE9iakMgQVBJIHRvIFByb3RvY29s
IHRvIHNlbmQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9leHBv
cnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUodmFyX3R5cGUsIHZhcl9uYW1lKToKKyAgICAgICAg
Y2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKHZhcl90eXBlKQor
ICAgICAgICBpZiBjYXRlZ29yeSBpbiBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNUeXBl
Q2F0ZWdvcnkuU3RyaW5nXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFyX3R5cGUsIEVu
dW1UeXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3RvUHJvdG9jb2xTdHJpbmcoJXMpJyAl
IHZhcl9uYW1lCisgICAgICAgICAgICByZXR1cm4gdmFyX25hbWUKKyAgICAgICAgaWYgY2F0ZWdv
cnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gJ1slcyB0
b0luc3BlY3Rvck9iamVjdF0nICUgdmFyX25hbWUKKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2Jq
Q1R5cGVDYXRlZ29yeS5BcnJheToKKyAgICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpDR2Vu
ZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQorICAg
ICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2
YXJfdHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5QXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAg
ICBpZiBwcm90b2NvbF90eXBlIGlzICdTdHJpbmcnIGFuZCBvYmpjX2NsYXNzIGlzICdOU1N0cmlu
Zyc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheSglcyknICUg
dmFyX25hbWUKKyAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2ludCcgYW5kIG9iamNf
Y2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rvcklu
dGVnZXJBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUg
aXMgJ2RvdWJsZScgYW5kIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2luc3BlY3RvckRvdWJsZUFycmF5KCVzKScgJSB2YXJfbmFtZQorICAgICAgICAg
ICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUgdmFyX25hbWUKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3Jf
bWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNl
KG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBtZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+
KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1f
bWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBuYW1lKQorICAgICAgICAgICAgcmV0dXJuICdm
cm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKG1lbWJlci50eXBlKSwgbmFtZSkKKyAgICAgICAgcmV0
dXJuIE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFy
aWFibGUobWVtYmVyLnR5cGUsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihuYW1lLCBkb21haW4s
IGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3Ry
aW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91
c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVy
KSwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcykn
ICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShw
YXJhbWV0ZXIudHlwZSksIG5hbWUpCisgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNf
cHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBu
YW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9l
eHByZXNzaW9uX2Zvcl92YXJpYWJsZSh2YXJfdHlwZSwgdmFyX25hbWUpOgorICAgICAgICBjYXRl
Z29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUodmFyX3R5cGUpCisgICAg
ICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRl
Z29yeS5TdHJpbmddOgorICAgICAgICAgICAgcmV0dXJuIHZhcl9uYW1lCisgICAgICAgIGlmIGNh
dGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAgICAgICAgICAgb2JqY19jbGFz
cyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJfdHlwZSkKKyAgICAgICAg
ICAgIHJldHVybiAnW1tbJXMgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OiVzXSBhdXRv
cmVsZWFzZV0nICUgKG9iamNfY2xhc3MsIHZhcl9uYW1lKQorICAgICAgICBpZiBjYXRlZ29yeSBp
cyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNH
ZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCisgICAg
ICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdvYmpjU3RyaW5nQXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICBpZiBvYmpj
X2NsYXNzIGlzICdOU051bWJlcic6ICAjIEZJWE1FOiBJbnRlZ2VyIG9yIERvdWJsZT8KKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ29iamNJbnRlZ2VyQXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAg
ICAgICAgICByZXR1cm4gJ29iamNBcnJheTwlcz4oJXMpJyAlIChvYmpjX2NsYXNzLCB2YXJfbmFt
ZSkKKworICAgICMgT2JqQyA8LT4gSlNPTiBvYmplY3QgY29udmVyc2lvbiBmb3IgdHlwZXMgZ2V0
dGVycy9zZXR0ZXJzLgorICAgICMgICAtIGNvbnZlcnQgYSBtZW1iZXIgc2V0dGVyIGZyb20gT2Jq
QyBBUEkgdG8gSlNPTiBvYmplY3Qgc2V0dGVyCisgICAgIyAgIC0gY29udmVydCBhIG1lbWJlciBn
ZXR0ZXIgZnJvbSBKU09OIG9iamVjdCB0byBPYmpDIEFQSQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBvYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJhdGlv
biwgbWVtYmVyLCBzdWJfZXhwcmVzc2lvbik6CisgICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVD
YXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShtZW1iZXIudHlwZSkKKyAgICAgICAgaWYgY2F0ZWdv
cnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICd0b1Byb3RvY29sU3RyaW5nKCVzKScgJSBzdWJfZXhwcmVzc2lv
bgorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCisgICAgICAgIGlmIGNhdGVnb3J5
IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHBy
ZXNzaW9uCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6Cisg
ICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBl
KG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMg
J05TU3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5
KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNO
dW1iZXInOgorICAgICAgICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnBy
b3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAg
ICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZSc6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAnaW5zcGVjdG9yRG91YmxlQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAg
ICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JJbnRlZ2VyQXJyYXkoJXMpJyAlIHN1Yl9leHBy
ZXNzaW9uCisgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rvck9iamVjdEFycmF5KCVzKScgJSBz
dWJfZXhwcmVzc2lvbgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm90b2NvbF90b19v
YmpjX2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyLCBzdWJfZXhwcmVz
c2lvbik6CisgICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3Jf
dHlwZShtZW1iZXIudHlwZSkKKyAgICAgICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdv
cnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106CisgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVy
LnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90
b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9h
bm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciksIHN1Yl9leHByZXNzaW9u
KQorICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUg
KE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShtZW1i
ZXIudHlwZSksIHN1Yl9leHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNz
aW9uCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAg
ICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihk
ZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICAgICAgcmV0dXJuICcoJXMpJXMnICUgKG9iamNf
dHlwZSwgc3ViX2V4cHJlc3Npb24pCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0
ZWdvcnkuQXJyYXk6CisgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5w
cm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAg
ICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUobWVtYmVy
LnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNTdHJp
bmcnOgorICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY1N0cmluZ0FycmF5KCVzKScgJSBzdWJf
ZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOgorICAg
ICAgICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVf
Zm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgICAgIGlmIHBy
b3RvY29sX3R5cGUgaXMgJ2RvdWJsZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2Jq
Y0RvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIHJldHVy
biAnb2JqY0ludGVnZXJBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgIHJl
dHVybiAnb2JqY0FycmF5PCVzPiglcyknICUgKG9iamNfY2xhc3MsIHN1Yl9leHByZXNzaW9uKQor
CisgICAgIyBKU09OIG9iamVjdCBzZXR0ZXIvZ2V0dGVyIHNlbGVjdG9ycyBmb3IgdHlwZXMuCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpj
X3NldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlwZSwgZGVjbGFyYXRp
b24sIG1lbWJlcikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19zZXR0ZXJfbWV0
aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByYXdfbmFtZSA9IF90eXBlLnJhd19uYW1lKCkK
KyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdib29sZWFuJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NldEJvb2wnCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnaW50ZWdlcic6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJworICAgICAgICAgICAgaWYgcmF3X25h
bWUgaXMgJ251bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCisgICAg
ICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
J3NldFN0cmluZycKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29iamVjdCdd
OgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JworICAgICAgICAgICAgaWYgcmF3
X25hbWUgaXMgJ2FycmF5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldEluc3BlY3RvckFy
cmF5JworICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldFN0cmluZycKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAn
c2V0T2JqZWN0JworICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6Cisg
ICAgICAgICAgICByZXR1cm4gJ3NldEluc3BlY3RvckFycmF5JworICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2dldHRlcl9tZXRob2RfZm9yX21l
bWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iu
b2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xh
cmF0aW9uLCBtZW1iZXIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZ2V0dGVy
X21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToK
KyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAg
ICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdfbmFt
ZSgpCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdib29sRm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVn
ZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnaW50ZWdlckZvcktleScKKyAgICAgICAgICAg
IGlmIHJhd19uYW1lIGlzICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnZG91Ymxl
Rm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0cmluZyc6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICdzdHJpbmdGb3JLZXknCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpbiBb
J2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamVjdEZvcktleScK
KyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJheSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdpbnNwZWN0b3JBcnJheUZvcktleScKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJu
ICdzdHJpbmdGb3JLZXknCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KSk6CisgICAgICAgICAgICByZXR1cm4gJ29iamVjdEZvcktleScKKyAgICAgICAgaWYgKGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JB
cnJheUZvcktleScKKyAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzM1ZTZkOTU1MDEwYTg0
MDIzNTA0NDIxNzg4MjMwNDI3MDk4ZDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5CkBAIC0wLDAgKzEsMTU1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29w
eXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgR2VuZXJhdG9y
IHRlbXBsYXRlcywgd2hpY2ggY2FuIGJlIGZpbGxlZCB3aXRoIHN0cmluZy5UZW1wbGF0ZS4KKyMg
Rm9sbG93aW5nIGFyZSBjbGFzc2VzIHRoYXQgZmlsbCB0aGUgdGVtcGxhdGVzIGZyb20gdGhlIHR5
cGVjaGVja2VkIG1vZGVsLgorCitjbGFzcyBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzOgorCisgICAg
SGVhZGVyUHJlbHVkZSA9ICgKKyAgICAiIiIjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworJHtpbmNsdWRlc30KKyIiIikKKworICAgIEhlYWRlclBvc3RsdWRlID0gKAorICAgICIi
IiIiIikKKworICAgIENvbnZlcnNpb25IZWxwZXJzUHJlbHVkZSA9ICgKKyAgICAiIiIke2luY2x1
ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCisKKyAgICBDb252ZXJzaW9uSGVscGVy
c1Bvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIiIiKQorCisg
ICAgR2VuZXJpY0hlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiJHtpbmNsdWRlc30iIiIpCisKKyAg
ICBHZW5lcmljSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIiIiIiKQorCisgICAgQ29udmVyc2lv
bkhlbHBlcnNTdGFuZGFyZCA9ICgKKyAgICAiIiJ0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSk7IiIiKQor
CisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiR7aW5jbHVk
ZXN9CisKKyR7Zm9yd2FyZERlY2xhcmF0aW9uc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7Cisi
IiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlclBvc3RsdWRlID0gKAorICAgICIiIn0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAgIiIiI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICR7cHJpbWFyeUluY2x1ZGV9CisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Qb3N0
bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyIiIikKKworICAgIElt
cGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgJHtwcmltYXJ5SW5jbHVkZX0KKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsiIiIpCisKKyAgICBJbXBsZW1lbnRhdGlvblBvc3RsdWRlID0gKAor
ICAgICIiIiIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlcklu
dGVyZmFjZURlY2xhcmF0aW9uID0gKAorICAgICIiImNsYXNzIEFsdGVybmF0ZUluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ciske2NvbW1hbmREZWNsYXJh
dGlvbnN9Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ck9iakNEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiJjbGFzcyBPYmpDSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihpZDwke29iamNQcmVmaXh9JHtkb21haW5O
YW1lfURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyR7
Y29tbWFuZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPCR7b2JqY1By
ZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OyIiIikKKwor
ICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uID0g
KAorICAgICIiInZvaWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0ZXJzfSkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAg
IH07CisKKyR7c3VjY2Vzc0NhbGxiYWNrfQorJHtjb252ZXJzaW9uc30KKyR7aW52b2NhdGlvbn0K
K30KKyIiIikKKworICAgIENvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHkgPSAoCisgICAgIiIi
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldCR7ZG9tYWluTmFtZX1IYW5k
bGVyOikgaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPiAke3Zhcmlh
YmxlTmFtZVByZWZpeH1IYW5kbGVyOyIiIikKKworICAgIENvbmZpZ3VyYXRpb25FdmVudFByb3Bl
cnR5ID0gKAorICAgICIiIkBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgJHtvYmpjUHJl
Zml4fSR7ZG9tYWluTmFtZX1Eb21haW5FdmVudERpc3BhdGNoZXIgKiR7dmFyaWFibGVOYW1lUHJl
Zml4fUV2ZW50RGlzcGF0Y2hlcjsiIiIpCisKKyAgICBDb25maWd1cmF0aW9uQ29tbWFuZFByb3Bl
cnR5SW1wbGVtZW50YXRpb24gPSAoCisgICAgIiIiLSAodm9pZClzZXQke2RvbWFpbk5hbWV9SGFu
ZGxlcjooaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPiloYW5kbGVy
Cit7CisgICAgaWYgKGhhbmRsZXIgPT0gXyR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRsZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFtfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlciByZWxl
YXNlXTsKKyAgICBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlciA9IFtoYW5kbGVyIHJldGFp
bl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9i
akNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50PEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJu
YXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFs
KCIke2RvbWFpbk5hbWV9IiksIFdURjo6bW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAg
X2NvbnRyb2xsZXItPmFnZW50UmVnaXN0cnkoKS5hcHBlbmQoV1RGOjptb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Cit9CisKKy0gKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxl
cj4pJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcgoreworICAgIHJldHVybiBfJHt2YXJpYWJs
ZU5hbWVQcmVmaXh9SGFuZGxlcjsKK30iIiIpCisKKyAgICBDb25maWd1cmF0aW9uR2V0dGVySW1w
bGVtZW50YXRpb24gPSAoCisgICAgIiIiLSAoJHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21h
aW5FdmVudERpc3BhdGNoZXIgKikke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIK
K3sKKyAgICBpZiAoIV8ke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIpCisgICAg
ICAgIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIgPSBbWyR7b2JqY1ByZWZp
eH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRy
b2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZl
bnREaXNwYXRjaGVyOworfSIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CmluZGV4IGIwYzcyYjBiNTlhMDQ2ZThkMzNiNDZhNTc5
YTQ3ZDQwMDJiMTU2YmYuLjlkOTMxY2ZkOTFmNTdiYjk0Y2I4YTExMjVkOWZlZGFkOGE1M2E2ODMg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQpAQCAtMjQsNyArMjQsNyBAQAogIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAotIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgSlMgYW5kIEMr
KyBiaW5kaW5ncyBmb3IgdGhlIGluc3BlY3RvciBwcm90b2NvbC4KKyMgVGhpcyBzY3JpcHQgZ2Vu
ZXJhdGVzIEpTLCBPYmplY3RpdmUgQywgYW5kIEMrKyBiaW5kaW5ncyBmb3IgdGhlIGluc3BlY3Rv
ciBwcm90b2NvbC4KICMgR2VuZXJhdG9ycyBmb3IgaW5kaXZpZHVhbCBmaWxlcyBhcmUgbG9jYXRl
ZCBpbiB0aGUgY29kZWdlbi8gZGlyZWN0b3J5LgogCiBpbXBvcnQgb3MucGF0aApAQCAtNDAsMzcg
KzQwLDM5IEBAIHRyeToKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBpbXBvcnQgc2ltcGxlanNv
biBhcyBqc29uCiAKK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAl
KG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKKwogdHJ5OgogICAgIGZyb20gY29kZWdlbiBpbXBvcnQgKgogCiAjIFdoZW4g
Y29weWluZyBnZW5lcmF0b3IgZmlsZXMgdG8gSmF2YVNjcmlwdENvcmUncyBwcml2YXRlIGhlYWRl
cnMgb24gTWFjLAogIyB0aGUgY29kZWdlbi8gbW9kdWxlIGRpcmVjdG9yeSBpcyBmbGF0dGVuZWQu
IFNvLCBpbXBvcnQgZGlyZWN0bHkuCi1leGNlcHQgSW1wb3J0RXJyb3I6CitleGNlcHQgSW1wb3J0
RXJyb3IsIGU6CisgICAgIyBsb2cuZXJyb3IoZSkgIyBVbmNvbW1lbnQgdGhpcyB0byBkZWJ1ZyBl
YXJseSBpbXBvcnQgZXJyb3JzLgogICAgIGltcG9ydCBtb2RlbHMKICAgICBmcm9tIG1vZGVscyBp
bXBvcnQgKgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCi0KLSAgICBmcm9tIGdlbmVyYXRl
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBn
ZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0
ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJv
bSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24g
aW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVh
ZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19j
b252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLSAgICBmcm9tIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmpl
Y3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotCi0KLWxvZ2dpbmcuYmFzaWNDb25maWco
Zm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1Ip
Ci1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKyAgICBmcm9tIGNwcF9nZW5lcmF0
b3IgaW1wb3J0ICoKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCAqCisKKyAgICBmcm9t
IGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQg
KgorICAgIGZyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfY29tbWFuZHMgaW1wb3J0ICoKKyAgICBm
cm9tIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAg
ZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9y
dCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1w
b3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVh
ZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlciBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfY29u
ZmlndXJhdGlvbl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfb2JqY19j
b252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVf
b2JqY19oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVh
ZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCiAKIAogIyBBIHdyaXRlciB0aGF0IG9ubHkgdXBkYXRlcyBmaWxl
IGlmIGl0IGFjdHVhbGx5IGNoYW5nZWQuCkBAIC0xMzAsMjQgKzEzMiwyNCBAQCBkZWYgZ2VuZXJh
dGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25l
LAogICAgIGdlbmVyYXRvcnMgPSBbXQogICAgIGlzX3Rlc3QgPSBwcm90b2NvbC5mcmFtZXdvcmsg
aXMgRnJhbWV3b3Jrcy5UZXN0CiAgICAgaWYgaXNfdGVzdCBvciBwcm90b2NvbC5mcmFtZXdvcmsg
aXMgbm90IEZyYW1ld29ya3MuV2ViSW5zcGVjdG9yOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVu
ZChBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJp
bWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
QmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
LSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihw
cm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoSlNCYWNrZW5k
Q29tbWFuZHNHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKHByb3RvY29s
LCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHBy
aW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCiAgICAgaWYgaXNfdGVzdCBvciBwcm90b2Nv
bC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJJbnNwZWN0b3I6Ci0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90
b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmplY3RpdmVDQ29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKE9iamVjdGl2ZUNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2Jq
ZWN0aXZlQ1R5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2
ZUNUeXBlc0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
KyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNh
dGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNJbnRlcm5hbEhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
IAogICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCiAK
</data>
<flag name="review"
          id="265597"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241816</attachid>
            <date>2014-11-18 14:55:03 -0800</date>
            <delta_ts>2014-11-18 14:55:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138237-20141118145516.patch</filename>
            <type>text/plain</type>
            <size>469500</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OGI3MzhmMWRlZWY4MTllY2U4YmQ0N2VlMTI0NWNiNjE4MTViNzc0Li42ZTgyNGE5N2JiZTkwZmQ5
YmZkNjU5MWQyODIyM2I1NjMwZGZlNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNjYgQEAKKzIwMTQtMTEtMDEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN0YW5kYXJkaXplIGxhbmd1YWdlLXNw
ZWNpZmljIHByb3RvY29sIGdlbmVyYXRvciBmaWxlLCBjbGFzcywgYW5kIG1ldGhvZCBwcmVmaXhl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MjM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2V0dGxl
IG9uIGNwcC9vYmpjL2pzIGZpbGUgcHJlZml4ZXMgYW5kIENwcC9PYmpDL0pTIGNsYXNzIHByZWZp
eGVzIGZvciBnZW5lcmF0b3JzLgorICAgICAgICBNb3ZlIEMrKy1zcGVjaWZpYyBzdGF0aWMgbWV0
aG9kcyBpbnRvIENwcEdlbmVyYXRvciBhbmQgYWRkIGNwcF8gcHJlZml4ZXMgd2hlcmUgcmVsZXZh
bnQuCisgICAgICAgIFNwbGl0IHRoZSB0ZW1wbGF0ZXMgZmlsZSBpbnRvIGxhbmd1YWdlLXNwZWNp
ZmljIHRlbXBsYXRlIGZpbGVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL19faW5pdF9fLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvci5weTogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5LgorICAgICAgICAoQ3BwR2VuZXJh
dG9yKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZSk6
CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAg
ICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAg
KENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIpOgorICAgICAg
ICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRl
cik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2
ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVf
bWVtYmVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25h
bWUpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFt
ZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19w
YXJhbWV0ZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9w
YXJhbWV0ZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRf
cGFyYW1ldGVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0
aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAg
KENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkuCisgICAgICAgIChDcHBHZW5lcmF0b3JUZW1wbGF0ZXMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkuCisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJh
dGVfb3V0cHV0KToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAg
ICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weS4KKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChD
cHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291
dHB1dCk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQuZm9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWlucyk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbnMuQWx0ZXJuYXRlSW5zcGVjdG9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAg
ICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1
Y3Rvcl9mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9k
b21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6Cisg
ICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Lgor
ICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAg
KENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToK
KyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3Rv
X2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToKKyAgICAg
ICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9y
X2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFt
ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weS4KKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMp
OgorICAgICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dl
bmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51
bV9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNf
ZW51bV9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2Vu
dW1fbWVtYmVyLmFwcGx5X2luZGVudGF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3Rf
Zm9yX2VudW1fdHlwZSk6CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToK
KyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAg
KF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAgICAoX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weS4KKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6
CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0
X18pOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91
dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKToKKyAgICAgICAgKENw
cFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVs
ZF9uYW1lcyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29i
amVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5LgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZS5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW4pOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9t
YWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4uZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5LgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVj
bGFyYXRpb25zKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyk6CisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAg
ICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAg
ICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9m
aWxlbmFtZSk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmpDQ29uZmln
dXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3Jf
Y29tbWFuZCk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weS4KKyAgICAg
ICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNDb25m
aWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iakNDb25maWd1
cmF0aW9uSGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpDQ29u
ZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2Jq
Q0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50
ZXJmYWNlX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVu
dGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbi5weS4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAg
ICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVy
YXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMpOgorICAgICAgICAo
T2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2l2
YXJzKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9kZWFsbG9jKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWlu
KToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKToKKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl92YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5LgorICAgICAgICAoYWRkX25ld2xpbmUpOgor
ICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakND
b252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDQ29udmVy
c2lvbkhlbHBlcnNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNDb252
ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9i
akNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAo
T2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25f
ZnVuY3Rpb25zKToKKyAgICAgICAgKE9iakNDb252ZXJzaW9uSGVscGVyc0dlbmVyYXRvci5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJz
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0
ZXIpOgorICAgICAgICAoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yLl9nZW5lcmF0ZV9l
bnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKToKKyAgICAgICAgKE9iakNDb252ZXJzaW9uSGVs
cGVyc0dlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5LgorICAgICAgICAoT2JqQ0Zyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVu
YW1lKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVu
dF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyk6CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50KToKKyAgICAgICAg
KE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVf
ZXZlbnRfc2lnbmF0dXJlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkuCisgICAgICAgIChhZGRfbmV3bGluZSk6
CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgor
ICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlv
bnMpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bXMpOgorICAg
ICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZXMpOgorICAgICAgICAoT2Jq
Q0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9u
KToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9tZW1iZXIpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9lbnVtKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2VudW0uTlNfRU5VTSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90
eXBlX2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9p
bml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyk6CisgICAgICAgIChPYmpDSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkpOgorICAgICAgICAoT2JqQ0hlYWRlckdl
bmVyYXRvci5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMpOgorICAgICAgICAoT2JqQ0hlYWRl
ckdlbmVyYXRvci5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2wpOgorICAgICAgICAo
T2JqQ0hlYWRlckdlbmVyYXRvci5fY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQpOgorICAgICAg
ICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcyk6CisgICAg
ICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNl
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50
ZXJuYWxfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVy
LnB5LgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKE9i
akNJbnRlcm5hbEhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChPYmpDSW50ZXJu
YWxIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKE9iakNJbnRlcm5h
bEhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0ludGVybmFs
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJm
YWNlcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgIChhZGRfbmV3bGluZSk6CisgICAg
ICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAg
KE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAg
ICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmls
ZW5hbWUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlv
bnMpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJl
ZF9tZW1iZXJzKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVy
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAg
ICAgICAgKEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRfc2V0
X21ldGhvZF9mb3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9zdHJpbmdfZm9yX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnByb3Rv
Y29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxf
ZXZlbnRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl90eXBlX3dpdGhfbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdl
bmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQu
CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9w
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGVfbWVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5
cGUpOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9y
X3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgIChBbHRlcm5hdGVJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcik6IERlbGV0ZWQuCisgICAgICAgIChBbHRlcm5hdGVJbnNwZWN0b3Ip
OiBEZWxldGVkLgorICAgICAgICAodm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChIYXNoTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEJ1aWxkZXIpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNJbnNwZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmplY3RpdmVfYy5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9y
VGVtcGxhdGVzKToKKyAgICAgICAgKEFsdGVybmF0ZUluc3BlY3Rvcik6CisgICAgICAgIChPYmpD
SW5zcGVjdG9yKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHk6CisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorCiAyMDE0LTExLTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgVXBkYXRlIHRoZSBWZWN0b3IgQVBJIHRvIGRlYWwgd2l0aCB1bnNpZ25lZCB0eXBl
cyBpbnN0ZWFkIG9mIHNpemVfdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDgyODdlN2VmMDQ1MzBkNzllMTVmZmQxNjAxZmNmYWI3YmFiYTEzMTYuLmZhYmY4ODdiMDg0YzQ3
MTIxNDJiYWVkZjBlMjIzZWQ4ZjE0YjczNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTk5MiwxMyArOTkyLDE1IEBAIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0CiAKIHNl
dChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUUwogICAgICR7SmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJ
Un0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5Ci0gICAgJHtKYXZhU2NyaXB0
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQotICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNf
RElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQotICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Ci0gICAgJHtKYXZhU2NyaXB0Q29y
ZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQotICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1ND
UklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQotICAg
ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRl
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9J
TlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQorICAgICR7SmF2
YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfY29tbWFuZHMucHkKKyAgICAke0phdmFTY3Jp
cHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1ND
UklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9j
cHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlw
dENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkKICAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9n
ZW5lcmF0b3IucHkKICAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZmExYzIwZTkwOWZiMjg2YjdiNDgxNmNjMDEy
YTJmNzRmNTJlMDg3ZS4uZGM4MDk2YzA0NzgxYTZjMGZmYTNhZGYwNDg4ODI3OWE2MjU3MWZmZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE0NCwxMyAr
MTQ0LDE1IEBAIGVuZGlmCiAKIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAkkKEph
dmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IFwKLQkk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tl
bmRfY29tbWFuZHMucHkgXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCi0JJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAot
CSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCi0JJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIu
cHkgXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgXAor
CSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBc
CisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBcCisJJChK
YXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNr
ZW5kX2NvbW1hbmRzLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgXAogCSQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagppbmRleCAxMjFkNzczMTk0OTlkNmYwNGFlNWJjOGIzYzgwZDc1OWRj
ZjcyYTc5Li45ZGY3NTJhOWQwYTZiODQyMjIyYTA5YTg0NGVmMzEzNmEwN2MyYjBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTE2NTgsMTMgKzE2NTgsMTUgQEAK
ICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcQnl0ZWNvZGVMaXN0Lmpzb24iIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xj
b2RlZ2VuXGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IiAvPgotICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weSIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2Vu
XGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IiAvPgorICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cY3BwX2dlbmVyYXRvci5weSIg
Lz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGNwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxn
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IiAvPgorICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3Bw
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IiAv
PgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IiAvPgorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weSIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xj
b2RlZ2VuXGdlbmVyYXRvci5weSIgLz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
c2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkiIC8+CiAgICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxtb2RlbHMucHkiIC8+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGI3YzRl
MDkzNWJjODBjZDA2NjJkYjQ0Njc1YTg1N2M1NGQwMTFhNS4uNTJmMGYyMDZkZjA3ZTNmM2ZlZmFm
ODdiNDVmYzM2MzE0MDgyYTI2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNDE5NywyNSArNDE5NywzMSBAQCDvu788P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxzY3JpcHRzXGNvZGVnZW5cX19pbml0X18ucHkiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0
b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5k
cy5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxj
cHBfZ2VuZXJhdG9yLnB5Ij4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdl
bjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
c2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkiPgor
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xjb2Rl
Z2VuPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2Vu
XGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Ij4KICAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuPC9G
aWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3Jp
cHRzXGNvZGVnZW5cZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkiPgogICAgICAgPEZpbHRlcj5p
bnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0
c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5Ij4KICAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPgog
ICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2Rl
Z2VuXGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Ij4KKyAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkiPgorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xj
b2RlZ2VuPC9GaWx0ZXI+CisgICAgPC9Ob25lPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5Ij4KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmls
dGVyPgorICAgIDwvTm9uZT4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0
c1xjb2RlZ2VuXGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkiPgogICAgICAgPEZpbHRl
cj5pbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgogICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdG9yLnB5Ij4K
QEAgLTQzNTAsNCArNDM1Niw0IEBAIO+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+CiAgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgogICAgIDwvTUFTTT4KICAgPC9JdGVt
R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZDIyYTJiODc2NWExYzY2OTg2NjU2
ZjVmNzlhOGM2NzBhOGJlMWViLi5jZThmMzdiZDZlNGNiZGQxNDA0ZmRkZDdlYjJhOWU0MTQzOWNl
ZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE4OCwxOCArMTE4OCwxNyBA
QAogCQlBNUVBNzBFNzE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NUVBNzBFNDE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVF
QTcwRTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVF
QTcwRTUxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNs
aWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRTYx
OUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcwRUMxOUY1QjNF
QTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcw
RUExOUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUE1RUE3MEVDMTlGNUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVf
Y3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1RUE3MEVFMTlGNUI1QzQwMDk4
RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBFRDE5RjVCNUM0MDA5OEY1RUMgLyog
SlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTAzMTlGNkRFNkYwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUYxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcx
MDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1RUE3MEYwMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMDUxOUY2REU3NDAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjExOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3
MTA2MTlGNkRFNzYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMDcxOUY2REU3ODAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMDgxOUY2REU3QTAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBGNDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNUVBNzEwOTE5RjZERTdDMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjUxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29i
amVjdGl2ZV9jX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVj
dGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBNUVBNzEwQjE5RjZERTgwMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNzE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMEMxOUY2REU4MjAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjgxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRl
X29iamVjdGl2ZV9jLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUE1RUE3MTAzMTlGNkRFNkYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYwMTlGNkRFNUEwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEw
NTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5w
eSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYx
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3
MTA2MTlGNkRFNzYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVt
ZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9u
X2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUE1RUE3MTA3MTlGNkRFNzgwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Nv
bnZlcnNpb25faGVscGVycy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbnZl
cnNpb25faGVscGVycy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlBNUVBNzEwODE5RjZERTdBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjQxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVy
YXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwOTE5RjZERTdD
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMEExOUY2REU3RTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNf
aW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfaW50ZXJu
YWxfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUE1RUE3MTBDMTlGNkRFODIwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY4MTlGNkRF
NUEwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNUVBNzEwRTE5RjZERjgxMDA5OEY1RUMgLyogSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzEwRDE5RjZERjgxMDA5OEY1RUMgLyogSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8q
IFNjcmlwdEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNUZEMDA2NTE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmNw
cCAqLzsgfTsKIAkJQTVGRDAwNjgxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVGRDAwNjYx
ODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTY2LDE2ICsxNTY1LDMzIEBACiAJCUMy
RkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMy
NEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMw
NjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJl
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUM0NzAzQ0MwMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1h
bmRzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3
MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzQ3MDNDQ0Yx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNDE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDNDcwM0NE
MDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDNDcwM0NEMTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNDcwM0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQzQ3MDNDRDIxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzQ3
MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0b3IucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJF
QSAvKiBtb2RlbHMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQzQ5RkU0QUIxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5
cGVzX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM0OUZFNEE3MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQzQ5RkU0QUMxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzQ5RkU0QTgxOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVz
X2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUM0RjRCNkQ5MUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzRGNEI2Q0YxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
ICovOyB9OworCQlDNEY0QjZEQTFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2RDAx
QTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgKi87IH07CisJCUM0RjRCNkUxMUEw
NUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NEY0QjZENzFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weSAqLzsgfTsKKwkJQzRGNEI2RTIxQTA1Qzc2RjAwNUNBQjc2IC8qIG9i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2RDgxQTA1Qzc2RjAwNUNBQjc2IC8qIG9iamNfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weSAqLzsgfTsKKwkJQzRGNEI2RTMxQTA1QzgxMDAwNUNBQjc2IC8qIF9f
aW5pdF9fLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNDcwM0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi87IH07CisJCUM0RjRC
NkU0MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJu
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IH07CisJCUM0RjRCNkU2MUEwNUM4
MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVG
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgKi87IH07CisJCUM0RjRCNkU3MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjAxOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyB9
OworCQlDNEY0QjZFODFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJh
dGlvbl9oZWFkZXIucHkgKi87IH07CisJCUM0RjRCNkU5MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5l
cmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYyMTlGNkRFNUEwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi87IH07
CisJCUM0RjRCNkVBMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25f
aGVscGVycy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTVFQTcwRjMxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9o
ZWxwZXJzLnB5ICovOyB9OworCQlDNEY0QjZFQjFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVf
b2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNDE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
ICovOyB9OworCQlDNEY0QjZFQzFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19oZWFk
ZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
RUE3MEY1MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRlci5weSAqLzsgfTsK
KwkJQzRGNEI2RUQxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVh
ZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NUVBNzBGNjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIu
cHkgKi87IH07CisJCUM0RjRCNkVFMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgfTsK
KwkJQzRGNEI2RUYxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRvci5weSBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0IxOTI4NDRDQzAwMTNG
QkVBIC8qIGdlbmVyYXRvci5weSAqLzsgfTsKKwkJQzRGNEI2RjAxQTA1QzgxMTAwNUNBQjc2IC8q
IG1vZGVscy5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLzsgfTsKKwkJQzRGNEI2
RjExQTA1QzgxMTAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yLnB5IGluIFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGODE5RjZERTVBMDA5OEY1RUMg
Lyogb2JqY19nZW5lcmF0b3IucHkgKi87IH07CisJCUM0RjRCNkYyMUEwNUM4QUMwMDVDQUI3NiAv
KiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2Vu
ZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSAqLzsgfTsKKwkJQzRGNEI2RjMxQTA1Qzk0NDAw
NUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2Q0YxQTA1Qzc2RjAwNUNBQjc2IC8qIGNw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovOyB9OworCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FC
NzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0RjRCNkQwMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5
ICovOyB9OworCQlDNEY0QjZGNTFBMDVDOTg0MDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ3MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9v
YmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovOyB9OworCQlDNEY0QjZGNjFB
MDVDOTg0MDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2RDgxQTA1Qzc2RjAwNUNB
Qjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgfTsKIAkJREMwMDAzOTMxOUQ4
QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAwMzkwMTlEOEJFNkYwMDAyM0VC
MCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREMwMDAzOTgxOURCQTcwNjAwMDIzRUIwIC8qIERG
R1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERDMDAwMzk2MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNp
bmtpbmdQaGFzZS5jcHAgKi87IH07CiAJCURDMDAwMzk5MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQ
dXRMb2NhbFNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gREMwMDAzOTcxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2lu
Z1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTI4NzEsMTggKzI4ODcsMTcgQEAKIAkJQTVFQTcwRTQxOUY1QjEwMTAwOThGNUVDIC8qIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTVFQTcwRTUxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTVFQTcwRTYxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3
MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVy
YXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUVBNzBFRDE5
RjVCNUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9yU3VwcG9ydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTVFQTcwRjAxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhv
bjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjExOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfY29uZmlndXJhdGlvbl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUE1RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1
cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBw
YXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5w
eTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjMxOUY2REU1QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNp
b25faGVscGVycy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjQxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBNUVBNzBGNjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNUVBNzBGNzE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1l
bnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjgxOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEYwMTlGNkRFNUEwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hl
YWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29i
amNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE1RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25f
aW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBn
ZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2NvbnZlcnNpb25faGVscGVycy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsg
cGF0aCA9IGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBNUVBNzBGNDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGNTE5
RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2hlYWRlci5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRl
X29iamNfaW50ZXJuYWxfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBw
YXRoID0gZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IG9iamNfZ2VuZXJhdG9yLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUVBNzEwRDE5RjZERjgxMDA5OEY1RUMg
LyogSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUZEMDA2NTE4OUFGRTlDMDA2MzMyMzEg
LyogU2NyaXB0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcmlwdEFyZ3VtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
RkQwMDY2MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0QXJndW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zMjQzLDE2ICszMjU4LDIwIEBACiAJCUMyRkUxOEEzMTZCQUVDNDAwMEFG
MzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
NDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IF9faW5pdF9fLnB5OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2Vu
ZF9jb21tYW5kcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVy
YXRlX2JhY2tlbmRfY29tbWFuZHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0
NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzMxOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsg
cGF0aCA9IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0b3IucHk7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBtb2RlbHMucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM0OUZFNEE3MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGgg
PSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUM0OUZFNEE4MTlBQUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0
aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDNEY0QjZDRjFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBj
cHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzRGNEI2RDAxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBjcHBfZ2VuZXJhdG9yLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDNEY0QjZEMTFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDIxQTA1Qzc2RjAwNUNBQjc2IC8qIGdl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEY0
QjZEMzFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVf
Y3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNEY0QjZENDFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDUxQTA1Qzc2RjAwNUNB
Qjc2IC8qIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVh
ZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEY0QjZENjFBMDVDNzZGMDA1
Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NEY0QjZENzFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQ4MUEwNUM3NkYwMDVDQUI3NiAvKiBvYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBv
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNv
bnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJz
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDMDAwMzkwMTlEOEJFNkYwMDAy
M0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDsgcGF0aCA9IGRmZy9ERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgzLDI3ICs1MzAyLDMwIEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLywKLQkJCQlBNUVB
NzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgKi8sCi0JCQkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi8sCi0JCQkJQzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCi0JCQkJQzQ3MDND
QzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLywKLQkJCQlDNDcwM0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCi0JCQkJQzQ3MDNDQzcxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki8sCi0JCQkJQTVFQTcwRUYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9j
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCi0JCQkJQTVFQTcwRjAxOUY2REU1QTAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLywKLQkJCQlBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgKi8sCi0JCQkJQTVFQTcwRjIxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVt
ZW50YXRpb24ucHkgKi8sCi0JCQkJQTVFQTcwRjMxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRl
X29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weSAqLywKLQkJCQlBNUVBNzBGNDE5RjZE
RTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLywKLQkJCQlBNUVBNzBGNTE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5ICovLAotCQkJCUE1RUE3MEY2MTlGNkRFNUEwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgKi8sCi0JCQkJ
QTVFQTcwRjcxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEY4MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmplY3RpdmVfYy5weSAqLywKLQkJCQlDNDlGRTRBNzE5QUFDODNFMDBGNDBDRTkgLyog
Z2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovLAotCQkJCUM0OUZFNEE4MTlBQUM4
M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAq
LywKKwkJCQlDNEY0QjZDRjFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkgKi8sCisJCQkJQzRGNEI2RDAxQTA1Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3Iu
cHkgKi8sCisJCQkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNEY0QjZEMTFBMDVD
NzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Ki8sCisJCQkJQzRGNEI2RDIxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzRGNEI2RDMxQTA1Qzc2RjAw
NUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywK
KwkJCQlDNEY0QjZENDFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzRGNEI2RDUxQTA1Qzc2RjAwNUNB
Qjc2IC8qIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgKi8sCisJCQkJQzRG
NEI2RDYxQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weSAqLywKKwkJCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfanNfYmFja2VuZF9jb21tYW5kcy5weSAqLywKKwkJCQlBNUVBNzBFRjE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAorCQkJ
CUE1RUE3MEYwMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weSAqLywKKwkJCQlBNUVBNzBG
MjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAorCQkJCUE1RUE3MEYzMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2NvbnZlcnNpb25faGVscGVycy5weSAqLywKKwkJCQlBNUVBNzBGNDE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
ICovLAorCQkJCUE1RUE3MEY1MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRl
ci5weSAqLywKKwkJCQlBNUVBNzBGNjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19p
bnRlcm5hbF9oZWFkZXIucHkgKi8sCisJCQkJQzRGNEI2RDcxQTA1Qzc2RjAwNUNBQjc2IC8qIGdl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8sCiAJCQkJQzQ3
MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8sCiAJCQkJ
QzQ3MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLywKIAkJCQlDNDcwM0ND
QzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovLAorCQkJCUM0RjRCNkQ4MUEwNUM3NkYw
MDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8sCisJCQkJQTVFQTcwRjgx
OUY2REU1QTAwOThGNUVDIC8qIG9iamNfZ2VuZXJhdG9yLnB5ICovLAogCQkJKTsKIAkJCXBhdGgg
PSBjb2RlZ2VuOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUzNTMsMTAgKzUzNzUs
OCBAQAogCQkJCUExQTAwOUMxMTgzMUEyNkUwMENGODcxMSAvKiBBUk02NEFzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8qIEluc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzQ5
RkU0QUIxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eSBpbiBIZWFkZXJzICovLAotCQkJCUE1RUE3MEVDMTlGNUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAor
CQkJCUE1RUE3MEVDMTlGNUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQk2QUQyQ0I0RDE5
QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQzQ5RkU0QUMxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNjU4RDNBNTYxOTYzODI2ODAwM0M0
NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBRDJFREZCMTk3OTlF
MzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4
M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhl
YWRlcnMgKi8sCkBAIC01MzY3LDI1ICs1Mzg3LDIwIEBACiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAw
NjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5NDE4NTY5
NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhl
YWRlcnMgKi8sCi0JCQkJQzQ3MDNDRDIxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVB
NzEwNDE5RjZERTcyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQzQ3MDNDRDExOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4g
SGVhZGVycyAqLywKLQkJCQlBNUVBNzEwNTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVB
NzEwNjE5RjZERTc2MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlv
bl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1RUE3MTA3MTlGNkRFNzgw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4g
SGVhZGVycyAqLywKLQkJCQlBNUVBNzEwODE5RjZERTdBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJz
ICovLAotCQkJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVf
Y19pbnRlcm5hbF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEwQjE5RjZERTgw
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEwQzE5RjZERTgyMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqZWN0aXZlX2MucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEwOTE5RjZERTdDMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJ
QTVFQTcxMDUxOUY2REU3NDAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9o
ZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwNjE5RjZERTc2MDA5OEY1RUMgLyog
Z2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMg
Ki8sCisJCQkJQTVFQTcxMDcxOUY2REU3ODAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29udmVy
c2lvbl9oZWxwZXJzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDgxOUY2REU3QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTBDMTlG
NkRFODIwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1
RUE3MTA5MTlGNkRFN0MwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBpbiBIZWFk
ZXJzICovLAogCQkJCUM0NzAzQ0Q2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4g
SGVhZGVycyAqLywKLQkJCQlDNDcwM0NDRjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0MwMTky
ODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkg
aW4gSGVhZGVycyAqLywKLQkJCQlDNDcwM0NEMDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJ
QzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkg
aW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
anNfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q3MTkyODQ0
Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLywKLQkJCQlBNUVBNzEwMzE5RjZE
RTZGMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTAzMTlGNkRFNkYwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywK
IAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZp
dHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkND
IC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjEwNyw2ICs2
MTIyLDEwIEBACiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNz
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY4MkZCMzE5QkNCMzY0MDBGQTNCQUQgLyogREZH
U1NBQ2FsY3VsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2
N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzRGNEI2RjUxQTA1Qzk4NDAwNUNB
Qjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4g
SGVhZGVycyAqLywKKwkJCQlDNEY0QjZGNjFBMDVDOTg0MDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNB
Qjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzRG
NEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5z
cGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTY0MjIsNyArNjQ0MSwyNiBAQAog
CQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlDNEY0QjZGMjFBMDVDOEFDMDA1Q0FCNzYgLyog
Z2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJQTUz
RjFBQzAxOEM5MEY4RjAwNzJFQjZEIC8qIGZyYW1ld29yay5zYiBpbiBSZXNvdXJjZXMgKi8sCisJ
CQkJQzRGNEI2RTMxQTA1QzgxMDAwNUNBQjc2IC8qIF9faW5pdF9fLnB5IGluIFJlc291cmNlcyAq
LywKKwkJCQlDNEY0QjZEOTFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkRBMUEwNUM3NkYwMDVDQUI3NiAvKiBj
cHBfZ2VuZXJhdG9yLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFNDFBMDVDODExMDA1
Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFNjFBMDVDODExMDA1Q0FCNzYgLyogZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLywK
KwkJCQlDNEY0QjZFNzFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkU4
MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5
IGluIFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFOTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJh
dGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLywK
KwkJCQlDNEY0QjZFQTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19jb252ZXJzaW9u
X2hlbHBlcnMucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkVCMUEwNUM4MTEwMDVDQUI3
NiAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkVDMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0
ZV9vYmpjX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RUQxQTA1QzgxMTAw
NUNBQjc2IC8qIGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5IGluIFJlc291cmNlcyAq
LywKKwkJCQlDNEY0QjZFMTFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RUUx
QTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICov
LAorCQkJCUM0RjRCNkVGMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0b3IucHkgaW4gUmVzb3Vy
Y2VzICovLAorCQkJCUM0RjRCNkYwMUEwNUM4MTEwMDVDQUI3NiAvKiBtb2RlbHMucHkgaW4gUmVz
b3VyY2VzICovLAorCQkJCUM0RjRCNkUyMUEwNUM3NkYwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkYxMUEwNUM4MTEwMDVD
QUI3NiAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5p
dF9fLnB5CmluZGV4IGU5YzY3YjVmZDRkY2E5ZjMzMmE5YWFlMGYyYmQwMDYxYTlkM2UzNjQuLjYw
NzdmYTk3YTk3ZjhjMjE3Y2IwYWI2MzcwYTg1NjRmNmE0OWM2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5p
dF9fLnB5CkBAIC0yLDIxICsyLDIzIEBACiAKIGZyb20gbW9kZWxzIGltcG9ydCAqCiBmcm9tIGdl
bmVyYXRvciBpbXBvcnQgKgorZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIG9iamNf
Z2VuZXJhdG9yIGltcG9ydCAqCiAKLWZyb20gZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcyBp
bXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAq
Ci1mcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgotZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJv
bSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1m
cm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0
ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25f
aGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25f
aW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVy
c2lvbl9oZWxwZXJzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFs
X2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIgaW1w
b3J0ICoKLWZyb20gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
IGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
IGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIg
aW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9u
IGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMgaW1wb3J0ICoKK2Zy
b20gZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9t
IGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
Citmcm9tIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20g
Z2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9t
IGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzIGltcG9ydCAqCitmcm9tIGdlbmVyYXRl
X29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBn
ZW5lcmF0ZV9vYmpjX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2ludGVybmFs
X2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hODNlMmZhNjk4MTRkN2Y0ZjA5M2NiNDg2MTA0MDU0M2IwNzY2MTYyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Y3BwX2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDMwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQorCitmcm9tIGdlbmVyYXRv
ciBpbXBvcnQgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVj
dFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCisKK2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCitfUFJJTUlUSVZFX1RPX0NQUF9OQU1F
X01BUCA9IHsKKyAgICAnYm9vbGVhbic6ICdib29sJywKKyAgICAnaW50ZWdlcic6ICdpbnQnLAor
ICAgICdudW1iZXInOiAnZG91YmxlJywKKyAgICAnc3RyaW5nJzogJ1N0cmluZycsCisgICAgJ29i
amVjdCc6ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcsCisgICAgJ2FueSc6ICdJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlJworfQorCisjIFRoaXMgY2xhc3MgY29udGFpbnMgZXh0cmEgc3Rh
dGljIG1ldGhvZHMgdXNlZCBmb3IgZ2VuZXJhdGlvbiwgYnV0IGRvZXMKKyMgbm90IHBhcnRpY2lw
YXRlIGluIGFueSBpbmhlcml0YW5jZSBoaWVyYXJjaHkuIEZpbGUgZ2VuZXJhdG9ycyBzaG91bGQK
KyMgZXh0ZW5kIHRoZSBnZW5lcmljICJHZW5lcmF0b3IiIGNsYXNzIGluc3RlYWQuCitjbGFzcyBD
cHBHZW5lcmF0b3I6CisKKyAgICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91
dGluZXMuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfZ2V0dGVyX21ldGhvZF9mb3Jf
dHlwZShfdHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBl
LnJhd19uYW1lKCkgaXMgJ2ludGVnZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50
ZWdlcicKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnbnVtYmVyJzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJsZScKKyAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSBpcyAnYW55JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldFZhbHVlJwor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0
KF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRU
eXBlKToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2Rf
Zm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJf
bWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBjcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRP
YmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gJ3NldEFycmF5JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ2ludGVnZXIn
OgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicKKyAgICAgICAgICAgIGVsaWYg
X3R5cGUucmF3X25hbWUoKSBpcyAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3Nl
dERvdWJsZScKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnYW55JzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVy
biBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90
eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAg
ICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnBy
aW1pdGl2ZV90eXBlKQorCisgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBmb3Ig
dmFyaW91cyBzaXR1YXRpb25zLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6CisgICAgICAgICAgICByZXR1
cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCAoT2JqZWN0VHlwZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4o
KS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2
ZVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJp
bWl0aXZlX3R5cGUoX3R5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF9wcm90
b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9u
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICc6Oicu
am9pbihbQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNs
YXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToK
KyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlw
ZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmlt
aXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgorCisgICAgICAgIHNpZ2ls
ID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJworICAgICAgICAjIFRoaXMg
aGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVydGll
cy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicgKyBzaWdpbAorICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4nICsgc2lnaWwKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAl
cyonICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ3N0
cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAg
ICAgIHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcl90eXBlIgor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxf
ZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6CisgICAgICAgIHJldHVy
biBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKG1lbWJlci50eXBlLCBt
ZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFtZSwgaXNfb3B0aW9uYWwp
OgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgaXNfb3B0
aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgYnVpbGRl
cl90eXBlCisgICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFt
ZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUp
CisgICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgYnVpbGRl
cl90eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVy
X3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2Jq
ZWN0J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PicKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ2FueSddOgorICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPicKKyAgICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgY3BwX25hbWUKKyAgICAgICAgICAg
IGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5cGVfbmFtZSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSAnSW5zcGVjdG9yOjpQcm90
b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5y
YXdfbmFtZSgpKQorCisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJyVzKicgJSBlbnVtX3R5cGVfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIp
OgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChP
YmplY3RUeXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYn
ICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9u
YW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1lCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGlmIF90
eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3RvciVzQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWlu
X25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMq
JyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQor
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9ybWFsIG91dCBwYXJhbWV0ZXIg
dHlwZS4iKQorCisgICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNsaWdodGx5IGRpZmZlcmVudCBm
cm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZpZWQuCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0
ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZh
bGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwg
QXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIENwcEdl
bmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENw
cEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAgICAgICAgICAg
ZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVf
dHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBb
J3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1l
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0
eXBlLiIpCisKKyAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1aWxkZXIgdHlwZXMsIGJl
Y2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKKyAgICAjICJvcGVuIHR5cGVzIiB0aGF0IGFyZSBt
YW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0cy4KKworICAgICMgRklY
TUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNob3VsZCBu
ZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAg
X3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxs
IHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCisK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICBy
ZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVy
biAiUmVmUHRyPCVzPiIgJSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBl
KF90eXBlKQorICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlcidd
OgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX3N0
YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIu
dHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBl
KSk6CisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8JXM+IiAlIGJ1aWxkZXJfdHlwZQorICAgICAgICAgICAgcmV0dXJuICcl
cycgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8JXM+IiAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Cisg
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlBy
b3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBl
LnJhd19uYW1lKCkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF9hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToK
KworICAgICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZScgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBl
LmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBF
bnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAg
cmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUg
Q3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJl
ciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorCisgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSk6CisgICAgICAgIHJldHVybiBfUFJJ
TUlUSVZFX1RPX0NQUF9OQU1FX01BUC5nZXQoX3R5cGUucmF3X25hbWUoKSkKKworICAgICMgRGVj
aWRlIHdoZXRoZXIgY2VydGFpbiBoZWxwZXJzIGFyZSBuZWNlc3NhcnkgaW4gYSBzaXR1YXRpb24u
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVy
bl90eXBlKF90eXBlKToKKyAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJy
YXlUeXBlLCBPYmplY3RUeXBlKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxk
X3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gaXNp
bnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90
eXBlLCAoUHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmpl
Y3QiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMDQ4ODQyYmZjNWI2Y2Q4MmJkNTQ4OTY3NjMyODc3YmQwOWVhZTEyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTAsMCArMSwyNzYgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIyBHZW5lcmF0b3IgdGVtcGxhdGVzLCB3aGljaCBjYW4gYmUgZmlsbGVk
IHdpdGggc3RyaW5nLlRlbXBsYXRlLgorIyBGb2xsb3dpbmcgYXJlIGNsYXNzZXMgdGhhdCBmaWxs
IHRoZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgdHlwZWNoZWNrZWQgbW9kZWwuCisKK2NsYXNzIENwcEdl
bmVyYXRvclRlbXBsYXRlczoKKworICAgIEhlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiI2lmbmRl
ZiAke2hlYWRlckd1YXJkU3RyaW5nfQorI2RlZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworJHtpbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKyR7dHlwZWRlZnN9IiIiKQorCisgICAgSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIi
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
CisjZW5kaWYgLy8gIWRlZmluZWQoJHtoZWFkZXJHdWFyZFN0cmluZ30pIiIiKQorCisgICAgSW1w
bGVtZW50YXRpb25QcmVsdWRlID0gKAorICAgICIiIiNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICR7cHJpbWFyeUluY2x1ZGV9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCiske3NlY29u
ZGFyeUluY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCisKKyAgICBJbXBsZW1l
bnRhdGlvblBvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIEFsdGVybmF0ZURpc3BhdGNo
ZXJzSGVhZGVyUHJlbHVkZSA9ICgKKyAgICAiIiIjaWZuZGVmICR7aGVhZGVyR3VhcmRTdHJpbmd9
CisjZGVmaW5lICR7aGVhZGVyR3VhcmRTdHJpbmd9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworJHtpbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IGRpc3Bh
dGNoZXI7IH0KKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKK307CisiIiIpCisKKyAgICBBbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBvc3RsdWRl
ID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNlbmRpZiAvLyAhZGVmaW5lZCgk
e2hlYWRlckd1YXJkU3RyaW5nfSkiIiIpCisKKyAgICBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiJjbGFz
cyBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgOiBwdWJs
aWMgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorfTsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIke2NsYXNzQW5k
RXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgeworcHVibGljOgorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
K307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVj
bGFyYXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyR7Y29tbWFuZERlY2xh
cmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXI7Cisj
ZW5kaWYKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmRE
ZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxi
YWNrTmFtZX0gOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgICR7Y2FsbGJhY2tOYW1lfShQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOwor
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOworICAgIH07CisgICAg
dmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKKwor
ICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKKyAgICAi
IiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworJHtkaXNwYXRjaENhc2VzfQorICAgIGVsc2UK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmco
J1xcJycsICIke2RvbWFpbk5hbWV9IiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7
Cit9IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNo
ID0gKAorIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICB0eXBlZGVmIHZvaWQgKElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBE
RVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAo
KSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29u
c3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7Cisg
ICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7
Ciske2Rpc3BhdGNoQ2FzZXN9CisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBX
VEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5u
YW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywg
Q2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKKyAg
ICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1xcJycsICIke2RvbWFpbk5hbWV9Iiwg
Jy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30i
IiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCisgICAgIiIiUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAg
ICAsIG1fYWdlbnQoYWdlbnQpCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgLCBtX2FsdGVybmF0ZURpc3BhdGNoZXIobnVsbHB0cikKKyNlbmRpZgorewor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJ
SUxpdGVyYWwoIiR7ZG9tYWluTmFtZX0iKSwgdGhpcyk7Cit9IiIiKQorCisgICAgQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAorIiIiICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
bWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
Ciske2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgXCclc1wnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIke2Rv
bWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9Iik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25Bc3luY0NvbW1hbmQgPSAoCisiIiJJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwg
aW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nl
c3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ciske291dFBhcmFtZXRlckFz
c2lnbm1lbnRzfQorICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7
Cit9IiIiKQorCisgICAgRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0
aW9uID0gKAorIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
RnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
RnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9Ciske2V2ZW50RGVjbGFyYXRpb25zfQorcHJpdmF0ZToKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworfTsiIiIp
CisKKyAgICBQcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblByZWx1ZGUgPSAoCisiIiIg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisK
KyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPC8qJHtvYmplY3RUeXBlfSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgJHtvYmpl
Y3RUeXBlfTsKKyAgICBwdWJsaWM6IiIiKQorCisgICAgUHJvdG9jb2xPYmplY3RCdWlsZGVyRGVj
bGFyYXRpb25Qb3N0bHVkZSA9ICgKKyIiIgorICAgICAgICBvcGVyYXRvciBSZWZQdHI8JHtvYmpl
Y3RUeXBlfT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjwke29iamVjdFR5cGV9Pio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0K
KworICAgICAgICBQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPCR7b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxlYXNl
KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ciske2NvbnN0cnVjdG9yRXhhbXBsZX0KKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0K
KyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRy
YWl0czsiIiIpCisKKyAgICBQcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0ID0gKAorIiIiUGFzc1Jl
ZlB0cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1l
Q2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0OworICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOworICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KHJlc3VsdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworfQorIiIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYWx0ZXJuYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTc2YTIwYzQ1NjRjZDI5
OGE4NmQ1YTJhOTJiNjkzNGQzYzJlZDllYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQor
KysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0j
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotaW1wb3J0IHJlCi1mcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgotICAgICAgICByZXR1cm4gJ0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oJwotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVy
cyA9IFsKLSAgICAgICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIicsCi0gICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+JywKLSAg
ICAgICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2hlYWRlckd1
YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAot
ICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBm
b3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpKQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9zdGx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAnXG5c
bicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlv
bnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1h
bmRzOgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlv
bnMgPSBbXQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAg
ICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9k
ZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKLQotICAgICAgICBoYW5kbGVyX2FyZ3Mg
PSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAg
ICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRp
b25zKSwKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNs
YXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCi0gICAgICAgIGZvciBfcGFyYW1l
dGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoJyVzIGluXyVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9m
b3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY29tbWFuZE5hbWUn
OiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5q
b2luKHBhcmFtZXRlcnMpLAotICAgICAgICB9Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZp
cnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFu
ZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFj
a2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IGE4Y2NlNTU0YzQxNWYwZDE2Mjk1NTBiN2NlYzBiZDVlMGQ1MjRkNDYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21t
YW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9t
IGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0
ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKLQotCi1jbGFzcyBCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAg
ICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAg
IGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzIgotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0g
ICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICBk
b21haW5fZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2Uo
ZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCi0g
ICAgICAgICAgICByZXR1cm4gbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwIG9yIGxlbihkb21haW4u
ZXZlbnRzKSA+IDAgb3IgbGVuKGRvbWFpbl9lbnVtX3R5cGVzKSA+IDAKLQotICAgICAgICByZXR1
cm4gZmlsdGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAg
c2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNl
bnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5nZW5lcmF0ZV9kb21haW4s
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2lu
KHNlY3Rpb25zKQotCi0gICAgZGVmIGdlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluJzog
ZG9tYWluLmRvbWFpbl9uYW1lCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcy5hcHBlbmQoJy8v
ICUoZG9tYWluKXMuJyAlIGFyZ3MpCi0KLSAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55
KG1hcChsYW1iZGEgY29tbWFuZDogY29tbWFuZC5pc19hc3luYywgZG9tYWluLmNvbW1hbmRzKSkK
LSAgICAgICAgaWYgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRv
bWFpbilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUgYXJncykKLQotICAg
ICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgotICAgICAg
ICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAgICAgZW51
bV9hcmdzID0gewotICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9u
YW1lLAotICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiBkZWNsYXJhdGlvbi50eXBlX25h
bWUsCi0gICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyIn
ICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBl
bnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVz
KCldKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51bU5hbWUpcyIsIHsl
KGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCi0KLSAgICAgICAgICAgIGRlZiBpc19hbm9ueW1v
dXNfZW51bV9tZW1iZXIodHlwZV9tZW1iZXIpOgotICAgICAgICAgICAgICAgIHJldHVybiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5p
c19hbm9ueW1vdXMKLQotICAgICAgICAgICAgZm9yIF9tZW1iZXIgaW4gZmlsdGVyKGlzX2Fub255
bW91c19lbnVtX21lbWJlciwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKToKLSAgICAgICAgICAg
ICAgICBlbnVtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4u
ZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVzJyAlIChk
ZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QoX21lbWJlci5tZW1iZXJfbmFtZSkpLAotICAg
ICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5l
cmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1
ZSkgZm9yIGVudW1fdmFsdWUgaW4gX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCldKQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30p
OycgJSBlbnVtX2FyZ3MpCi0KLSAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX3BhcmFtKHBh
cmFtKToKLSAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHBhcmFtLnR5cGUsIEVudW1UeXBl
KSBhbmQgcGFyYW0udHlwZS5pc19hbm9ueW1vdXMKLQotICAgICAgICBmb3IgZXZlbnQgaW4gZG9t
YWluLmV2ZW50czoKLSAgICAgICAgICAgIGZvciBwYXJhbSBpbiBmaWx0ZXIoaXNfYW5vbnltb3Vz
X2VudW1fcGFyYW0sIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMpOgotICAgICAgICAgICAgICAgIGVu
dW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5f
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogJyVzJXMnICUgKHVjZmlyc3Qo
ZXZlbnQuZXZlbnRfbmFtZSksIHVjZmlyc3QocGFyYW0ucGFyYW1ldGVyX25hbWUpKSwKLSAgICAg
ICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJh
dG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUp
IGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtLnR5cGUuZW51bV92YWx1ZXMoKV0pCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAl
IGVudW1fYXJncykKLQotICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKLSAgICAgICAgICAgICAg
ICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICdldmVudE5h
bWUnOiBldmVudC5ldmVudF9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpv
aW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2
ZW50LmV2ZW50X3BhcmFtZXRlcnNdKQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUoZG9tYWluKXMuJShldmVu
dE5hbWUpcyIsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2FyZ3MpCi0KLSAgICAgICAgZm9yIGNv
bW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3BhcmFt
ZXRlcl9vYmplY3QocGFyYW1ldGVyKToKLSAgICAgICAgICAgICAgICBvcHRpb25hbF9zdHJpbmcg
PSAidHJ1ZSIgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgImZhbHNlIgotICAgICAgICAg
ICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJuYW1lIjog
IiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgcGFpcnMu
YXBwZW5kKCcidHlwZSI6ICIlcyInICUgR2VuZXJhdG9yLmpzX25hbWVfZm9yX3BhcmFtZXRlcl90
eXBlKHBhcmFtZXRlci50eXBlKSkKLSAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJvcHRp
b25hbCI6ICVzJyAlIG9wdGlvbmFsX3N0cmluZykKLSAgICAgICAgICAgICAgICByZXR1cm4gInsl
c30iICUgIiwgIi5qb2luKHBhaXJzKQotCi0gICAgICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICAg
ICAnY2FsbFBhcmFtcyc6ICIsICIuam9pbihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJh
bWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKLSAgICAg
ICAgICAgICAgICAncmV0dXJuUGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJz
XSksCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCIlKGRvbWFpbilzLiUoY29tbWFuZE5hbWUpcyIsIFslKGNh
bGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykKLQotICAg
ICAgICBpZiBkb21haW4uY29tbWFuZHMgb3IgZG9tYWluLmV2ZW50czoKLSAgICAgICAgICAgIGFj
dGl2YXRlX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5f
bmFtZSwKLSAgICAgICAgICAgICAgICAnYXZhaWxhYmlsaXR5JzogZG9tYWluLmF2YWlsYWJpbGl0
eSwKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIGRvbWFpbi5hdmFpbGFiaWxpdHk6Ci0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCIlKGRvbWFpbilzIiwgIiUoYXZhaWxhYmlsaXR5KXMiKTsnICUgYWN0aXZhdGVfYXJncykK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCIlKGRvbWFpbilzIik7JyAlIGFjdGl2YXRlX2FyZ3Mp
Ci0KLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5YTA4ZTYxMDg4ZWYzZTA0MzkxYzUyOGJmODUzNTgz
MGZhYTg0MjljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAs
MCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0j
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWlt
cG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRv
ciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBF
bnVtVHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxl
bmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4g
ZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNl
bGYpOgotICAgICAgICBoZWFkZXJzID0gWwotICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2Nv
bE9iamVjdHMuaCInLAotICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4nLAotICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCi0gICAgICAg
ICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCi0KLSAgICAgICAgdHlwZWRlZnMgPSBbKCdT
dHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAg
ICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1
dF9maWxlbmFtZSgpKSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNs
dWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAgICAgICAndHlw
ZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVmICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVm
IGluIHR5cGVkZWZzXSksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCkKLQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoZG9tYWlu
cykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwg
ZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3Bw
SGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAg
IHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBtZXRob2RzLgot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgaWYgbm90IGRvbWFpbnM6Ci0g
ICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCi0g
ICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0ZUlu
c3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKScpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYg
X2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
LSAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCi0gICAgICAgIGV4cG9ydE1hY3Jv
ID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQot
ICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNsYXNzQ29t
cG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCi0KLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0g
c2V0KCkKLQotICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBj
b21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5k
KGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCi0KLSAgICAgICAgaGFuZGxlcl9hcmdzID0gewot
ICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVu
dHMpLAotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0
aW9ucykKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9h
cmdzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihz
ZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0gICAgICAg
ICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAg
ICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCi0gICAgICAgIH0KLQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVy
IHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVl
cygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAlIChHZW5l
cmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNv
ZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVzZWRfZW51
bV9uYW1lcyk6Ci0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChj
b21tYW5kKQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJy
b3JTdHJpbmcmJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFt
ZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRl
ciwgY29tbWFuZCkpCi0gICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKQotCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyAr
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJh
bWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBw
YXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRf
ZW51bV9uYW1lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAg
ICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0KLSAgICAgICAgY29tbWFuZF9hcmdzID0gewotICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzog
Y29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9p
bihwYXJhbWV0ZXJzKQotICAgICAgICB9Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1
YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9h
cmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgot
ICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29t
bWFuZF9uYW1lKQotCi0gICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0g
ICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlBh
c3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFy
YW1ldGVycyA9IFtdCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6Ci0gICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChH
ZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRl
ciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgIGNsYXNzX2NvbXBvbmVu
dHMgPSBbJ2NsYXNzJ10KLSAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAgICAgICBpZiBleHBvcnRfbWFj
cm86Ci0gICAgICAgICAgICBjbGFzc19jb21wb25lbnRzLmFwcGVuZChleHBvcnRfbWFjcm8pCi0K
LSAgICAgICAgY29tbWFuZF9hcmdzID0gewotICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFj
cm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKLSAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCi0gICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVz
LkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1
dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgY2xhc3NDb21w
b25lbnRzID0gWydjbGFzcyddCi0gICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAgICAgICBpZiBleHBvcnRN
YWNybyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhw
b3J0TWFjcm8pCi0KLSAgICAgICAgZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgaWYgbGVuKGRv
bWFpbi5jb21tYW5kcykgPiAwOgotICAgICAgICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJp
dmF0ZTonKQotICAgICAgICBkZWNsYXJhdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBkb21haW4uY29tbWFuZHMpKQotCi0g
ICAgICAgIGhhbmRsZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3Jv
JzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAi
XG4iLmpvaW4oZGVjbGFyYXRpb25zKQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1
dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICByZXR1cm4g
IiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDliZWM1NTc0NGU3ZWVj
MjBmYmVjNzUxMThjNDQxNTk5NGUwYzQwMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0j
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0K
LWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9y
X3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBt
b2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAiCi0KLSAgICBkZWYgZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWlu
OiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25k
YXJ5X2hlYWRlcnMgPSBbCi0gICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4nLAotICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
JywKLSAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCi0KLSAgICAgICAgc2Vjb25k
YXJ5X2luY2x1ZGVzID0gWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNv
bmRhcnlfaGVhZGVyc10KLSAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnJykKLSAg
ICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKScpCi0gICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQo
JyNpbmNsdWRlICJJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCInKQotICAg
ICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYnKQotCi0gICAgICAgIGhlYWRl
cl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCInLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xu
Jy5qb2luKHNlY29uZGFyeV9pbmNsdWRlcyksCi0gICAgICAgIH0KLQotICAgICAgICBzZWN0aW9u
cyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRh
dGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgiXG4iLmpvaW4obWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3Nf
ZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQotICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBv
c3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4g
IlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICAjIFByaXZhdGUgbWV0aG9kcy4KLQotICAgIGRl
ZiBfZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKLSAgICAgICAgZGVzdHJ1Y3Rvcl9hcmdzID0gewotICAgICAgICAgICAgJ2RvbWFpbk5h
bWUnOiBkb21haW4uZG9tYWluX25hbWUKLSAgICAgICAgfQotICAgICAgICBkZXN0cnVjdG9yID0g
J0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVj
dG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1
Y3Rvcl9hcmdzCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgZGVzdHJ1Y3RvcikKLQotICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBpbXBsZW1lbnRh
dGlvbnMgPSBbXQotCi0gICAgICAgIGNvbnN0cnVjdG9yX2FyZ3MgPSB7Ci0gICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgfQotICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1
Y3Rvcl9hcmdzKSkKLQotICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA8PSA1OgotICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zbWFsbF9kaXNw
YXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWlu
KSkKLQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAg
ICBpZiBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKGNv
bW1hbmQsIGRvbWFpbikpCi0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwg
ZG9tYWluKSkKLQotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0aW9ucykpCi0KLSAgICBkZWYgX2dlbmVy
YXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2Vs
ZiwgZG9tYWluKToKLSAgICAgICAgY2FzZXMgPSBbXQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAg
ICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUp
Ci0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgp
KTsnICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgZm9yIGNvbW1h
bmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAg
IGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKLSAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsn
ICUgY29tbWFuZC5jb21tYW5kX25hbWUpCi0KLSAgICAgICAgc3dpdGNoX2FyZ3MgPSB7Ci0gICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdk
aXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21h
bGxTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihz
ZWxmLCBkb21haW4pOgotICAgICAgICBjYXNlcyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGlu
IGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgJ2NvbW1h
bmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJkluc3BlY3Rv
ciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBh
cmdzKQotCi0gICAgICAgIHN3aXRjaF9hcmdzID0gewotICAgICAgICAgICAgJ2RvbWFpbk5hbWUn
OiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIu
am9pbihjYXNlcykKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoKS5zdWJzdGl0dXRl
KE5vbmUsICoqc3dpdGNoX2FyZ3MpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNo
ZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgotICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KLSAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBb
XQotCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
LSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0
aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUp
LAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoR2VuZXJhdG9y
LnR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zv
cl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzLmlz
QXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRN
ZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFt
ZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAg
ICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+
JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShw
YXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgZWxpZiBwYXJhbWV0
ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0
ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShw
YXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotCi0g
ICAgICAgIGFzeW5jX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5k
b21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQu
Y29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycsCi0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVy
cyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1l
dGVyQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1hbmQpLnN1YnN0aXR1dGUoTm9uZSwgKiphc3luY19h
cmdzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9j
b21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIGluX3BhcmFtZXRlcl9kZWNs
YXJhdGlvbnMgPSBbXQotICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCi0g
ICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAgICAgICBhbHRlcm5hdGVf
ZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsnY2FsbElkJ10KLSAgICAgICAgbWV0aG9k
X3BhcmFtZXRlcnMgPSBbJ2Vycm9yJ10KLQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAn
bnVsbHB0cicKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAg
ICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRp
b25zLmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlOycgJSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2lu
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzog
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhv
ZCc6IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwK
LSAgICAgICAgICAgICAgICAnc3VjY2Vzc091dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5h
cHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFt
KXMsIHByb3RvY29sRXJyb3JzUHRyKTsnICUgcGFyYW1fYXJncykKLQotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFt
ZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICZpbl8lKHBhcmFt
ZXRlck5hbWUpcyA6IG51bGxwdHInICUgcGFyYW1fYXJncwotICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJh
bWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChv
cHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2lu
XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotCi0gICAg
ICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBhc3luY19hcmdzID0gewotICAg
ICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAg
ICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdD
YWxsYmFjaycKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsnKQotICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAg
ICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJhY2snKQotCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAgICAg
J3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJh
bWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1l
dGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBl
KSwKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8lKHBhcmFtZXRl
ck5hbWUpczsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dy
YXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRf
JShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
ICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJO
YW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdz
KQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRl
ck5hbWUpcyknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRN
ZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRl
ck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIu
dHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0
ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNv
bnN0YW50VmFsdWUob3V0XyUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCi0gICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlM
aXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBw
YXJhbV9hcmdzKQotCi0gICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5
X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQot
ICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxsYmFjaycg
JSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKLSAgICAgICAgICAgICdjb21tYW5kTmFt
ZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVyRGVjbGFy
YXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAotICAgICAgICAg
ICAgJ2ludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKG1ldGhvZF9wYXJhbWV0ZXJzKSwK
LSAgICAgICAgICAgICdhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9pbihh
bHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyksCi0gICAgICAgIH0KLQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykg
PT0gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYpJyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSknICUgY29tbWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3sn
KQotCi0gICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipj
b21tYW5kX2FyZ3MpKQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT4lKGNvbW1hbmROYW1lKXMoJShhbHRlcm5hdGVJbnZv
Y2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgcmV0dXJuOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yJShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRv
cHRSZWYobmV3IEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7JyAlIGNvbW1h
bmRfYXJncykKLSAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoK
LSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2Nh
dGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQotICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7JykKLSAgICAgICAgICAgIGxpbmVzLmV4dGVu
ZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgfScpCi0gICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsnKQot
ICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVycykgPT0gMToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpJykKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAg
IGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgZXJyb3IpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVybiAi
XG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDRhOGQ1YWZlZWQ0NDUyZWU5ZmJmNzhlYTUyYjk0MzNmYWIyMzY3OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpAQCAtMCwwICsxLDkyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCByZQorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
CisKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIGNwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxh
dGVzCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisKK2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJ0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oJworCisg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAg
ICAgICAgICciSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIicsCisgICAgICAgICAgICAnPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+JywKKyAgICAgICAgXQorCisg
ICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzog
cmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAg
J2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGlu
IGhlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
XG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9p
bihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgor
ICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBb
XQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBj
b21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAg
ICdjb21tYW5kRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSwK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9t
YWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCisgICAgICAgIGZvciBfcGFyYW1ldGVy
IGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBl
bmQoJyVzIGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3Jt
YWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkK
KworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBj
b21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2lu
KHBhcmFtZXRlcnMpLAorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1
YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9h
cmdzKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMjcyYzAwYWVmYWI1NzliY2QyNzhjOWMwOGZjNjA1M2E0ZGRjMDRi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAg
LTAsMCArMSwyMDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1w
b3J0IHJlCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJv
bSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9y
dCBFbnVtVHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAgICAgJyJJbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaCInLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCisg
ICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCisKKyAgICAgICAgdHlwZWRlZnMg
PSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsK
KyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxm
Lm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihb
JyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgICAg
ICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVmICVzICVzOycgJSB0eXBlZGVmIGZvciB0
eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAgICAgIH0KKworICAgICAgICBkb21haW5zID0gc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMo
ZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFu
ZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25z
LmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisg
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRo
b2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgaWYgbm90IGRvbWFp
bnM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KScpCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVy
bmF0ZUluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9y
dE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBO
b25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNs
YXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25h
bWVzID0gc2V0KCkKKworICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAg
IGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfZGVj
bGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdz
ID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0Nv
bXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUs
CisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2Rl
Y2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7
CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwK
KyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAg
IH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGlu
ZyBjb21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5l
bnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQs
JyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwg
c2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQs
IHVzZWRfZW51bV9uYW1lcyk6CisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3Jf
Y29tbWFuZChjb21tYW5kKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVy
cyA9IFsnRXJyb3JTdHJpbmcmJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMi
ICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0
ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
X3BhcmFtZXRlciwgY29tbWFuZCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFk
ZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
ICdvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIF9wYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0
XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVz
IiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9wYXJh
bWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3Bh
cmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90
IGluIHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5k
KSkKKyAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NvbW1h
bmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVycyc6
ICIsICIuam9pbihwYXJhbWV0ZXJzKQorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUg
Y29tbWFuZF9hcmdzKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNv
bW1hbmQpOgorICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNv
bW1hbmQuY29tbWFuZF9uYW1lKQorCisgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3Ry
aW5nJiddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJz
OgorICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0
ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgaW5fcGFyYW1ldGVycy5h
cHBlbmQoIlBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKKworICAgICAg
ICBvdXRfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVz
ICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIo
X3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNsYXNz
X2NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2Rl
bCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBl
eHBvcnRfbWFjcm86CisgICAgICAgICAgICBjbGFzc19jb21wb25lbnRzLmFwcGVuZChleHBvcnRf
bWFjcm8pCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5k
RXhwb3J0TWFjcm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKKyAgICAgICAgICAgICdj
YWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUsCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBj
b21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpv
aW4oaW5fcGFyYW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9p
bihvdXRfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUo
Q3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRp
b24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAg
ICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAg
ICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50
cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgZGVjbGFyYXRpb25zID0gW10KKyAgICAg
ICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgorICAgICAgICAgICAgZGVjbGFyYXRpb25z
LmFwcGVuZCgncHJpdmF0ZTonKQorICAgICAgICBkZWNsYXJhdGlvbnMuZXh0ZW5kKG1hcChzZWxm
Ll9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBkb21haW4uY29t
bWFuZHMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmREZWNs
YXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShD
cHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgor
ICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDYxNWRkMTM0
NTljMWYzMTI3YjVmYjUxOWI1NmJiOWVhNDA4YzEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDI4NyBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5l
cmF0b3IKK2Zyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRl
bXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3Is
IHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKworbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFt
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
IgorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBm
aWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2Vs
Zik6CisgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAgJzxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAgICAgICAgICAgICc8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAnPHd0Zi90ZXh0L0NTdHJpbmcuaD4n
XQorCisgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcyA9IFsnI2luY2x1ZGUgJXMnICUgaGVhZGVy
IGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdCisgICAgICAgIHNlY29uZGFyeV9pbmNs
dWRlcy5hcHBlbmQoJycpCisgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUyknKQorICAgICAgICBzZWNvbmRh
cnlfaW5jbHVkZXMuYXBwZW5kKCcjaW5jbHVkZSAiSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiJykKKyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2VuZGlm
JykKKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVk
ZSc6ICciSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmgiJywKKyAgICAgICAgICAgICdzZWNv
bmRhcnlJbmNsdWRlcyc6ICdcbicuam9pbihzZWNvbmRhcnlfaW5jbHVkZXMpLAorICAgICAgICB9
CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1hcChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRl
IG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGRlc3RydWN0b3JfYXJncyA9IHsKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKyAg
ICAgICAgZGVzdHJ1Y3RvciA9ICdJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9JyAlIGRlc3RydWN0b3JfYXJncworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIGRlc3RydWN0b3IpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
KyAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KKworICAgICAgICBjb25zdHJ1Y3Rvcl9hcmdz
ID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAg
ICAgIH0KKyAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yKS5zdWJz
dGl0dXRlKE5vbmUsICoqY29uc3RydWN0b3JfYXJncykpCisKKyAgICAgICAgaWYgbGVuKGRvbWFp
bi5jb21tYW5kcykgPD0gNToKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2Rv
bWFpbihkb21haW4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRh
dGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCisKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWlu
LmNvbW1hbmRzOgorICAgICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAg
ICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNo
ZXJfY2xhc3NfZm9yX2RvbWFpbihjb21tYW5kLCBkb21haW4pKQorICAgICAgICAgICAgaW1wbGVt
ZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9jb21tYW5kKGNvbW1hbmQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlv
bnMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGNhc2VzID0gW10KKyAg
ICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBkb21haW4uY29t
bWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMo
Y2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25h
bWUpCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kc1sxOl06CisgICAgICAg
ICAgICBjYXNlcy5hcHBlbmQoJyAgICBlbHNlIGlmIChtZXRob2QgPT0gIiVzIiknICUgY29tbWFu
ZC5jb21tYW5kX25hbWUpCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2Fs
bElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorCisgICAgICAg
IHN3aXRjaF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUsICoqc3dp
dGNoX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2lt
cGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2FzZXMgPSBb
XQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBh
cmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgICAgIHsgIiUo
Y29tbWFuZE5hbWUpcyIsICZJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
OjolKGNvbW1hbmROYW1lKXMgfSwnICUgYXJncykKKworICAgICAgICBzd2l0Y2hfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25MYXJnZVN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oc2VsZiwgY29t
bWFuZCwgZG9tYWluKToKKyAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisg
ICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9hcmdzID0gewor
ICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVy
X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9h
c3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKwor
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGlm
IENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRl
ci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgi
JShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBh
cmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMp
JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVND
SUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCisgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25N
ZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUp
cyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRl
ck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgYXN5bmNfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxi
YWNrJywKKyAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9w
YXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIu
am9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICB9CisgICAgICAgIHJldHVy
biBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFz
eW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCwgZG9tYWluKToKKyAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCisgICAg
ICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9w
YXJhbWV0ZXJzID0gWydjYWxsSWQnXQorICAgICAgICBtZXRob2RfcGFyYW1ldGVycyA9IFsnZXJy
b3InXQorCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJworICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIG91dF9zdWNjZXNz
X2FyZ3VtZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgYm9v
bCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKwor
ICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlw
ZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRl
ciksCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCisgICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNw
cF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAg
ICAnc3VjY2Vzc091dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBh
cmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJy
b3JzUHRyKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAn
JShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICZpbl8lKHBhcmFtZXRlck5hbWUpcyA6IG51
bGxwdHInICUgcGFyYW1fYXJncworICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVy
X21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nKQor
ICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJh
bWV0ZXJfc3RyaW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhbHRlcm5h
dGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KCdpbl8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGlmIGNvbW1hbmQu
aXNfYXN5bmM6CisgICAgICAgICAgICBhc3luY19hcmdzID0geworICAgICAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxsYmFj
a05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQo
JyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAgICAgICAgICAgIG1ldGhvZF9w
YXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJhY2snKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAg
ICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUn
OiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVy
KSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9u
cy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1lKXM7JyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zv
cl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFyYW1l
dGVyTmFtZSlzLmlzQXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1
bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
IG91dF8lKHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMp
JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMo
QVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMp
OycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNf
ZW51bSgpOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUo
cGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMu
YXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgi
JShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJn
cykKKworICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5
X2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgIG1l
dGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnb3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKCcmb3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAg
ICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9t
YWluX25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2FsbGJhY2snICUgdWNm
aXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSksCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBj
b21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRlckRlY2xhcmF0aW9u
cyc6ICdcbicuam9pbihpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgICAgICdp
bnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9pbihtZXRob2RfcGFyYW1ldGVycyksCisgICAg
ICAgICAgICAnYWx0ZXJuYXRlSW52b2NhdGlvblBhcmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJu
YXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMpLAorICAgICAgICB9CisKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0
Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKwor
ICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzKS5zdWJzdGl0dXRlKE5vbmUsICoqY29t
bWFuZF9hcmdzKSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUyknKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+JShjb21tYW5kTmFtZSlzKCUoYWx0ZXJuYXRlSW52b2Nh
dGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIHJldHVybjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgRXJyb3JTdHJpbmcgZXJyb3I7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpOycgJSBjb21tYW5k
X2FyZ3MpCisgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Cisg
ICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRp
b25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQo
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQorICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDE6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7JykKKyAg
ICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnMpID09IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBp
ZiBub3QgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGVycm9yKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gIlxu
Ii5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlMDRh
ZGY2ODQ5ZDhhNjc1OTNlZmFhY2RhMDViY2NiZGE4ZGYyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMTggQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5n
Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9y
dCBDcHBHZW5lcmF0b3IKK2Zyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBH
ZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorCitsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Cisg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisgICAgZGVm
IGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRh
IGRvbWFpbjogbGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBo
ZWFkZXJzID0gWworICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAor
ICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAg
ICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAn
PHd0Zi9QYXNzUmVmUHRyLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+
J10KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0
cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAg
ICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhl
YWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnJywKKyAgICAgICAg
fQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclBvc3RsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4i
LmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGV2ZW50
KToKKyAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQu
ZXZlbnRfbmFtZQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJO
YW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShldmVudE5hbWUpcy4nICUg
ZW51bV9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgZW51bSBjbGFzcyAlcyB7
JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgZm9yIGVudW1f
dmFsdWUgaW4gcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1l
X2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVl
KGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIH07IC8vIGVudW0g
Y2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBy
ZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGNsYXNzQ29tcG9u
ZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRNYWNybyA9IHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKyAgICAgICAgaWYgZXhwb3J0TWFj
cm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4cG9y
dE1hY3JvKQorCisgICAgICAgIHVzZWRfZW51bV9uYW1lcyA9IHNldChbXSkKKworICAgICAgICBl
dmVudF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50
czoKKyAgICAgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVt
X25hbWVzKSkKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2xhc3NB
bmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyksCisgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdldmVudERlY2xh
cmF0aW9ucyc6ICJcbiIuam9pbihldmVudF9kZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBs
YXRlKENwcFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWlu
LCB1c2VkX2VudW1fbmFtZXMpOgorICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIo
cGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIocGFyYW1ldGVy
LCBldmVudCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAlcyglcyk7
IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKSkKKyAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI3MGIzYjU5MGY0YjczM2I3ZDc0YWU4YWMxZjcx
ZTgyZmFlOTg2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTIxIEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0
ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBs
YXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKKworCitjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIKKworICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21h
aW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25k
YXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAgICAgICBoZWFkZXJf
YXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciSW5zcGVjdG9yRnJvbnRl
bmREaXNwYXRjaGVycy5oIicsCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4i
LmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVh
ZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNl
bGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYu
ZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAg
ICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpbXBsZW1lbnRh
dGlvbnMgPSBbXQorICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAg
ICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5cbicuam9pbihpbXBsZW1l
bnRhdGlvbnMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQorICAgICAgICBmb3JtYWxfcGFyYW1ldGVy
cyA9IFtdCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJz
OgorCisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgbm90IENwcEdlbmVy
YXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6
CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVl
CisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFu
dFZhbHVlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKKworICAgICAgICAgICAgcGFyYW1ldGVyX2Fy
Z3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAg
ICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCisgICAgICAgICAgICAgICAg
J2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1z
T2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUp
cyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAg
IHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0
ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCisKKyAg
ICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlciks
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAnZm9ybWFsUGFyYW1l
dGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykKKyAgICAgICAgfQorCisgICAgICAg
IGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0
Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2
ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQorCisgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJf
YXNzaWdubWVudHMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKworICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDYwYzZhZDhmMjk2MjJkYjE2MjhhNTBmYTkx
NmUxYjVkZTc4NTI2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFk
ZXIucHkKQEAgLTAsMCArMSwzNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20gY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1w
bGF0ZXMKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9k
ZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5
cGUsIEFycmF5VHlwZSwgRnJhbWV3b3JrcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKKworCitjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRv
cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAg
ICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvclBy
b3RvY29sT2JqZWN0cy5oIgorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlbGYuY2Fs
Y3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKGRvbWFpbnMpCisKKyAgICAg
ICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL0Fzc2VydGlvbnMuaD4nLAorICAgICAg
ICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicKKyAgICAgICAgXSkKKworICAgICAgICBleHBvcnRf
bWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5v
bmUpCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRT
dHJpbmcnOiByZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAg
ICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBo
ZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnJywK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybl90eXBlID0gJ1N0cmluZycKKyAgICAgICAgcmV0
dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8gPSBbcmV0dXJuX3R5cGVdCisgICAgICAgIGlmIGV4
cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybl90eXBlX3dpdGhfZXhw
b3J0X21hY3JvWzowXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUHJlbHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdu
YW1lc3BhY2UgUHJvdG9jb2wgeycpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJyVzIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsnICUgJyAnLmpvaW4ocmV0
dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8pKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xu
Jy5qb2luKFsKKyAgICAgICAgICAgICd0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAlcyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSknICUgcmV0dXJuX3R5cGUsCisgICAgICAgICAgICAneycs
CisgICAgICAgICAgICAnICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQ+KGVudW1WYWx1ZSkpOycsCisgICAgICAgICAgICAnfSddKSkKKworICAgICAgICBidWls
ZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRv
bWFpbnMpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxl
bihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRz
KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wnKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxu
XG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgICMgRklY
TUU6IG1vdmUgYnVpbGRlcnMgb3V0IG9mIGNsYXNzZXMsIHVuY29tbWVudCBmb3J3YXJkIGRlY2xh
cmF0aW9uCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYsIGRv
bWFpbnMpOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBk
b21haW5zOgorICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBk
ZWNsIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uc10KKyAgICAgICAgICAgIG9iamVjdF90eXBl
cyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBk
ZWNsYXJhdGlvbl90eXBlcykKKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRh
IF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQor
ICAgICAgICAgICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBb
XQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9t
YWluLmRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICBvYmplY3RfdHlwZV9uYW1lcyA9IFtfdHlw
ZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBvYmplY3RfdHlwZXNdCisgICAgICAgICAgICBlbnVt
X3R5cGVfbmFtZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gZW51bV90eXBlc10K
KworICAgICAgICAgICAgIyBGb3J3YXJkLWRlY2xhcmUgYWxsIGNsYXNzZXMgc28gdGhlIHR5cGUg
YnVpbGRlcnMgd29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdlZC4KKyAgICAgICAgICAgIGRvbWFpbl9s
aW5lcy5leHRlbmQoJ2NsYXNzICVzOycgJSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChvYmplY3Rf
dHlwZV9uYW1lcykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVtIGNsYXNz
ICVzOycgJSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChlbnVtX3R5cGVfbmFtZXMpKQorICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUp
CisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKworICAgICAgICBpZiBsZW4o
c2VjdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiAiIiIvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyVzCisvLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisiIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAgIHNlY3Rp
b25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisg
ICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSB0ZXh0OiBsZW4odGV4dCkgPiAwLCBzZWN0
aW9ucykKKworICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1
cm4gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIiIvLyBUeXBlZGVmcy4K
KyVzCisvLyBFbmQgb2YgdHlwZWRlZnMuIiIiICUgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAg
ICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9IGZpbHRlcihsYW1iZGEgZGVjbDogaXNpbnN0YW5j
ZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAg
ICAgICBpZiBsZW4ocHJpbWl0aXZlX2RlY2xhcmF0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJl
dHVybiAnJworCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgZm9yIGRlY2xhcmF0aW9u
IGluIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBwcmltaXRpdmVfbmFtZSA9
IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoZGVjbGFyYXRpb24udHlw
ZS5hbGlhc2VkX3R5cGUpCisgICAgICAgICAgICB0eXBlZGVmX2xpbmVzID0gW10KKyAgICAgICAg
ICAgIGlmIGxlbihkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikgPiAwOgorICAgICAgICAgICAgICAg
IHR5cGVkZWZfbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlv
bikKKyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCd0eXBlZGVmICVzICVzOycgJSAo
cHJpbWl0aXZlX25hbWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZSkpCisgICAgICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKQorCisgICAgICAgIGxpbmVzID0g
W10KKyAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWlu
X25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnXG5cbicuam9pbihzZWN0aW9ucykpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2lu
KGxpbmVzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBk
b21haW4pOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIHR5cGVfZGVjbGFy
YXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9u
KHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfZGVj
bGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNs
YXJhdGlvbiwgZG9tYWluKSkKKworICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgc2Vj
dGlvbjogbGVuKHNlY3Rpb24pID4gMCwgc2VjdGlvbnMpCisgICAgICAgIGlmIGxlbihzZWN0aW9u
cykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGxpbmVzID0gW10KKyAg
ICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwg
dHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKKyAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAg
ZW51bV9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlzaW5zdGFuY2UobWVtYmVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzLCB0eXBlX2RlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1i
ZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVy
OiBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAg
ICAgICBvYmplY3RfbmFtZSA9IHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lCisKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikg
PiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSB0eXBlX2RlY2xhcmF0
aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICBiYXNlX2NsYXNzID0gJ0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JworICAgICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRz
KHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFzZV9j
bGFzcyArICdCYXNlJworICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGljICVz
IHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdw
dWJsaWM6JykKKyAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCcl
c1wnIHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2Jq
ZWN0X25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVj
dF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9u
KSkKKworICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10KKyAgICAgICAgY29uc3RydWN0
b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVhdGUo
KScgJSAob2JqZWN0X25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAgICAgZm9yIG1lbWJlciBpbiBy
ZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQo
JyAgICAgKiAgICAgLnNldCVzKC4uLiknICUgdWNmaXJzdChtZW1iZXIubWVtYmVyX25hbWUpKQor
CisgICAgICAgIGJ1aWxkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBlJzogb2Jq
ZWN0X25hbWUsCisgICAgICAgICAgICAnY29uc3RydWN0b3JFeGFtcGxlJzogJ1xuJy5qb2luKGNv
bnN0cnVjdG9yX2V4YW1wbGUpICsgJzsnLAorICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBw
ZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlv
blByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipidWlsZGVyX2FyZ3MpKQorICAgICAgICBmb3Ig
dHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKHR5cGVfbWVtYmVyLCBk
b21haW4pKQorICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLlByb3Rv
Y29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipi
dWlsZGVyX2FyZ3MpKQorICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9m
b3JfbWVtYmVyKG1lbWJlciwgZG9tYWluKSkKKworICAgICAgICBpZiBHZW5lcmF0b3IudHlwZV9o
YXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIFByb3BlcnR5IG5h
bWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLicpCisgICAgICAgICAgICBmb3IgdHlwZV9t
ZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAg
ZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFj
cm8nLCBOb25lKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBj
b25zdCBjaGFyKiAlczsnICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSkpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbihzZWxmLCBlbnVtX2RlY2xhcmF0aW9u
KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAl
IGVudW1fZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisgICAgICAgIGxpbmVzLmV4dGVuZChzZWxm
Ll9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX2RlY2xhcmF0aW9uLnR5cGVfbmFt
ZSwgZW51bV9kZWNsYXJhdGlvbi50eXBlKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIo
c2VsZiwgZW51bV9tZW1iZXIpOgorICAgICAgICBkZWYgYXBwbHlfaW5kZW50YXRpb24obGluZSk6
CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoKCcjJywgJy8qJywgJyovJywgJy8vJykp
IG9yIGxlbihsaW5lKSBpcyAwOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnICAgICcgKyBsaW5lCisKKyAgICAg
ICAgaW5kZW50ZWRfbGluZXMgPSBtYXAoYXBwbHlfaW5kZW50YXRpb24sIHNlbGYuX2dlbmVyYXRl
X3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBlbnVtX21lbWJl
ci50eXBlKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihpbmRlbnRlZF9saW5lcykKKworICAg
IGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoc2VsZiwgZW51bV9uYW1lLCBlbnVt
X3R5cGUpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGVudW1fbmFtZSA9IHVjZmlyc3Qo
ZW51bV9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2VudW0gY2xhc3MgJXMgeycgJSBlbnVt
X25hbWUpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdHlwZS5lbnVtX3ZhbHVlcygp
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgPSAlcywnICUgKEdlbmVyYXRvci5z
dHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zv
cl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OyAvLyBl
bnVtIGNsYXNzICVzJyAlIGVudW1fbmFtZSkKKyAgICAgICAgcmV0dXJuIGxpbmVzICAjIFRoZSBj
YWxsZXIgbWF5IHdhbnQgdG8gYWRqdXN0IGluZGVudGF0aW9uLCBzbyBkb24ndCBqb2luIHRoZXNl
IGxpbmVzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2VudW0oc2VsZiwgdHlw
ZV9kZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcmVxdWlyZWRfbWVt
YmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgZW51bV92YWx1ZXMgPSBbXQorCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0geycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsJykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHJl
cXVpcmVkX21lbWJlcnMpKToKKyAgICAgICAgICAgIGVudW1fdmFsdWUgPSAiJXNTZXQiICUgdWNm
aXJzdChyZXF1aXJlZF9tZW1iZXJzW2ldLm1lbWJlcl9uYW1lKQorICAgICAgICAgICAgZW51bV92
YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgJXMgPSAxIDw8ICVkLCcgJSAoZW51bV92YWx1ZSwgaSkpCisgICAgICAgIGlmIGxlbihlbnVt
X3ZhbHVlcykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEFsbEZpZWxk
c1NldCA9ICglcyknICUgJyB8ICcuam9pbihlbnVtX3ZhbHVlcykpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRzU2V0ID0gMCcpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVy
X3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBz
ZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdrZXllZFNldCc6IENwcEdlbmVyYXRvci5j
cHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAg
ICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVy
VHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIp
CisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNhbWVs
TmFtZSlzU2V0PiYgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUg
c2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShjYW1l
bE5hbWUpc1NldCksIHByb3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0KTsnICUgc2V0dGVyX2Fy
Z3MpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVk
U2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJn
cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAg
bV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIHZhbHVlKTsn
ICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTwlKGNhbWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIH0nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorCisgICAgZGVmIF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwg
dHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAorICAgICAg
ICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAgICAgICAgfQorCisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKKyAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0
ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
X2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKKyAgICAgICAgIyBBIGxpc3Qgb2YgKGJ1aWxkZXJf
dHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQorICAgICAgICB0eXBlX2FyZ3VtZW50cyA9IFtdCisK
KyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2Vs
Zi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zKQorCisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJh
dGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5
cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkK
KworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChD
cHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJhdGlvbi50
eXBlKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9u
LnR5cGUpKSkKKworICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBbJ3N0cnVjdCddCisgICAgICAg
IGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9pZCddCisgICAgICAgIGV4cG9ydF9tYWNy
byA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkK
KyAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RydWN0
X2tleXdvcmRzLmFwcGVuZChleHBvcnRfbWFjcm8pCisgICAgICAgICAgICAjZnVuY3Rpb25fa2V5
d29yZHNbMToxXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpvaW4oc3RydWN0
X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQorICAgICAgICAgICAgaWYgYXJndW1lbnRbMV06Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGlt
ZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSk7JyAlIGFy
Z3VtZW50WzBdKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxF
RCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5
d29yZHMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zMWVmNDk0MTJkYWI5YzAzYjcyZjAzMzNlY2JmM2JmMGM4OWUzOWIyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTgx
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcK
K2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0
IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEFsaWFzZWRUeXBlLCBBcnJheVR5
cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQorCisKK2NsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihH
ZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
OgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRo
KQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNw
ZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwIgorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAg
IHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKGRvbWFpbnMp
CisKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10K
KworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6
ICciSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiJywKKyAgICAgICAgICAgICdzZWNvbmRhcnlJ
bmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGlu
IHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtd
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnbmFtZXNwYWNlIFByb3RvY29sIHsnKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKCkpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlv
bnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAg
ICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24p
ID4gMCwgYnVpbGRlcl9zZWN0aW9ucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wnKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAg
IyBQcml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZyhzZWxm
KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geycpCisgICAgICAgIGxpbmVz
LmV4dGVuZChbJyAgICAiJXMiLCcgJSBlbnVtX3ZhbHVlIGZvciBlbnVtX3ZhbHVlIGluIHNlbGYu
YXNzaWduZWRfZW51bV92YWx1ZXMoKV0pCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVy
YXRlX29wZW5fZmllbGRfbmFtZXMoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
Zm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAgIGZv
ciB0eXBlX2RlY2xhcmF0aW9uIGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5cGVf
aGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucyk6Cisg
ICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZCh0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6Cisg
ICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAn
UHJvdG9jb2wnLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50
eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAoZmllbGRf
bmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwg
ZG9tYWluKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBkZWNsYXJhdGlvbnNfdG9f
Z2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3Nl
cnRpb25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKworICAgICAgICBm
b3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAg
ICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6Cisg
ICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3Nl
cnRpb25fZm9yX2VudW0odHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6Cisg
ICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9m
b3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgICAg
IGlmIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50
eXBlKToKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQor
CisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJh
dGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBlJzogQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50
eXBlKQorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuUHJv
dG9jb2xPYmplY3RSdW50aW1lQ2FzdCkuc3Vic3RpdHV0ZShOb25lLCAqKmFyZ3MpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVj
dF9kZWNsYXJhdGlvbik6CisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRh
IG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVy
OiBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisg
ICAgICAgIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdlbmVyYXRvci50eXBlX2hhc19v
cGVuX2ZpZWxkcyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgbGluZXMgPSBbXQor
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwor
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7IiIiKQorICAg
ICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGFy
Z3MgPSB7CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJf
bmFtZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9h
c3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvcyA9
IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOworICAgICAgICBB
U1NFUlQoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgICUoYXNz
ZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9IiIiICUg
YXJncykKKworICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVxdWlyZWRfbWVtYmVycykpCisKKyAgICAg
ICAgZm9yIHR5cGVfbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CisgICAgICAgICAgICBhcmdz
ID0geworICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25h
bWUsCisgICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfYXNz
ZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJh
dGlvbikKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7
CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBv
YmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIlKG1lbWJlck5hbWUpcyIpKTsKKyAgICAgICAgaWYg
KCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgICUoYXNz
ZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQor
CisgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH0nKQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9i
amVjdC0+c2l6ZSgpKScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgRkFUQUwo
IlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50b0pTT05T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9m
b3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVt
YmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgcmVzdWx0OycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmlu
ZyhyZXN1bHQpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjYXN0U3VjY2Vl
ZGVkKTsnKQorCisgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9pbihbJ3Jlc3Vs
dCA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9tZW1iZXIudHlw
ZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKCVzKTsn
ICUgYXNzZXJ0X2NvbmRpdGlvbikKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCisKKyAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDczZmY3YjBmY2Q3MjI1MjJkNjBiMmVjZjRhNDc5NTdlNjBkZDJmMjkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0j
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJpbmcK
LWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5
cGUKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBGcm9udGVuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0gICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFt
YmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAg
ICBoZWFkZXJzID0gWwotICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIn
LAotICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywK
LSAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPicsCi0gICAgICAgICAg
ICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKLSAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+J10KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdoZWFkZXJHdWFy
ZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKLSAg
ICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9y
IGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAgICAgICAndHlwZWRlZnMnOiAnJywKLSAgICAg
ICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gIlxu
XG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICAjIFByaXZhdGUgbWV0aG9kcy4KLQotICAgIGRlZiBf
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGV2
ZW50KToKLSAgICAgICAgZW51bV9hcmdzID0gewotICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUn
OiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAnZXZlbnROYW1lJzogZXZl
bnQuZXZlbnRfbmFtZQotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0
ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShldmVudE5hbWUpcy4n
ICUgZW51bV9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgZW51bSBjbGFzcyAl
cyB7JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgZm9yIGVu
dW1fdmFsdWUgaW4gcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKToKLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3Zh
bHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIH07IC8vIGVu
dW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAg
ICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGNsYXNzQ29t
cG9uZW50cyA9IFsnY2xhc3MnXQotICAgICAgICBleHBvcnRNYWNybyA9IHNlbGYubW9kZWwoKS5m
cmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKLSAgICAgICAgaWYgZXhwb3J0
TWFjcm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBjbGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4
cG9ydE1hY3JvKQotCi0gICAgICAgIHVzZWRfZW51bV9uYW1lcyA9IHNldChbXSkKLQotICAgICAg
ICBldmVudF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2
ZW50czoKLSAgICAgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbiwgdXNlZF9l
bnVtX25hbWVzKSkKLQotICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY2xh
c3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyksCi0gICAgICAgICAg
ICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdldmVudERl
Y2xhcmF0aW9ucyc6ICJcbiIuam9pbihldmVudF9kZWNsYXJhdGlvbnMpCi0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRl
bXBsYXRlKFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWlu
LCB1c2VkX2VudW1fbmFtZXMpOgotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCi0gICAg
ICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJh
bWV0ZXJzOgotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAo
R2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIo
cGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIocGFyYW1ldGVy
LCBldmVudCkpCi0gICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAlcyglcyk7
IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKSkKLSAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwZDU1MTgzNjBiMDBlMTU4OWRl
NWFjMjA5OGU0OTRhYWZjNjY4ZTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENv
cHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBs
b2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQotCi0KLWNsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1
cm4gIkluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIgotCi0gICAgZGVmIGRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjog
bGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQotCi0gICAgICAgIGhlYWRlcl9hcmdz
ID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JGcm9udGVuZERp
c3BhdGNoZXJzLmgiJywKLSAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9p
bihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJz
XSksCi0gICAgICAgIH0KLQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMg
UHJpdmF0ZSBtZXRob2RzLgotCi0gICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGltcGxlbWVudGF0aW9u
cyA9IFtdCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkKLQotICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxlbWVudGF0
aW9ucykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9y
X2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IHBhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0g
W10KLQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0K
LSAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQot
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgR2VuZXJhdG9yLnNo
b3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
JXMpJyAlIHBhcmFtZXRlcl92YWx1ZQotCi0gICAgICAgICAgICBwYXJhbWV0ZXJfYXJncyA9IHsK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdw
YXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92YWx1ZSwKLSAgICAgICAgICAgICAgICAna2V5ZWRT
ZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIu
dHlwZSksCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJncykKLSAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JShr
ZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJh
bWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmpl
Y3QtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQotCi0gICAgICAgICAgICBm
b3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgIGV2ZW50X2FyZ3MgPSB7Ci0gICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdldmVudE5hbWUn
OiBldmVudC5ldmVudF9uYW1lLAotICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAi
LmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNGcm9udGVuZERpc3BhdGNoZXI6OiUoZXZl
bnROYW1lKXMoJShmb3JtYWxQYXJhbWV0ZXJzKXMpJyAlIGV2ZW50X2FyZ3MpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyIp
KTsnICUgZXZlbnRfYXJncykKLQotICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2Fzc2lnbm1lbnRz
KSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAg
ICAgICBsaW5lcy5leHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpLCBwYXJhbXNPYmplY3QpOycpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMzOTJjNzg0NTkzYzkxNDdjYmY4NDU2N2E4MTc1ODBjN2Y5NmNiMWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1
Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRl
cyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorCitsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVy
YXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMiCisKKyAgICBkZWYgZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKToKKyAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oZG9tYWluKToK
KyAgICAgICAgICAgIGRvbWFpbl9lbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJhdGlv
bjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSksIGRvbWFpbi50eXBlX2Rl
Y2xhcmF0aW9ucykKKyAgICAgICAgICAgIHJldHVybiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAg
b3IgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBvciBsZW4oZG9tYWluX2VudW1fdHlwZXMpID4gMAor
CisgICAgICAgIHJldHVybiBmaWx0ZXIoc2hvdWxkX2dlbmVyYXRlX2RvbWFpbiwgR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNl
bGYpOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdl
bmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAg
ICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnLy8gJShkb21haW4pcy4nICUgYXJncykKKworICAgICAgICBoYXNfYXN5bmNf
Y29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBjb21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBkb21h
aW4uY29tbWFuZHMpKQorICAgICAgICBpZiBsZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGhhc19h
c3luY19jb21tYW5kczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiJShkb21haW4pcyIpOycg
JSBhcmdzKQorCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnM6CisgICAgICAgICAgICBpZiBkZWNsYXJhdGlvbi50eXBlLmlzX2VudW0oKToKKyAgICAg
ICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdkb21haW4nOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xh
cmF0aW9uLnR5cGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpv
aW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5
cGUuZW51bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShl
bnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKKworICAgICAgICAgICAg
ZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBl
X21lbWJlci50eXBlLmlzX2Fub255bW91cworCisgICAgICAgICAgICBmb3IgX21lbWJlciBpbiBm
aWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMp
OgorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2Rv
bWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1l
JzogJyVzJXMnICUgKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdChfbWVtYmVyLm1lbWJl
cl9uYW1lKSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6
ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFs
dWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBfbWVtYmVyLnR5cGUuZW51bV92YWx1
ZXMoKV0pCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwg
eyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKKworICAgICAgICBkZWYgaXNfYW5vbnltb3Vz
X2VudW1fcGFyYW0ocGFyYW0pOgorICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UocGFyYW0u
dHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbS50eXBlLmlzX2Fub255bW91cworCisgICAgICAgIGZv
ciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZm9yIHBhcmFtIGluIGZpbHRl
cihpc19hbm9ueW1vdXNfZW51bV9wYXJhbSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycyk6CisgICAg
ICAgICAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMl
cycgJSAodWNmaXJzdChldmVudC5ldmVudF9uYW1lKSwgdWNmaXJzdChwYXJhbS5wYXJhbWV0ZXJf
bmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAi
JXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVl
KSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW0udHlwZS5lbnVtX3ZhbHVlcygp
XSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAgICAgICAgICBldmVudF9hcmdzID0gewor
ICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAg
ICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAgICAgJ3Bh
cmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZvciBw
YXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShk
b21haW4pcy4lKGV2ZW50TmFtZSlzIiwgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKKwor
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBkZWYg
Z2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpOgorICAgICAgICAgICAgICAgIG9w
dGlvbmFsX3N0cmluZyA9ICJ0cnVlIiBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAiZmFs
c2UiCisgICAgICAgICAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICAgICAgICAgIHBhaXJzLmFw
cGVuZCgnIm5hbWUiOiAiJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3IuanNfbmFtZV9m
b3JfcGFyYW1ldGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpKQorICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZCgnIm9wdGlvbmFsIjogJXMnICUgb3B0aW9uYWxfc3RyaW5nKQorICAgICAgICAgICAg
ICAgIHJldHVybiAieyVzfSIgJSAiLCAiLmpvaW4ocGFpcnMpCisKKyAgICAgICAgICAgIGNvbW1h
bmRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAor
ICAgICAgICAgICAgICAgICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0
ZXJfb2JqZWN0KHBhcmFtZXRlcikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1l
dGVyc10pLAorICAgICAgICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMi
JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShjb21tYW5k
TmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFu
ZF9hcmdzKQorCisgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBvciBkb21haW4uZXZlbnRzOgor
ICAgICAgICAgICAgYWN0aXZhdGVfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdhdmFpbGFiaWxpdHknOiBkb21h
aW4uYXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgZG9tYWluLmF2
YWlsYWJpbGl0eToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMiLCAiJShhdmFpbGFiaWxpdHkpcyIpOycgJSBh
Y3RpdmF0ZV9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMiKTsnICUg
YWN0aXZhdGVfYXJncykKKworICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5NjQ1YzdkODkzYWQwOTE3MGYzZTcxNGY3
YzcyYWY1YTEzYjQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworaW1wb3J0IHJlCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKK2Zyb20g
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtz
Citmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIG9iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVt
cGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIE9i
akNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3Iu
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAl
IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChz
ZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+JywKKyAgICAgICAgICAgICc8
d3RmL1JldGFpblB0ci5oPicsCisgICAgICAgIF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsK
KyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxm
Lm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihb
JyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgICAg
ICAnZm9yd2FyZERlY2xhcmF0aW9ucyc6IHNlbGYuX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNs
YXJhdGlvbnMoKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFw
KHNlbGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9t
YWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBf
Z2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToKKyAgICAgICAgbGluZXMg
PSBbJ0Bwcm90b2NvbCAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19Q
UkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKV0KKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBf
Z2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21h
aW5zKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BjbGFzcyAlcyVzRG9tYWluSGFuZGxlcjsnICUg
KE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpZiBub3Qg
ZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgY29tbWFu
ZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFu
ZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQorCisgICAg
ICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4o
Y29tbWFuZF9kZWNsYXJhdGlvbnMpLAorICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3Rp
dHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFu
ZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgbGlu
ZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCisgICAgICAgIGZv
ciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29t
bWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJz
JzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpIG92ZXJy
aWRlOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmZmFl
OWI3YWY3Nzg4OTk1MzQ4NDkzNWFjZDJmODM4YzdjNmJjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDE3NyBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitp
bXBvcnQgcmUKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgor
ZnJvbSBtb2RlbHMgaW1wb3J0IEZyYW1ld29ya3MKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQorZnJv
bSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKwor
CitjbGFzcyBPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRv
cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAg
ICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzQmFja2VuZERp
c3BhdGNoZXJzLm1tJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0
b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9k
ZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAg
ICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAg
ICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLmg+JywKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+JywKKyAgICAgICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xu
Jy5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hl
YWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluLCBk
b21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAg
cmV0dXJuICcnCisKKyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBm
b3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xh
cmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3Jf
Y29tbWFuZChkb21haW4sIGNvbW1hbmQpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29t
bWFuZF9kZWNsYXJhdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50
YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVj
a2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFt
ZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1h
bmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFy
YW1ldGVycyksCisgICAgICAgICAgICAnc3VjY2Vzc0NhbGxiYWNrJzogc2VsZi5fZ2VuZXJhdGVf
c3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAorICAgICAgICAgICAg
J2NvbnZlcnNpb25zJzogc2VsZi5fZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQoZG9t
YWluLCBjb21tYW5kKSwKKyAgICAgICAgICAgICdpbnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVf
aW52b2NhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1w
bGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlcklt
cGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKKworICAgIGRl
ZiBfZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1h
bmQpOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtdCisgICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFt
KGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgICAgICAg
ICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tf
cGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXigl
cykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
JykKKworICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKworICAgICAgICAgICAgcmVxdWlyZWRf
cG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IG5vdCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlw
ZShwYXJhbWV0ZXIudHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpCisgICAgICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50
aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywg
QCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKKworICAgICAgICAgICAgb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKSwgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykKKyAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
ICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmll
cihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywg
QCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKKworICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGtleWVk
X3NldF9tZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFy
YW1ldGVyLnR5cGUpCisgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlk
ZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAg
ICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsIGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgICAgICBleHBvcnRfZXhw
cmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9m
b3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHZhcl9leHByZXNzaW9uKQorICAgICAgICAgICAg
ICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcyknICUgdmFyX25hbWUpCisgICAgICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT4lcyhBU0NJ
SUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dE9iamVjdC5yZWxlYXNlKCksIFN0cmluZygpKTsnKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsnKQorCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKKworICAgIGRlZiBfZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQoc2VsZiwgZG9t
YWluLCBjb21tYW5kKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGluX3BhcmFtX25hbWUKKyAgICAgICAg
ICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIEZhbHNlKQorICAgICAgICAgICAgaW5f
cGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lID0gJyolcycgJSBpbl9wYXJhbV9uYW1lIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbCBlbHNlIGluX3BhcmFtX25hbWUKKyAgICAgICAgICAgIGltcG9ydF9l
eHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9u
X2Zvcl9wYXJhbWV0ZXIoaW5fcGFyYW1fb3B0aW9uYWxfc2FmZV9uYW1lLCBkb21haW4sIGNvbW1h
bmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzID0gJXM7
JyAlIChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2luX3BhcmFtX25hbWUpLCBp
bXBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICVzOycgJSBqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpj
X2luX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICgl
cyknICUgaW5fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgJXMgPSAlczsnICUgKG9iamNfaW5fcGFyYW1fbmFtZSwgaW1wb3J0X2V4cHJlc3Npb24pKQor
CisgICAgICAgIGlmIGxpbmVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9pbnZvY2F0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIHBhaXJzID0gW10K
KyAgICAgICAgcGFpcnMuYXBwZW5kKCdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrJykK
KyAgICAgICAgcGFpcnMuYXBwZW5kKCdzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrJykK
KyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
CisgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1l
CisgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHBhaXJzLmFwcGVuZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb2Jq
Y19pbl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3B0
aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBv
YmpjX2luX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycg
JSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKKyAgICAg
ICAgcmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFt
ZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIyY2Y4ZjQx
MWI4MjJmZjUwNzYyMmQwZmZiMjY5MmRjMjc2ZmZkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9oZWFkZXIucHkKQEAgLTAsMCArMSw4NiBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBvYmpjX2dl
bmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworCitsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBPYmpDQ29uZmlndXJhdGlv
bkhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuICclc0NvbmZpZ3VyYXRpb24uaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJF
RklYCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0g
WworICAgICAgICAgICAgJyIlcy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAg
ICAgICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaW5jbHVkZXMn
OiAnXG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSks
CisgICAgICAgIH0KKworICAgICAgICBzZWxmLl9jb21tYW5kX2ZpbHRlciA9IE9iakNHZW5lcmF0
b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9k
ZWwoKSkKKyAgICAgICAgc2VsZi5fZXZlbnRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRf
Z2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKKwor
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2Vj
dGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkdlbmVy
aWNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbnRlcmZhY2Vf
Zm9yX2RvbWFpbnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShP
YmpDVGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyhzZWxmLCBk
b21haW5zKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRl
cmZhY2UgUldJUHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QnKQorICAgICAgICBmb3Ig
ZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJh
dGVfcHJvcGVydGllc19mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
QGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVy
YXRlX3Byb3BlcnRpZXNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBwcm9wZXJ0
eV9hcmdzID0geworICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisg
ICAgICAgICAgICAndmFyaWFibGVOYW1lUHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbiksCisgICAgICAgIH0KKworICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0
ZXIoZG9tYWluKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxh
dGVzLkNvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9w
ZXJ0eV9hcmdzKSkKKyAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmls
dGVyKGRvbWFpbik6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBs
YXRlcy5Db25maWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3Bl
cnR5X2FyZ3MpKQorICAgICAgICByZXR1cm4gbGluZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRh
dGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MzIwNWNiOWRjZTczODdjOTRlNWFjMjZkYWE1MWJiMDY4NDM4
OWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5CkBAIC0wLDAgKzEsMTUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpD
R2VuZXJhdG9yCitmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVy
YXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQorCisKK2NsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gJyVzQ29uZmlndXJhdGlvbi5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisK
KyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlfaGVhZGVy
cyA9IFsKKyAgICAgICAgICAgICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYLAorICAgICAgICAgICAgJyIlc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPicsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPicsCisgICAgICAgICAgICAnPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPicsCisgICAgICAg
ICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPicsCisg
ICAgICAgIF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5
SW5jbHVkZSc6ICciJXNDb25maWd1cmF0aW9uLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgsCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAg
IH0KKworICAgICAgICBzZWxmLl9jb21tYW5kX2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKKyAg
ICAgICAgc2VsZi5fZXZlbnRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVf
ZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKKworICAgICAgICBk
b21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMgPSBb
XQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVudGF0aW9u
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlucyhzZWxm
LCBkb21haW5zKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bp
bXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24nKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOycpCisgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9n
ZW5lcmF0ZV9pdmFycyhkb21haW5zKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcicpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
aWYgKCFzZWxmKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjb250cm9sbGVyKTsnKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5f
Z2VuZXJhdGVfZGVhbGxvYyhkb21haW5zKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBpZiBkb21haW4uY29tbWFu
ZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21haW4oZG9tYWlu
KSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBpZiBkb21h
aW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9y
X2RvbWFpbihkb21haW4pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KworICAgIGRlZiBfZ2VuZXJhdGVfaXZhcnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAgIGxpbmVz
ID0gW10KKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgaWYgZG9t
YWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAg
ICAgICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicgJSAoT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICAgICAgICAgIGl2
YXJfbmFtZSA9ICdfJXNIYW5kbGVyJyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVm
aXhfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
aWQ8JXM+ICVzOycgJSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUpKQorICAgICAgICAgICAg
aWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAg
ICAgICAgICAgb2JqY19jbGFzc19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUg
KE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAg
ICAgICAgICBpdmFyX25hbWUgPSAnXyVzRXZlbnREaXNwYXRjaGVyJyAlIE9iakNHZW5lcmF0b3Iu
dmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgJXMgKiVzOycgJSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUp
KQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBfZ2VuZXJhdGVfZGVhbGxvYyhzZWxm
LCBkb21haW5zKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0g
KHZvaWQpZGVhbGxvYycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGZvciBk
b21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2Vs
Zi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBbXyVzSGFuZGxlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1l
X3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgICAgICBpZiBkb21haW4uZXZlbnRz
IGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBbXyVzRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOycgJSBPYmpDR2VuZXJhdG9y
LnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgW3N1cGVyIGRlYWxsb2NdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScp
CisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX3NldHRl
cl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAndmFy
aWFibGVOYW1lUHJlZml4JzogT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3Jf
ZG9tYWluKGRvbWFpbiksCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuQ29uZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eUltcGxlbWVudGF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqc2V0dGVyX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rp
c3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZ2V0dGVy
X2FyZ3MgPSB7CisgICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19Q
UkVGSVgsCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAg
ICAgICAgICAgICd2YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25h
bWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSwKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
VGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5Db25maWd1cmF0aW9uR2V0dGVySW1wbGVtZW50YXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipnZXR0ZXJfYXJncykKKworICAgIGRlZiBfdmFyaWFibGVfbmFt
ZV9wcmVmaXhfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBkb21haW5fbmFtZSA9
IGRvbWFpbi5kb21haW5fbmFtZQorICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdE
T00nKToKKyAgICAgICAgICAgIHJldHVybiAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQorICAgICAg
ICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdDU1MnKToKKyAgICAgICAgICAgIHJldHVybiAn
Y3NzJyArIGRvbWFpbl9uYW1lWzM6XQorICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxv
d2VyKCkgKyBkb21haW5fbmFtZVsxOl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxw
ZXJzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJkNWFiM2Y1
YTllYmI0YzhmMTYzY2RhMWUzNjg3NjNkMjIyMzcwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
Y29udmVyc2lvbl9oZWxwZXJzLnB5CkBAIC0wLDAgKzEsMTU1IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIG1vZGVscyBp
bXBvcnQgRW51bVR5cGUKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IK
K2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CisKKworZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKKyAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFd
ID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBsaW5lcy5hcHBlbmQoJycpCisKKworY2xhc3Mg
T2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgnICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAg
ICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzQXJyYXlDb252ZXJzaW9uSGVscGVycy5o
IicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICBdCisKKyAgICAgICAgaGVh
ZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAg
ICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VjdGlvbnMg
PSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbnZlcnNpb25I
ZWxwZXJzUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQ29udmVyc2lvbkhlbHBlcnNT
dGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChz
ZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21haW5zKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQ29udmVyc2lvbkhlbHBl
cnNQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZl
cnNpb25fZnVuY3Rpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKworICAg
ICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KKyAgICAgICAgZm9yIGRlY2xhcmF0
aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGFkZF9uZXds
aW5lKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0
aW9uKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBk
ZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChpc2luc3Rh
bmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91cyk6
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9j
b252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKworICAg
ICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgorICAgICAgICBmb3IgY29tbWFuZCBpbiBk
b21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2Fs
bF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyk6CisgICAgICAg
ICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFy
YW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAg
ICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAg
ICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFy
YW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xp
bmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5k
LmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKworICAgICAgICAjIEFub255bW91cyBldmVudCBl
bnVtcy4KKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAg
aWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1l
LCBwYXJhbWV0ZXIpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKHNl
bGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRl
Y2xhcmF0aW9uKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IGRlY2xhcmF0aW9uLnR5cGUuZW51bV92
YWx1ZXMoKQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVt
X3ZhbHVlcykpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21f
cHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAgIHJl
dHVybiAnXG5cbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJl
cik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAg
IGVudW1fdmFsdWVzID0gbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKQorICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJv
dG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51
bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykK
KworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1l
dGVyKHNlbGYsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgorICAg
ICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fu
b255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVz
KCkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1
ZXMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3Rv
Y29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQorICAgICAgICByZXR1cm4g
J1xuXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1fb2JqY190b19wcm90
b2NvbF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKToKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2lubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyglcyB2YWx1ZSknICUgb2JqY19lbnVtX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHN3aXRjaCh2YWx1ZSkgeycpCisgICAg
ICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgY2FzZSAlcyVzOicgJSAob2JqY19lbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIlcyIpOycgJSBlbnVtX3ZhbHVlKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZW51
bV9mcm9tX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMp
OgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8Picp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnaW5saW5lICVzIGZyb21Qcm90b2NvbFN0cmluZyhTdHJp
bmcgdmFsdWUpJyAlIG9iamNfZW51bV9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQor
ICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3ZhbHVlczoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGlmICh2YWx1ZSA9PSAiJXMiKScgJSBlbnVtX3ZhbHVlKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiAlcyVzOycgJSAob2JqY19lbnVtX25hbWUs
IEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgcmV0dXJuICVzJXM7JyAlIChvYmpjX2VudW1fbmFtZSwgR2VuZXJh
dG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZXNbMF0pKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjgz
NmZhMDVmNzZkNTNhMGIyMDM4ZDUzMGFmZWVmNzA4MGZlMjJkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTUx
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcK
K2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0
IENwcEdlbmVyYXRvcgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAor
ZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBs
YXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBPYmpD
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2Vu
ZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJz
Lm1tJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBH
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9v
dXRwdXQoc2VsZik6CisgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAg
JyIlc0VudW1Db252ZXJzaW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAor
ICAgICAgICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFy
eUluY2x1ZGUnOiAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwK
KyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMn
ICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQor
CisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBz
ZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vu
c2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSW1w
bGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyhzZWxm
LCBkb21haW4pOgorICAgICAgICBpZiBub3QgZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIHJl
dHVybiAnJworCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgb2JqY19uYW1lID0gJyVzJXNE
b21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFp
bi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXMn
ICUgb2JqY19uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIXNlbGYpJykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBuaWw7JykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgQVNTRVJUKGNvbnRyb2xsZXIpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1
cm4gc2VsZjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50KGRvbWFpbiwgZXZlbnQpKQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudChz
ZWxmLCBkb21haW4sIGV2ZW50KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfc2lnbmF0dXJlKGRvbWFpbiwgZXZlbnQpKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZENoYW5uZWwoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWZyb250ZW5kQ2hh
bm5lbCknKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMg
PSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQg
T2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwg
ZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJl
ZF9wb2ludGVyX3BhcmFtZXRlcnM6CisgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0
b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisKKyAg
ICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0
ZXI6IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNf
cG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKKyAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50
aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVz
Iik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorCisgICAgICAgIGlmIHJlcXVpcmVkX3BvaW50
ZXJfcGFyYW1ldGVycyBvciBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlcy4lcyIpKTsnICUgKGRvbWFpbi5kb21h
aW5fbmFtZSwgZXZlbnQuZXZlbnRfbmFtZSkpCisgICAgICAgIGlmIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfb3V0
X3BhcmFtZXRlcnMoZG9tYWluLCBldmVudCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfc2lnbmF0dXJlKHNlbGYs
IGRvbWFpbiwgZXZlbnQpOgorICAgICAgICBpZiBub3QgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIHJldHVybiAnLSAodm9pZCklcycgJSBldmVudC5ldmVudF9uYW1lCisgICAg
ICAgIHBhaXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIE9i
akNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2ZW50LmV2ZW50X25hbWUs
IHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFp
cnNbMF0pCisgICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglcycgJSAoZXZlbnQuZXZlbnRf
bmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFy
YW1ldGVycyhzZWxmLCBkb21haW4sIGV2ZW50KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
ZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCisg
ICAgICAgICAgICB2YXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAg
ICAgc2FmZV92YXJfbmFtZSA9ICcoKiVzKScgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWwgZWxzZSB2YXJfbmFtZQorICAgICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBPYmpD
R2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBh
cmFtZXRlci50eXBlLCBzYWZlX3Zhcl9uYW1lKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwYXJhbXNP
YmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwg
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcyknICUgKHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIHBhcmFtc09iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXll
ZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9u
KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOycpCisgICAgICAgIHJldHVybiBsaW5l
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNTU2ZjQyZTlkMTNmOGY3ZmZkOGNiMjQ5ZmY3NWUxY2FkZWFkOTU0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIucHkKQEAgLTAsMCArMSwyMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20g
bW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZQorZnJvbSBvYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCitmcm9tIG9iamNfZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxh
dGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiBhZGRfbmV3
bGluZShsaW5lcyk6CisgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAgICAgICAg
cmV0dXJuCisgICAgbGluZXMuYXBwZW5kKCcnKQorCisKK2NsYXNzIE9iakNIZWFkZXJHZW5lcmF0
b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAn
JXMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAgICc8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPicsCisgICAgICAgIF0pCisKKyAgICAgICAg
aGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1w
b3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAg
fQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAg
ICB0eXBlX2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9t
YWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorICAgICAgICBjb21tYW5k
X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2Nv
bW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlucykKKyAgICAgICAgZXZl
bnRfZG9tYWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5f
ZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlucykKKworICAgICAg
ICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM4MjIyPiBXZWIgSW5zcGVjdG9yOiBS
ZWR1Y2UgdW5uZWNlc3NhcnkgZW51bXMvdHlwZXMgZ2VuZXJhdGVkIGluIE9iakMgUHJvdG9jb2wg
SW50ZXJmYWNlcworICAgICAgICAjIEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBlbnVtcy90eXBlcyBm
b3IgYWxsIHR5cGVzIGluIHRoZSB0eXBlX2RvbWFpbnMuIEZvciB0aGUgYnVpbHQtaW4KKyAgICAg
ICAgIyBKU0MgZG9tYWlucyAoRGVidWdnZXIsIFJ1bnRpbWUpIHRoaXMgcHJvZHVjZXMgZXh0cmEg
dW51c2VkIHR5cGVzLiBXZSBvbmx5IG5lZWQgdG8KKyAgICAgICAgIyBnZW5lcmF0ZSB0aGVzZSB0
eXBlcyBpZiB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBjb21tYW5kX2RvbWFpbnMgb3IgZXZl
bnRfZG9tYWlucy4KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9u
ZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMp
KSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChz
ZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZXMsIHR5
cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRl
cihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMsIGNvbW1hbmRfZG9t
YWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25l
LCBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVyUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSkpCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0
aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9t
YWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZGVjbGFy
YXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgICAgIG9iamNfbmFtZSA9IE9i
akNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUpCisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xhc3MgJXM7JyAlIG9iamNfbmFtZSkKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bXMoc2VsZiwg
ZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgICMgVHlwZSBlbnVtcyBhbmQg
bWVtYmVyIGVudW1zLgorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNs
YXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVt
YmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xp
bmUobGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1i
ZXIpKQorCisgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMuCisgICAgICAgIGZvciBj
b21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
Y29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShw
YXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6
CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1l
dGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwg
cGFyYW1ldGVyKSkKKworICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KKyAgICAgICAg
Zm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShw
YXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6
CisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlcikpCisKKyAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfdHlwZXMoc2VsZiwgZG9t
YWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICAjIFR5cGUgaW50ZXJmYWNlcy4KKyAg
ICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CisgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKGRvbWFpbiwgZGVjbGFyYXRpb24pKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6Cisg
ICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jf
YW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCisgICAgICAgIHJldHVybiBz
ZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlLmVudW1f
dmFsdWVzKCkpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIo
c2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgb2JqY19lbnVtX25h
bWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1i
ZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2Vu
dW0ob2JqY19lbnVtX25hbWUsIG1lbWJlci50eXBlLmVudW1fdmFsdWVzKCkpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgZG9tYWluLCBldmVu
dF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0g
T2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVy
KGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAgIHJldHVy
biBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1lLCBwYXJhbWV0ZXIudHlwZS5lbnVt
X3ZhbHVlcygpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9lbnVtKHNlbGYsIGVudW1fbmFtZSwgZW51
bV92YWx1ZXMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgndHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgJXMpIHsnICUgZW51bV9uYW1lKQorICAgICAgICBmb3Ig
ZW51bV92YWx1ZSBpbiBlbnVtX3ZhbHVlczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICVzJXMsJyAlIChlbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3Zh
bHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNl
KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IG9iamNfbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9u
LnR5cGUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlcyA6ICVzJyAlIChvYmpj
X25hbWUsIE9iakNHZW5lcmF0b3IuT0JKQ19KU09OX09CSkVDVF9CQVNFKSkKKyAgICAgICAgcmVx
dWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlv
bmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMg
PSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50
eXBlX21lbWJlcnMpCisgICAgICAgIGlmIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJl
cnMoZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycykpCisgICAgICAgIGZvciBt
ZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyog
cmVxdWlyZWQgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShkZWNsYXJhdGlv
biwgbWVtYmVyKSkKKyAgICAgICAgZm9yIG1lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiBvcHRpb25hbCAqLyAnICsgc2VsZi5fZ2VuZXJhdGVf
bWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ0BlbmQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAg
ICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBvYmpjX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIp
CisgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpj
X2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQorICAgICAgICAgICAgcGFpcnMuYXBwZW5k
KCclczooJXMpJXMnICUgKHZhcl9uYW1lLCBvYmpjX3R5cGUsIHZhcl9uYW1lKSkKKyAgICAgICAg
cGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQorICAgICAgICByZXR1cm4gJy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aCVzOycgJSAnICcuam9pbihwYWlycykKKworICAgIGRlZiBfZ2VuZXJhdGVf
bWVtYmVyX3Byb3BlcnR5KHNlbGYsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBhY2Nl
c3Nvcl90eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX21lbWJlciht
ZW1iZXIpCisgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9t
ZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgcmV0dXJuICdAcHJvcGVydHkgKG5v
bmF0b21pYywgJXMpICVzOycgJSAoYWNjZXNzb3JfdHlwZSwgam9pbl90eXBlX2FuZF9uYW1lKG9i
amNfdHlwZSwgT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1i
ZXIubWVtYmVyX25hbWUpKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMo
c2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBkb21haW4uY29t
bWFuZHM6CisgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnQHByb3RvY29sICVzIDxOU09iamVjdD4nICUgb2JqY19uYW1lKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAcmVxdWlyZWQnKQorICAgICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChkb21haW4sIGNvbW1hbmQpKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woc2VsZiwg
ZG9tYWluLCBjb21tYW5kKToKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICBwYWlycy5hcHBl
bmQoJ0Vycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
JykKKyAgICAgICAgcGFpcnMuYXBwZW5kKCdzdWNjZXNzQ2FsbGJhY2s6KCVzKXN1Y2Nlc3NDYWxs
YmFjaycgJSBzZWxmLl9jYWxsYmFja19ibG9ja19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQp
KQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAg
ICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0
ZXIpLCBwYXJhbV9uYW1lKSkKKyAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAo
Y29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKKworICAgIGRlZiBfY2FsbGJh
Y2tfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKKyAgICAgICAgcGFp
cnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYWlycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKE9iakNHZW5l
cmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBw
YXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm4gJ3Zv
aWQoXikoJXMpJyAlICcsICcuam9pbihwYWlycykKKworICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRf
aW50ZXJmYWNlcyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlm
IGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50
RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9u
YW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIDogTlNPYmplY3Qn
ICUgb2JqY19uYW1lKQorICAgICAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9p
bnRlcmZhY2UoZG9tYWluLCBldmVudCkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQn
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9z
aW5nbGVfZXZlbnRfaW50ZXJmYWNlKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgorICAgICAgICBpZiBu
b3QgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHJldHVybiAnLSAodm9pZCkl
czsnICUgZXZlbnQuZXZlbnRfbmFtZQorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgn
JXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFy
YW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKKyAg
ICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQorICAgICAgICByZXR1cm4gJy0gKHZv
aWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI1MDFhZDMyNDJiZGE1YTNhY2EwZTI2YmM3ODZkNDRiYTAyMTQwMDIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQpAQCAtMCwwICsxLDc1IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Citmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQor
CisKK2NsYXNzIE9iakNJbnRlcm5hbEhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclc0ludGVybmFsLmgnICUgT2JqQ0dl
bmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAg
ICAgICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnIiVzLmgiJyAlIE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnIlJXSVByb3RvY29sSlNPTk9iamVjdEludGVy
bmFsLmgiJywKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
JywKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+JywKKyAgICAgICAgXSkKKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVh
ZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0
ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJf
ZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkdlbmVyaWNIZWFkZXJQcmVs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9k
aXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuR2VuZXJpY0hlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJf
cHJpdmF0ZV9pbnRlcmZhY2VzKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAg
ICAgICAgaWYgZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9t
YWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4u
ZG9tYWluX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgKFBy
aXZhdGUpJyAlIG9iamNfbmFtZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVu
ZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTU0ZmVhMzZhOGRmODI5ZGZlZTI1YTk5NDIyZTIw
MjBlMDYxZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbi5weQpAQCAtMCwwICsxLDE1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisj
IENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKwor
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1w
b3J0IE9iamVjdFR5cGUKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IK
K2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CisKKworZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKKyAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFd
ID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBsaW5lcy5hcHBlbmQoJycpCisKKworY2xhc3Mg
T2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5l
cmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91
dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICclc1R5cGVzLm1tJyAlIE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYp
OgorICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBz
ZWNvbmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBl
cnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICc8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL0Fzc2VydGlv
bnMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCisgICAgICAgIF0KKwor
ICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICci
JXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAg
J3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAlcycgJSBoZWFkZXIgZm9y
IGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9t
YWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10K
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmV4dGVuZChtYXAoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9ucywgZG9tYWlucykp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkltcGxlbWVu
dGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAg
IHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV90eXBlX2lt
cGxlbWVudGF0aW9ucyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAg
ICBpZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkK
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV90eXBl
X2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzJyAlIE9iakNH
ZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUpKQorICAgICAgICBy
ZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0
aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgaWYgcmVxdWlyZWRfbWVt
YmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhkb21h
aW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKSkKKyAgICAgICAgZm9yIG1lbWJlciBp
biBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1i
ZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9nZXR0ZXJfZm9y
X21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJl
ZF9tZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpOgor
ICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVy
czoKKyAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9t
ZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dl
bmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUp
CisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAodmFyX25hbWUsIG9iamNf
dHlwZSwgdmFyX25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGglczsnICUgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3sn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0gW3N1cGVyIGluaXRdOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghc2VsZiknKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcmV0dXJuIG5pbDsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAg
ICAgcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IE9iakNH
ZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShtZW1iZXIudHlwZSksIHJlcXVpcmVk
X21lbWJlcnMpCisgICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfbWVtYmVyczoKKyAgICAgICAg
ICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzOgorICAgICAgICAgICAg
ICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmll
cihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSglcywgQCIlcyIpOycgJSAodmFy
X25hbWUsIHZhcl9uYW1lKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAg
ICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICB2YXJfbmFtZSA9
IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJl
cl9uYW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2VsZi4lcyA9ICVzOycgJSAo
dmFyX25hbWUsIHZhcl9uYW1lKSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRl
X3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcik6Cisg
ICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50
aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgc2V0
dGVyX21ldGhvZCA9IE9iakNHZW5lcmF0b3Iub2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIo
ZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgY29udmVyc2lvbl9leHByZXNzaW9uID0gT2Jq
Q0dlbmVyYXRvci5vYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyLCB2YXJfbmFtZSkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5l
cy5hcHBlbmQoJy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0KHZhcl9uYW1lKSwgb2Jq
Y190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJdOycgJSAoc2V0dGVyX21l
dGhvZCwgY29udmVyc2lvbl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0
aW9uLCBtZW1iZXIpOgorICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlw
ZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIHZhcl9uYW1lID0gT2Jq
Q0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25h
bWUpCisgICAgICAgIGdldHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVyX21l
dGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAgIGJhc2ljX2V4cHJl
c3Npb24gPSAnW3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhvZCwgbWVtYmVyLm1lbWJl
cl9uYW1lKQorICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLnBy
b3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIs
IGJhc2ljX2V4cHJlc3Npb24pCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBw
ZW5kKCctICglcyklcycgJSAob2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiAlczsnICUgY29udmVy
c2lvbl9leHByZXNzaW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3Rp
dmVfYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNWNkNWVlZGYwMThmMGRlZTYx
NzdiMmFlNzI3NmY2OGY2NzlhNTNlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weQorKysgL2Rldi9udWxsCkBAIC0xLDUxMSArMCww
IEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLWltcG9ydCBsb2dnaW5nCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKLQotbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotZGVmIGpvaW5fdHlwZV9hbmRfbmFtZSh0
eXBlX3N0ciwgbmFtZV9zdHIpOgotICAgIGlmIHR5cGVfc3RyLmVuZHN3aXRoKCcqJyk6Ci0gICAg
ICAgIHJldHVybiB0eXBlX3N0ciArIG5hbWVfc3RyCi0gICAgcmV0dXJuIHR5cGVfc3RyICsgJyAn
ICsgbmFtZV9zdHIKLQotCi1kZWYgc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKHN0cik6Ci0g
ICAgcmV0dXJuIHN0ci5yZXBsYWNlKCcvKicsICcnKS5yZXBsYWNlKCcqLycsICcnKQotCi0KLWRl
ZiByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKHN0ciwgcG9zc2libGVfZHVwbGljYXRlKToKLSAg
ICByZXR1cm4gc3RyLnJlcGxhY2UocG9zc2libGVfZHVwbGljYXRlICsgcG9zc2libGVfZHVwbGlj
YXRlLCBwb3NzaWJsZV9kdXBsaWNhdGUpCi0KLQotX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQ
ID0gewotICAgICd0aGlzJzogJ3RoaXNPYmplY3QnLCAgIyBEZWJ1Z2dlci5DYWxsRnJhbWUudGhp
cwotICAgICdkZXNjcmlwdGlvbic6ICdzdHJpbmdSZXByZXNlbnRhdGlvbicsICAjIFJ1bnRpbWUu
UmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uCi0gICAgJ2lkJzogJ2lkZW50aWZpZXInLCAgIyBQYWdl
LkZyYW1lLmlkLCBSdW50aW1lLkV4ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbi5pZCwgRGVidWdn
ZXIuQnJlYWtwb2ludEFjdGlvbi5pZAotfQotCi1fT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVO
QU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5USUZJRVJfUkVOQU1F
X01BUC5pdGVyaXRlbXMoKSkKLQotCi1jbGFzcyBPYmpDVHlwZUNhdGVnb3J5OgotICAgIFNpbXBs
ZSA9IDAKLSAgICBTdHJpbmcgPSAxCi0gICAgT2JqZWN0ID0gMgotICAgIEFycmF5ID0gMwotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjYXRlZ29yeV9mb3JfdHlwZShfdHlwZSk6Ci0gICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICBp
ZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdzdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVybiBP
YmpDVHlwZUNhdGVnb3J5LlN0cmluZwotICAgICAgICAgICAgaWYgIF90eXBlLnJhd19uYW1lKCkg
aW4gWydvYmplY3QnLCAnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0
ZWdvcnkuT2JqZWN0Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhcnJheSc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXkKLSAgICAgICAg
ICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZQotICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdv
cnkuT2JqZWN0Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAg
ICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LkFycmF5Ci0gICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBl
Q2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpD
VHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQotICAg
ICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIE9iakNHZW5lcmF0b3I6Ci0gICAgT0JKQ19QUkVG
SVggPSAnUldJUHJvdG9jb2wnCi0gICAgT0JKQ19KU09OX09CSkVDVF9CQVNFID0gJyVzSlNPTk9i
amVjdCcgJSBPQkpDX1BSRUZJWAotCi0gICAgIyBBZGp1c3QgaWRlbnRpZmllciBuYW1lcyB0aGF0
IGNvbGxpZGUgd2l0aCBPYmpDIGtleXdvcmRzLgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBpZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihuYW1lKToKLSAgICAgICAgcmV0dXJuIF9P
QkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5nZXQobmFtZSwgbmFtZSkKLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgb2JqY19pZGVudGlmaWVyX3RvX2lkZW50aWZpZXIobmFtZSk6Ci0gICAg
ICAgIHJldHVybiBfT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01BUC5nZXQobmFtZSwg
bmFtZSkKLQotICAgICMgR2VuZXJhdGUgT2JqQyB0eXBlcywgY29tbWFuZCBoYW5kbGVycywgYW5k
IGV2ZW50IGRpc3BhdGNoZXJzIGZvciBhIHN1YnNldCBvZiBkb21haW5zLgotCi0gICAgRE9NQUlO
U19UT19HRU5FUkFURSA9IFsnQ1NTJywgJ0RPTScsICdET01TdG9yYWdlJywgJ05ldHdvcmsnLCAn
UGFnZSddCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fdHlwZXNfZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fdHlwZXMoZG9tYWluKToKLSAgICAgICAgICAgIGlmIG1vZGVsLmZyYW1ld29yayBpcyBGcmFt
ZXdvcmtzLlRlc3Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIHdo
aXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUpCi0gICAgICAg
ICAgICB3aGl0ZWxpc3QudXBkYXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdnZXInLCAnUnVudGlt
ZSddKSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0
Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVy
X2ZpbHRlcihtb2RlbCk6Ci0gICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1h
bmRfaGFuZGxlcihkb21haW4pOgotICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZy
YW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAg
d2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKLSAgICAg
ICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0Ci0gICAgICAgIHJl
dHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcgotCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJf
ZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRf
ZGlzcGF0Y2hlcihkb21haW4pOgotICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZy
YW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAg
d2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKLSAgICAg
ICAgICAgIHdoaXRlbGlzdC5hZGQoJ0NvbnNvbGUnKQotICAgICAgICAgICAgcmV0dXJuIGRvbWFp
bi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKLSAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0
ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcgotCi0gICAgIyBPYmpDIGVudW0gYW5kIHR5cGUgbmFt
ZXMuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfbmFtZV9mb3JfdHlwZSh0eXBl
KToKLSAgICAgICAgbmFtZSA9IHR5cGUucXVhbGlmaWVkX25hbWUoKS5yZXBsYWNlKCcuJywgJycp
Ci0gICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIHR5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBv
YmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24p
OgotICAgICAgICBkb21haW5fbmFtZSA9IGRlY2xhcmF0aW9uLnR5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMnICUgKGRvbWFpbl9uYW1lLCBkZWNsYXJh
dGlvbi50eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zy
b21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1l
bWJlcik6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gbWVtYmVyLnR5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZQotICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25hbWUsIGRlY2xh
cmF0aW9uLnR5cGUucmF3X25hbWUoKSwgdWNmaXJzdChtZW1iZXIubWVtYmVyX25hbWUpKQotICAg
ICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkK
LSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1l
KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3JfYW5vbnlt
b3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0
ZXIpOgotICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21haW5fbmFtZQotICAgICAgICBu
YW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25hbWUsIHVjZmlyc3QoZXZlbnRfb3JfY29tbWFuZF9u
YW1lKSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBuYW1lID0g
cmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKLSAgICAgICAgcmV0
dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQotCi0gICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVt
KF90eXBlKToKLSAgICAgICAgZG9tYWluX25hbWUgPSBfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFp
bl9uYW1lCi0gICAgICAgIG5hbWUgPSBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpLnJlcGxhY2UoJy4n
LCAnJykKLSAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9t
YWluX25hbWUpCi0gICAgICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwgbmFtZSkKLQotICAgICMgTWlzY2VsbGFuZW91cyBuYW1lIGhhbmRsaW5nLgotICAgIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFp
bihkb21haW4pOgotICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21haW5fbmFtZQotICAg
ICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3aXRoKCdET00nKToKLSAgICAgICAgICAgIHJldHVy
biAnZG9tJyArIGRvbWFpbl9uYW1lWzM6XQotICAgICAgICBpZiBkb21haW5fbmFtZS5zdGFydHN3
aXRoKCdDU1MnKToKLSAgICAgICAgICAgIHJldHVybiAnY3NzJyArIGRvbWFpbl9uYW1lWzM6XQot
ICAgICAgICByZXR1cm4gZG9tYWluX25hbWVbOjFdLmxvd2VyKCkgKyBkb21haW5fbmFtZVsxOl0K
LQotICAgICMgVHlwZSBiYXNpY3MuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNf
YWNjZXNzb3JfdHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgotICAgICAgICBpZiByYXdfbmFt
ZSBpbiBbJ3N0cmluZycsICdhcnJheSddOgotICAgICAgICAgICAgcmV0dXJuICdjb3B5JwotICAg
ICAgICBpZiByYXdfbmFtZSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXToKLSAg
ICAgICAgICAgIHJldHVybiAnYXNzaWduJwotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScs
ICdvYmplY3QnXToKLSAgICAgICAgICAgIHJldHVybiAncmV0YWluJwotICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3R5cGVfZm9yX3Jhd19uYW1l
KHJhd19uYW1lKToKLSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0cmluZyc6Ci0gICAgICAgICAg
ICByZXR1cm4gJ05TU3RyaW5nIConCi0gICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJheSc6Ci0g
ICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkgKicKLSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2lu
dGVnZXInOgotICAgICAgICAgICAgcmV0dXJuICdpbnQnCi0gICAgICAgIGlmIHJhd19uYW1lIGlz
ICdudW1iZXInOgotICAgICAgICAgICAgcmV0dXJuICdkb3VibGUnCi0gICAgICAgIGlmIHJhd19u
YW1lIGlzICdib29sZWFuJzoKLSAgICAgICAgICAgIHJldHVybiAnQk9PTCcKLSAgICAgICAgaWYg
cmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAgICAgICByZXR1cm4gJyVzICon
ICUgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JBU0UKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19jbGFzc19mb3JfcmF3X25hbWUo
cmF3X25hbWUpOgotICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKLSAgICAgICAgICAg
IHJldHVybiAnTlNTdHJpbmcnCi0gICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJheSc6Ci0gICAg
ICAgICAgICByZXR1cm4gJ05TQXJyYXknCi0gICAgICAgIGlmIHJhd19uYW1lIGluIFsnaW50ZWdl
cicsICdudW1iZXInLCAnYm9vbGVhbiddOgotICAgICAgICAgICAgcmV0dXJuICdOU051bWJlcicK
LSAgICAgICAgaWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAgICAgICBy
ZXR1cm4gT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JBU0UKLSAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICMgRklYTUU6IENhbiB0aGVzZSBwcm90b2NvbF90eXBlIGZ1bmN0aW9ucyBi
ZSByZW1vdmVkIGluIGZhdm9yIG9mIEMrKyBnZW5lcmF0b3JzIGZ1bmN0aW9ucz8KLQotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9jb2xfdHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUp
OgotICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKLSAgICAgICAgICAgIHJldHVybiAn
U3RyaW5nJwotICAgICAgICBpZiByYXdfbmFtZSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2ludCcKLSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6Ci0gICAgICAgICAg
ICByZXR1cm4gJ2RvdWJsZScKLSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgotICAg
ICAgICAgICAgcmV0dXJuICdib29sJwotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdv
YmplY3QnXToKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yT2JqZWN0JwotICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcm90b2NvbF90eXBlX2Zv
cl90eXBlKF90eXBlKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAo
aXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9i
akNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkK
LSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2
ZV90eXBlKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlmIChp
c2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHN1Yl90eXBlID0gT2Jq
Q0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8JXM+JyAlIHN1Yl90
eXBlCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGlz
X3R5cGVfb2JqY19wb2ludGVyX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90
eXBlCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAg
ICAgICAgICByZXR1cm4gX3R5cGUucmF3X25hbWUoKSBpbiBbJ3N0cmluZycsICdhcnJheScsICdh
bnknLCAnb2JqZWN0J10KLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUs
IE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAg
ICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfY2xhc3Nf
Zm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCi0gICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4g
T2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQot
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3Jhd19uYW1lKF90eXBlLnByaW1pdGl2
ZV90eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5
cGUoX3R5cGUpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAg
ICAgICAgICAgIHN1Yl90eXBlID0gc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5l
cmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8nICUgc3ViX3R5cGUKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9t
ZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19hY2Nlc3Nv
cl90eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUpCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIG9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBl
KToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAg
ICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iu
b2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQotICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAn
YXNzaWduJwotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAg
ICAgICAgICAgcmV0dXJuICdyZXRhaW4nCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBB
cnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnY29weScKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY190eXBlX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlw
ZV9mb3JfbWVtYmVyX2ludGVybmFsKG1lbWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQot
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5h
bChfdHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAgICAg
ICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUu
cmF3X25hbWUoKSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6Ci0g
ICAgICAgICAgICBpZiAoX3R5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICByZXR1
cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5v
YmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKF90eXBlKQotICAgICAgICBpZiAo
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNH
ZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKF90eXBlKSArICcgKicKLSAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJp
cF9ibG9ja19jb21tZW50X21hcmtlcnMoT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBl
KF90eXBlLmVsZW1lbnRfdHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4q
LyAqJyAlIHN1Yl90eXBlCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIG9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlciwgcmVzcGVjdF9vcHRpb25hbD1UcnVlKToKLSAgICAgICAgb2JqY190eXBl
ID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtX2ludGVybmFsKHBhcmFtZXRlci50
eXBlLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQotICAgICAgICBp
ZiByZXNwZWN0X29wdGlvbmFsIGFuZCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAg
ICBpZiBvYmpjX3R5cGUuZW5kc3dpdGgoJyonKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb2Jq
Y190eXBlICsgJyonCi0gICAgICAgICAgICByZXR1cm4gb2JqY190eXBlICsgJyAqJwotICAgICAg
ICByZXR1cm4gb2JqY190eXBlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfdHlw
ZV9mb3JfcGFyYW1faW50ZXJuYWwoX3R5cGUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1l
LCBwYXJhbWV0ZXIpOgotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
KToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCi0gICAgICAgIGlmIChp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gT2Jq
Q0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCi0gICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5
cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9i
amNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9v
cl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5cGUpCi0gICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4g
T2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAqJwotICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBzdWJfdHlwZSA9
IHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9y
X3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKSkKLSAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8q
PCVzPiovIConICUgc3ViX3R5cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgT2JqQyA8
LT4gUHJvdG9jb2wgY29udmVyc2lvbiBmb3IgY29tbWFuZHMgYW5kIGV2ZW50cy4KLSAgICAjICAg
LSBjb252ZXJ0IGEgY29tbWFuZCBjYWxsIHBhcmFtZXRlciByZWNlaXZlZCBmcm9tIFByb3RvY29s
IHRvIE9iakMgZm9yIGhhbmRsZXIKLSAgICAjICAgLSBjb252ZXJ0IGEgY29tbWFuZCByZXR1cm4g
cGFyYW1ldGVyIGluIGNhbGxiYWNrIGJsb2NrIGZyb20gT2JqQyB0byBQcm90b2NvbCB0byBzZW5k
Ci0gICAgIyAgIC0gY29udmVydCBhbiBldmVudCBwYXJhbWV0ZXIgZnJvbSBPYmpDIEFQSSB0byBQ
cm90b2NvbCB0byBzZW5kCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfcHJvdG9j
b2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHZhcl90eXBlLCB2YXJfbmFtZSk6Ci0g
ICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZSh2YXJf
dHlwZSkKLSAgICAgICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBP
YmpDVHlwZUNhdGVnb3J5LlN0cmluZ106Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhcl90
eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICd0b1Byb3RvY29sU3RyaW5n
KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAgcmV0dXJuIHZhcl9uYW1lCi0gICAgICAgIGlm
IGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgotICAgICAgICAgICAgcmV0dXJu
ICdbJXMgdG9JbnNwZWN0b3JPYmplY3RdJyAlIHZhcl9uYW1lCi0gICAgICAgIGlmIGNhdGVnb3J5
IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6Ci0gICAgICAgICAgICBwcm90b2NvbF90eXBlID0g
T2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKHZhcl90eXBlLmVsZW1lbnRfdHlw
ZSkKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9y
X3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBlKQotICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlw
ZSA9PSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPic6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdBcnJheUFycmF5KCVzKScgJSB2YXJfbmFtZQotICAg
ICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAnU3RyaW5nJyBhbmQgb2JqY19jbGFzcyBpcyAn
TlNTdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yU3RyaW5nQXJyYXko
JXMpJyAlIHZhcl9uYW1lCi0gICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdpbnQnIGFu
ZCBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNw
ZWN0b3JJbnRlZ2VyQXJyYXkoJXMpJyAlIHZhcl9uYW1lCi0gICAgICAgICAgICBpZiBwcm90b2Nv
bF90eXBlIGlzICdkb3VibGUnIGFuZCBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JEb3VibGVBcnJheSglcyknICUgdmFyX25hbWUKLSAg
ICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yT2JqZWN0QXJyYXkoJXMpJyAlIHZhcl9uYW1lCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Np
b25fZm9yX21lbWJlcihuYW1lLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgaWYgaXNp
bnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgbWVtYmVyLnR5
cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3Ry
aW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91
c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKSwgbmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19l
bnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShtZW1iZXIudHlwZSksIG5hbWUpCi0gICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25f
Zm9yX3ZhcmlhYmxlKG1lbWJlci50eXBlLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0ZXIobmFtZSwg
ZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6Ci0gICAgICAgIGlmIGlz
aW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90
b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9h
bm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBh
cmFtZXRlciksIG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwl
cz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3Vz
X2VudW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQotICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRv
ci5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIu
dHlwZSwgbmFtZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19wcm90b2NvbF9p
bXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUodmFyX3R5cGUsIHZhcl9uYW1lKToKLSAgICAg
ICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKHZhcl90eXBl
KQotICAgICAgICBpZiBjYXRlZ29yeSBpbiBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNU
eXBlQ2F0ZWdvcnkuU3RyaW5nXToKLSAgICAgICAgICAgIHJldHVybiB2YXJfbmFtZQotICAgICAg
ICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdDoKLSAgICAgICAgICAgIG9i
amNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gJ1tbWyVzIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDol
c10gYXV0b3JlbGVhc2VdJyAlIChvYmpjX2NsYXNzLCB2YXJfbmFtZSkKLSAgICAgICAgaWYgY2F0
ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKLSAgICAgICAgICAgIG9iamNfY2xhc3Mg
PSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVudF90eXBl
KQotICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnb2JqY1N0cmluZ0FycmF5KCVzKScgJSB2YXJfbmFtZQotICAgICAgICAgICAg
aWYgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOiAgIyBGSVhNRTogSW50ZWdlciBvciBEb3VibGU/
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdvYmpjSW50ZWdlckFycmF5KCVzKScgJSB2YXJfbmFt
ZQotICAgICAgICAgICAgcmV0dXJuICdvYmpjQXJyYXk8JXM+KCVzKScgJSAob2JqY19jbGFzcywg
dmFyX25hbWUpCi0KLSAgICAjIE9iakMgPC0+IEpTT04gb2JqZWN0IGNvbnZlcnNpb24gZm9yIHR5
cGVzIGdldHRlcnMvc2V0dGVycy4KLSAgICAjICAgLSBjb252ZXJ0IGEgbWVtYmVyIHNldHRlciBm
cm9tIE9iakMgQVBJIHRvIEpTT04gb2JqZWN0IHNldHRlcgotICAgICMgICAtIGNvbnZlcnQgYSBt
ZW1iZXIgZ2V0dGVyIGZyb20gSlNPTiBvYmplY3QgdG8gT2JqQyBBUEkKLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgb2JqY190b19wcm90b2NvbF9leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlciwgc3ViX2V4cHJlc3Npb24pOgotICAgICAgICBjYXRlZ29yeSA9IE9i
akNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUobWVtYmVyLnR5cGUpCi0gICAgICAgIGlm
IGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5T
dHJpbmddOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUp
OgotICAgICAgICAgICAgICAgIHJldHVybiAndG9Qcm90b2NvbFN0cmluZyglcyknICUgc3ViX2V4
cHJlc3Npb24KLSAgICAgICAgICAgIHJldHVybiBzdWJfZXhwcmVzc2lvbgotICAgICAgICBpZiBj
YXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdDoKLSAgICAgICAgICAgIHJldHVybiBz
dWJfZXhwcmVzc2lvbgotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFy
cmF5OgotICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19m
b3JfdHlwZShtZW1iZXIudHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgICAgICBpZiBvYmpjX2Ns
YXNzIGlzICdOU1N0cmluZyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJp
bmdBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGlmIG9iamNfY2xhc3Mg
aXMgJ05TTnVtYmVyJzoKLSAgICAgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVy
YXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAg
ICAgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdkb3VibGUnOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJ2luc3BlY3RvckRvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lv
bgotICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9ySW50ZWdlckFycmF5KCVzKScgJSBz
dWJfZXhwcmVzc2lvbgotICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSgl
cyknICUgc3ViX2V4cHJlc3Npb24KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9j
b2xfdG9fb2JqY19leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciwgc3Vi
X2V4cHJlc3Npb24pOgotICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdv
cnlfZm9yX3R5cGUobWVtYmVyLnR5cGUpCi0gICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlw
ZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgotICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGlm
IG1lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdm
cm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBzdWJfZXhw
cmVzc2lvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4o
JXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2Vu
dW0obWVtYmVyLnR5cGUpLCBzdWJfZXhwcmVzc2lvbikKLSAgICAgICAgICAgIHJldHVybiBzdWJf
ZXhwcmVzc2lvbgotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVj
dDoKLSAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9t
ZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAgICAgIHJldHVybiAnKCVzKSVzJyAl
IChvYmpjX3R5cGUsIHN1Yl9leHByZXNzaW9uKQotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpD
VHlwZUNhdGVnb3J5LkFycmF5OgotICAgICAgICAgICAgcHJvdG9jb2xfdHlwZSA9IE9iakNHZW5l
cmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVtZW50X3R5cGUpCi0g
ICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBl
KG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMg
J05TU3RyaW5nJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNTdHJpbmdBcnJheSglcykn
ICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVy
JzoKLSAgICAgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgICAg
ICBpZiBwcm90b2NvbF90eXBlIGlzICdkb3VibGUnOgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJ29iamNEb3VibGVBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KLSAgICAgICAgICAgICAg
ICByZXR1cm4gJ29iamNJbnRlZ2VyQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCi0gICAgICAg
ICAgICByZXR1cm4gJ29iamNBcnJheTwlcz4oJXMpJyAlIChvYmpjX2NsYXNzLCBzdWJfZXhwcmVz
c2lvbikKLQotICAgICMgSlNPTiBvYmplY3Qgc2V0dGVyL2dldHRlciBzZWxlY3RvcnMgZm9yIHR5
cGVzLgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3NldHRlcl9tZXRob2RfZm9y
X21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0
b3Iub2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRl
Y2xhcmF0aW9uLCBtZW1iZXIpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfc2V0
dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVy
KToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAg
ICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAgICAgICAgICAgcmF3X25hbWUgPSBfdHlwZS5yYXdf
bmFtZSgpCi0gICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdzZXRCb29sJwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2ludGVn
ZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicKLSAgICAgICAgICAgIGlm
IHJhd19uYW1lIGlzICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0RG91Ymxl
JwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0cmluZyc6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdzZXRTdHJpbmcnCi0gICAgICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdv
YmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKLSAgICAgICAgICAg
IGlmIHJhd19uYW1lIGlzICdhcnJheSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnNw
ZWN0b3JBcnJheScKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRTdHJpbmcnCi0g
ICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ3NldE9iamVjdCcKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRJbnNwZWN0b3JBcnJheScKLSAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19nZXR0ZXJfbWV0aG9k
X2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIHJldHVybiBPYmpDR2Vu
ZXJhdG9yLm9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKG1lbWJlci50eXBl
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpj
X2dldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlwZSwgZGVjbGFyYXRpb24sIG1l
bWJlcik6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKLSAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAgICAgICAgICAgIHJhd19uYW1lID0gX3R5cGUu
cmF3X25hbWUoKQotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnYm9vbEZvcktleScKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlz
ICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2ludGVnZXJGb3JLZXknCi0gICAg
ICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4g
J2RvdWJsZUZvcktleScKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnc3RyaW5nRm9yS2V5JwotICAgICAgICAgICAgaWYgcmF3X25h
bWUgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdvYmplY3RG
b3JLZXknCi0gICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnYXJyYXknOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnaW5zcGVjdG9yQXJyYXlGb3JLZXknCi0gICAgICAgICAgICByZXR1cm4gTm9u
ZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiAnc3RyaW5nRm9yS2V5JwotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2Jq
ZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdvYmplY3RGb3JLZXknCi0gICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnaW5z
cGVjdG9yQXJyYXlGb3JLZXknCi0gICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpl
Y3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGJi
ZDBmZjU1NTBhOWVkMzI3ZDA2MmJlMWY0ODY5OThhZGZhOWZkMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFy
ZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0j
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotaW1wb3J0IHJlCi1mcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBn
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVz
Ci1mcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKLQotCi1jbGFzcyBPYmplY3RpdmVDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJl
dHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
Ci0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZp
bHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVy
X2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBb
Ci0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9SZXRhaW5QdHIuaD4nLAotICAgICAg
ICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaGVhZGVyR3VhcmRT
dHJpbmcnOiByZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCi0gICAg
ICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBo
ZWFkZXIgaW4gaGVhZGVyc10pLAotICAgICAgICAgICAgJ2ZvcndhcmREZWNsYXJhdGlvbnMnOiBz
ZWxmLl9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRpb25zKCksCi0gICAgICAgIH0KLQot
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2Vj
dGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRs
ZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNs
YXJhdGlvbnMoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWydAcHJvdG9jb2wgJXMlc0RvbWFpbkhh
bmRsZXI7JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUp
IGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCldCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdAY2xhc3MgJXMlc0RvbWFpbkhhbmRsZXI7JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKLSAgICAgICAgaWYgbm90IGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAg
ICAgIHJldHVybiAnJwotCi0gICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgY29tbWFuZF9k
ZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZChjb21tYW5kKSkKLQotICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Ci0gICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdj
b21tYW5kRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSwKLSAg
ICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFp
bkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3Mp
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVy
cyA9IFsnbG9uZyBjYWxsSWQnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycg
JSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRl
cihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgY29t
bWFuZF9hcmdzID0gewotICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5k
X25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwK
LSAgICAgICAgfQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21t
YW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSBvdmVycmlkZTsnICUgY29tbWFuZF9hcmdzKQotICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAzMjNlZDYwYTFlMjAzNDk1OTI2ZjA2MTM5NDljODRkMjNjNDM3MWVlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWlt
cG9ydCByZQotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2MgaW1wb3J0IE9iakNUeXBlQ2F0ZWdvcnksIE9iakNHZW5lcmF0b3IsIGpvaW5fdHlw
ZV9hbmRfbmFtZQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9t
IG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKLQotCi1jbGFzcyBPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1
cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLm1tJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgK
LQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmls
dGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJf
ZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYp
KQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgc2Vjb25kYXJ5X2hl
YWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUgT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwKLSAgICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAgICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdz
ID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0JhY2tlbmREaXNwYXRjaGVy
cy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ3NlY29uZGFy
eUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIg
aW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAg
IHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlv
bl9mb3JfZG9tYWluLCBkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25f
Zm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRz
OgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMg
PSBbXQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAg
ICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQotCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hh
bmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToK
LSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCdd
Ci0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKEdlbmVyYXRvci50eXBlX3N0
cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjb21t
YW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlcnMn
OiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCi0gICAgICAgICAgICAnc3VjY2Vzc0NhbGxiYWNrJzog
c2VsZi5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQp
LAotICAgICAgICAgICAgJ2NvbnZlcnNpb25zJzogc2VsZi5fZ2VuZXJhdGVfY29udmVyc2lvbnNf
Zm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSwKLSAgICAgICAgICAgICdpbnZvY2F0aW9uJzog
c2VsZi5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21h
aW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
RG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9h
cmdzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZChzZWxm
LCBkb21haW4sIGNvbW1hbmQpOgotICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAgICAgaWYgY29t
bWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpj
X3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikK
LSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19v
YmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAg
IHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNf
dHlwZSwgdmFyX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXiglcykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJz
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57JykKLQotICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJz
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLQotICAgICAg
ICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0
ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9v
YmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnMpCi0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1l
dGVyczoKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmll
cl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKLQotICAgICAg
ICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0
ZXI6IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNf
cG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykK
LSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJz
OgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3Rv
X29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKLQotICAgICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAg
ICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9m
b3JfdHlwZShwYXJhbWV0ZXIudHlwZSkKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNH
ZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKQotICAgICAgICAgICAgICAgIHZhcl9leHByZXNzaW9uID0gJyolcycgJSB2YXJfbmFt
ZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJfbmFtZQotICAgICAgICAgICAgICAg
IGV4cG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2V4cG9ydF9l
eHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgdmFyX2V4cHJlc3Npb24pCi0g
ICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoQVNDSUlMaXRl
cmFsKCIlcyIpLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOycpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgU3RyaW5nKCkp
OycpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3JfY29tbWFu
ZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlm
IGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQot
Ci0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAg
ICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQotICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFt
ZQotICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3Bh
cmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgRmFsc2UpCi0gICAg
ICAgICAgICBpbl9wYXJhbV9vcHRpb25hbF9zYWZlX25hbWUgPSAnKiVzJyAlIGluX3BhcmFtX25h
bWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgaW5fcGFyYW1fbmFtZQotICAgICAgICAg
ICAgaW1wb3J0X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0
X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihpbl9wYXJhbV9vcHRpb25hbF9zYWZlX25hbWUsIGRv
bWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAgICAgICAgIGlmIG5v
dCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgJXMgPSAlczsnICUgKGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFy
YW1fbmFtZSksIGltcG9ydF9leHByZXNzaW9uKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9hbmRfbmFtZShvYmpj
X3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJhbV9uYW1lLCBpbXBvcnRfZXhw
cmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRl
X2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAg
cGFpcnMgPSBbXQotICAgICAgICBwYWlycy5hcHBlbmQoJ1dpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2snKQotICAgICAgICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2snKQotICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKLSAgICAgICAgICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGlu
X3BhcmFtX25hbWUKLSAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycgJSAocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lLCBvYmpjX2luX3BhcmFtX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBvcHRpb25hbF9leHByZXNzaW9uID0gJyglcyA/ICYlcyA6IG5pbCknICUgKGluX3Bh
cmFtX25hbWUsIG9iamNfaW5fcGFyYW1fbmFtZSkKLSAgICAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIG9wdGlvbmFsX2V4cHJlc3Np
b24pKQotICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAlcyVzXTsnICUgKGNvbW1hbmQu
Y29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19j
b25maWd1cmF0aW9uX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVy
LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkZmFmOTdmZjIwOTk2ZjEyNzIzOWZh
NmE0ZjYwMTEyZmJlYjMxZjFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CisrKyAvZGV2L251
bGwKQEAgLTEsODYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdo
dCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAo
YykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
Ci0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5n
Ci1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5l
cmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JU
ZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQotCi0KLWNsYXNzIE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKEdlbmVy
YXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0g
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0K
LSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzQ29uZmln
dXJhdGlvbi5oJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKLQotICAgIGRlZiBnZW5lcmF0
ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVzLmgi
JyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAgICAgIF0KLQotICAgICAgICBoZWFk
ZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQg
JyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAg
IHNlbGYuX2NvbW1hbmRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9t
YWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQotICAgICAgICBzZWxmLl9l
dmVudF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRf
ZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hlYWRlclByZWx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyhkb21haW5zKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hl
YWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBy
ZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2NvbmZpZ3Vy
YXRpb25faW50ZXJmYWNlX2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgotICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSBSV0lQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdCcpCi0gICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAg
ICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9kb21h
aW4oZG9tYWluKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9t
YWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHByb3BlcnR5X2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICd2YXJpYWJsZU5h
bWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4o
ZG9tYWluKSwKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgZG9t
YWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29uZmlndXJhdGlvbkNvbW1h
bmRQcm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3BlcnR5X2FyZ3MpKQotICAgICAgICBp
ZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbmZpZ3VyYXRpb25FdmVu
dFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVydHlfYXJncykpCi0gICAgICAgIHJl
dHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU2ODk5NGM0YzJkZWQ3NTUxODc3OWI5Y2M2
Y2ViMDVmMDdlMWNiYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rl
di9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29w
eXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJp
Z2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxv
Z2dpbmcKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9t
IGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRv
ciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiAnJXNDb25maWd1cmF0aW9uLm1tJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgK
LQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIHNlY29uZGFyeV9oZWFk
ZXJzID0gWwotICAgICAgICAgICAgJyIlc0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsCi0gICAgICAgICAgICAnIiVzQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+JywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+JywKLSAgICAgICAgICAgICc8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+JywKLSAgICAg
ICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+JywK
LSAgICAgICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1h
cnlJbmNsdWRlJzogJyIlc0NvbmZpZ3VyYXRpb24uaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BS
RUZJWCwKLSAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBv
cnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKLSAgICAg
ICAgfQotCi0gICAgICAgIHNlbGYuX2NvbW1hbmRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQot
ICAgICAgICBzZWxmLl9ldmVudF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0
ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQotCi0gICAgICAg
IGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9
IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRp
b25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWlucyhkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5PYmpDSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAg
ZGVmIF9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5zKHNl
bGYsIGRvbWFpbnMpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
QGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbicpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7JykKLSAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYu
X2dlbmVyYXRlX2l2YXJzKGRvbWFpbnMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgc2VsZiA9IFtzdXBlciBpbml0XTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBpZiAoIXNlbGYpJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBuaWw7
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNvbnRyb2xsZXIpOycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gc2VsZjsnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmV4dGVuZChzZWxm
Ll9nZW5lcmF0ZV9kZWFsbG9jKGRvbWFpbnMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0g
ICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGlmIGRvbWFpbi5jb21t
YW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJfZm9yX2RvbWFpbihkb21h
aW4pKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGlmIGRv
bWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9m
b3JfZG9tYWluKGRvbWFpbikpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9pdmFycyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgbGlu
ZXMgPSBbXQotICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBpZiBk
b21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAg
ICAgICAgICAgb2JqY19jbGFzc19uYW1lID0gJyVzJXNEb21haW5IYW5kbGVyJyAlIChPYmpDR2Vu
ZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgICAgICAgICAg
aXZhcl9uYW1lID0gJ18lc0hhbmRsZXInICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3By
ZWZpeF9mb3JfZG9tYWluKGRvbWFpbikKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBpZDwlcz4gJXM7JyAlIChvYmpjX2NsYXNzX25hbWUsIGl2YXJfbmFtZSkpCi0gICAgICAgICAg
ICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKLSAgICAg
ICAgICAgICAgICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicg
JSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAg
ICAgICAgICAgIGl2YXJfbmFtZSA9ICdfJXNFdmVudERpc3BhdGNoZXInICUgT2JqQ0dlbmVyYXRv
ci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAlcyAqJXM7JyAlIChvYmpjX2NsYXNzX25hbWUsIGl2YXJfbmFt
ZSkpCi0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIF9nZW5lcmF0ZV9kZWFsbG9jKHNl
bGYsIGRvbWFpbnMpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
LSAodm9pZClkZWFsbG9jJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgZm9y
IGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBz
ZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFtfJXNIYW5kbGVyIHJlbGVhc2VdOycgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25h
bWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSkKLSAgICAgICAgICAgIGlmIGRvbWFpbi5ldmVu
dHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIFtfJXNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07JyAlIE9iakNHZW5lcmF0
b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBbc3VwZXIgZGVhbGxvY107JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfc2V0
dGVyX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgc2V0dGVyX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICd2
YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zv
cl9kb21haW4oZG9tYWluKSwKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNDb25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5SW1wbGVtZW50YXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipzZXR0ZXJfYXJncykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRf
ZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBnZXR0
ZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpD
X1BSRUZJWCwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAot
ICAgICAgICAgICAgJ3ZhcmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVf
bmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pLAotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbmZpZ3VyYXRpb25HZXR0ZXJJbXBsZW1lbnRhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmdldHRlcl9hcmdzKQotCi0gICAgZGVmIF92YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGRvbWFpbl9uYW1l
ID0gZG9tYWluLmRvbWFpbl9uYW1lCi0gICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgo
J0RPTScpOgotICAgICAgICAgICAgcmV0dXJuICdkb20nICsgZG9tYWluX25hbWVbMzpdCi0gICAg
ICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0NTUycpOgotICAgICAgICAgICAgcmV0dXJu
ICdjc3MnICsgZG9tYWluX25hbWVbMzpdCi0gICAgICAgIHJldHVybiBkb21haW5fbmFtZVs6MV0u
bG93ZXIoKSArIGRvbWFpbl9uYW1lWzE6XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVy
c2lvbl9oZWxwZXJzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjZjc1MjFhZGQxOTEwYzVhYjE1OGUyNTI1ZWYxZjVm
MTExOTRjMTg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1
NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBz
dHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRlX29iamVj
dGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQotCi1sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1kZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlm
IGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6Ci0gICAgICAgIHJldHVybgotICAgIGxpbmVzLmFw
cGVuZCgnJykKLQotCi1jbGFzcyBPYmplY3RpdmVDQ29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3Io
R2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRo
KToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNF
bnVtQ29udmVyc2lvbkhlbHBlcnMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAg
ICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihP
YmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKHNlbGYubW9k
ZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVycyA9IFsKLSAgICAgICAgICAgICci
JXNBcnJheUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgs
Ci0gICAgICAgIF0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdpbmNs
dWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRl
cnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5PYmpDQ29udmVyc2lvbkhlbHBlcnNQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLk9iakNDb252ZXJzaW9uSGVscGVyc1N0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQotICAg
ICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9m
dW5jdGlvbnMsIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNDb252ZXJzaW9uSGVscGVyc1Bvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAg
ICBkZWYgX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMoc2VsZiwgZG9tYWluKToK
LSAgICAgICAgbGluZXMgPSBbXQotCi0gICAgICAgICMgVHlwZSBlbnVtcyBhbmQgbWVtYmVyIGVu
dW1zLgotICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25z
OgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6
Ci0gICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2Rl
Y2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
bWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX21lbWJlcihkb21haW4sIGRl
Y2xhcmF0aW9uLCBtZW1iZXIpKQotCi0gICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMu
Ci0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKLSAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAg
aWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRf
bmFtZSwgcGFyYW1ldGVyKSkKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9y
X3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQotCi0g
ICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgotICAgICAgICBmb3IgZXZlbnQgaW4gZG9t
YWluLmV2ZW50czoKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFy
YW1ldGVyczoKLSAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAg
ICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRl
cihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlcikpCi0KLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29u
dmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6Ci0gICAg
ICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5v
bnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCi0gICAgICAgIGVudW1fdmFsdWVz
ID0gZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVlcygpCi0gICAgICAgIGxpbmVzID0gW10KLSAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190b19wcm90b2NvbF9z
dHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUs
IGVudW1fdmFsdWVzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxpbmVzKQotCi0gICAg
ZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoc2VsZiwg
ZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSBP
YmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAgZW51bV92YWx1ZXMgPSBtZW1iZXIudHlwZS5lbnVt
X3ZhbHVlcygpCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2VudW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVu
dW1fdmFsdWVzKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJv
bV9wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAg
cmV0dXJuICdcblxuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgZG9tYWluLCBldmVudF9vcl9jb21t
YW5kX25hbWUsIHBhcmFtZXRlcik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVy
YXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwg
ZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCi0gICAgICAgIGVudW1fdmFsdWVzID0g
cGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5n
KG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVt
X3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpjX2VudW1fbmFt
ZSwgZW51bV92YWx1ZXMpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKCVzIHZhbHVlKScgJSBvYmpjX2VudW1f
bmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgc3dpdGNoKHZhbHVlKSB7JykKLSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV92YWx1
ZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBjYXNlICVzJXM6JyAlIChvYmpjX2Vu
dW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZSkpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIiVzIik7JyAlIGVudW1fdmFsdWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKHNlbGYsIG9i
amNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCdpbmxpbmUg
JXMgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSknICUgb2JqY19lbnVtX25hbWUpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1f
dmFsdWVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKHZhbHVlID09ICIlcyIp
JyAlIGVudW1fdmFsdWUpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJu
ICVzJXM7JyAlIChvYmpjX2VudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2Vu
dW1fdmFsdWUoZW51bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gJXMlczsn
ICUgKG9iamNfZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1
ZShlbnVtX3ZhbHVlc1swXSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU2
NzJkYjdmZTZjOWIyNTBiMTk3MzBmMGY2MTNlMDg0ZGU2YjYzODYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0j
IS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWZyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9y
dCBPYmpDR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3Mg
T2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0g
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0K
LSAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzRXZlbnRE
aXNwYXRjaGVycy5tbScgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJh
dG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5t
b2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCi0KLSAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKLSAg
ICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLmg+JywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+JywKLSAgICAgICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAg
ICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsCi0gICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycj
aW1wb3J0ICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCi0g
ICAgICAgIH0KLQotICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkK
LSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucywgZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihz
ZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbnMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgaWYgbm90IGRvbWFpbi5ldmVudHM6Ci0gICAg
ICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIG9iamNfbmFt
ZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJF
RklYLCBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVu
dGF0aW9uICVzJyAlIG9iamNfbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIEFTU0VSVChjb250cm9sbGVyKTsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgcmV0dXJuIHNlbGY7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcnKQotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudChkb21haW4sIGV2ZW50
KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCdA
ZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJh
dGVfZXZlbnQoc2VsZiwgZG9tYWluLCBldmVudCk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X3NpZ25hdHVyZShkb21haW4sIGV2
ZW50KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRDaGFubmVsKCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFm
cm9udGVuZENoYW5uZWwpJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybjsn
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9w
YXJhbWV0ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0
ZXIudHlwZSksIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMpCi0gICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgdmFyX25hbWUgPSBP
YmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25h
bWUpKQotCi0gICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1i
ZGEgcGFyYW1ldGVyOiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNf
dHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSksIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnMpCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9f
b2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
UiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKLQotICAgICAgICBpZiByZXF1
aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJXMuJXMiKSk7JyAlIChk
b21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQotICAgICAgICBpZiBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRl
X2V2ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBmcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X3NpZ25h
dHVyZShzZWxmLCBkb21haW4sIGV2ZW50KToKLSAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3Bh
cmFtZXRlcnM6Ci0gICAgICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXMnICUgZXZlbnQuZXZlbnRf
bmFtZQotICAgICAgICBwYWlycyA9IFtdCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQu
ZXZlbnRfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJh
bV9uYW1lLCBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5l
dmVudF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgcGFpcnNbMF0gPSB1
Y2ZpcnN0KHBhaXJzWzBdKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXMnICUgKGV2
ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBhaXJzKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfZXZl
bnRfb3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9tYWluLCBldmVudCk6Ci0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQotICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBrZXllZF9zZXRf
bWV0aG9kID0gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5
cGUpCi0gICAgICAgICAgICB2YXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAg
ICAgICAgICAgc2FmZV92YXJfbmFtZSA9ICcoKiVzKScgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWwgZWxzZSB2YXJfbmFtZQotICAgICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24g
PSBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3Zhcmlh
YmxlKHBhcmFtZXRlci50eXBlLCBzYWZlX3Zhcl9uYW1lKQotICAgICAgICAgICAgaWYgbm90IHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBw
YXJhbXNPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21l
dGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcykn
ICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAl
IChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHBy
ZXNzaW9uKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOycpCi0gICAgICAgIHJldHVy
biBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2Nf
aGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkYmNlNTVmOGY5M2M0YTJl
NWMwMDNhMGU1NzA0ZDg5YTczMWUzNzZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0x
LDIyNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9y
dCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRlX29i
amVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKLWZyb20g
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMg
aW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQotCi0KLWRlZiBhZGRfbmV3bGluZShsaW5lcyk6Ci0gICAgaWYgbGluZXMgYW5kIGxp
bmVzWy0xXSA9PSAnJzoKLSAgICAgICAgcmV0dXJuCi0gICAgbGluZXMuYXBwZW5kKCcnKQotCi0K
LWNsYXNzIE9iamVjdGl2ZUNIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNf
UFJFRklYCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBoZWFkZXJz
ID0gc2V0KFsKLSAgICAgICAgICAgICc8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPicsCi0gICAgICAgIF0pCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBp
biBzb3J0ZWQoaGVhZGVycyldKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICB0eXBlX2RvbWFpbnMgPSBmaWx0ZXIoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBkb21haW5zKQotICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVy
YXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5t
b2RlbCgpKSwgZG9tYWlucykKLSAgICAgICAgZXZlbnRfZG9tYWlucyA9IGZpbHRlcihPYmpDR2Vu
ZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2Vs
Zi5tb2RlbCgpKSwgZG9tYWlucykKLQotICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTM4MjIyPiBXZWIgSW5zcGVjdG9yOiBSZWR1Y2UgdW5uZWNlc3NhcnkgZW51bXMvdHlw
ZXMgZ2VuZXJhdGVkIGluIE9iakMgUHJvdG9jb2wgSW50ZXJmYWNlcwotICAgICAgICAjIEN1cnJl
bnRseSB3ZSBnZW5lcmF0ZSBlbnVtcy90eXBlcyBmb3IgYWxsIHR5cGVzIGluIHRoZSB0eXBlX2Rv
bWFpbnMuIEZvciB0aGUgYnVpbHQtaW4KLSAgICAgICAgIyBKU0MgZG9tYWlucyAoRGVidWdnZXIs
IFJ1bnRpbWUpIHRoaXMgcHJvZHVjZXMgZXh0cmEgdW51c2VkIHR5cGVzLiBXZSBvbmx5IG5lZWQg
dG8KLSAgICAgICAgIyBnZW5lcmF0ZSB0aGVzZSB0eXBlcyBpZiB0aGV5IGFyZSByZWZlcmVuY2Vk
IGJ5IHRoZSBjb21tYW5kX2RvbWFpbnMgb3IgZXZlbnRfZG9tYWlucy4KLQotICAgICAgICBzZWN0
aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9k
b21haW5zKSkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25l
LCBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZXMsIHR5cGVfZG9tYWlucykpKSkKLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVf
Y29tbWFuZF9wcm90b2NvbHMsIGNvbW1hbmRfZG9tYWlucykpKSkKLSAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZXZlbnRf
aW50ZXJmYWNlcywgZXZlbnRfZG9tYWlucykpKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5PYmpDSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSkpCi0g
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
Zm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgotICAg
ICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgot
ICAgICAgICAgICAgICAgIG9iamNfbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90
eXBlKGRlY2xhcmF0aW9uLnR5cGUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xh
c3MgJXM7JyAlIG9iamNfbmFtZSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQot
ICAgIGRlZiBfZ2VuZXJhdGVfZW51bXMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgbGluZXMgPSBb
XQotCi0gICAgICAgICMgVHlwZSBlbnVtcyBhbmQgbWVtYmVyIGVudW1zLgotICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgotICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9u
KSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
bWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21l
bWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQotCi0gICAgICAgICMgQW5vbnltb3Vz
IGNvbW1hbmQgZW51bXMuCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoK
LSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFu
ZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFu
ZF9uYW1lLCBwYXJhbWV0ZXIpKQotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1l
dGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKLQotICAgICAgICAjIEFu
b255bW91cyBldmVudCBlbnVtcy4KLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6
Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFu
ZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25h
bWUsIHBhcmFtZXRlcikpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAg
IGRlZiBfZ2VuZXJhdGVfdHlwZXMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICAjIFR5cGUgaW50ZXJmYWNlcy4KLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRv
bWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFy
YXRpb24udHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGlu
ZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfaW50
ZXJmYWNlKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24o
c2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gT2Jq
Q0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24o
ZGVjbGFyYXRpb24pCi0gICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51
bV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCkpCi0KLSAgICBkZWYgX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwg
bWVtYmVyKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51
bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIG1lbWJlci50
eXBlLmVudW1fdmFsdWVzKCkpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zv
cl9wYXJhbWV0ZXIoc2VsZiwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRl
cik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNf
ZW51bV9uYW1lLCBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpKQotCi0gICAgZGVmIF9nZW5l
cmF0ZV9lbnVtKHNlbGYsIGVudW1fbmFtZSwgZW51bV92YWx1ZXMpOgotICAgICAgICBsaW5lcyA9
IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgJXMp
IHsnICUgZW51bV9uYW1lKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3ZhbHVlczoK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzJXMsJyAlIChlbnVtX25hbWUsIEdlbmVy
YXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAg
bGluZXMuYXBwZW5kKCd9OycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAg
ICBkZWYgX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24p
OgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIG9iamNfbmFtZSA9IE9iakNHZW5lcmF0b3Iu
b2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnQGludGVyZmFjZSAlcyA6ICVzJyAlIChvYmpjX25hbWUsIE9iakNHZW5lcmF0b3IuT0JKQ19K
U09OX09CSkVDVF9CQVNFKSkKLSAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1i
ZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJl
cnMpCi0gICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVt
YmVyLmlzX29wdGlvbmFsLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIGlmIHJl
cXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
aW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVx
dWlyZWRfbWVtYmVycykpCi0gICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogcmVxdWlyZWQgKi8gJyArIHNlbGYuX2dlbmVy
YXRlX21lbWJlcl9wcm9wZXJ0eShkZWNsYXJhdGlvbiwgbWVtYmVyKSkKLSAgICAgICAgZm9yIG1l
bWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiBv
cHRpb25hbCAqLyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9u
LCBtZW1iZXIpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVx
dWlyZWRfbWVtYmVycyhzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJz
KToKLSAgICAgICAgcGFpcnMgPSBbXQotICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21l
bWJlcnM6Ci0gICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9m
b3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgICAgICB2YXJfbmFtZSA9IE9i
akNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9u
YW1lKQotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHZhcl9uYW1lLCBv
YmpjX3R5cGUsIHZhcl9uYW1lKSkKLSAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBd
KQotICAgICAgICByZXR1cm4gJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aCVzOycgJSAnICcuam9p
bihwYWlycykKLQotICAgIGRlZiBfZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5KHNlbGYsIGRlY2xh
cmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBhY2Nlc3Nvcl90eXBlID0gT2JqQ0dlbmVyYXRvci5v
YmpjX2FjY2Vzc29yX3R5cGVfZm9yX21lbWJlcihtZW1iZXIpCi0gICAgICAgIG9iamNfdHlwZSA9
IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikK
LSAgICAgICAgcmV0dXJuICdAcHJvcGVydHkgKG5vbmF0b21pYywgJXMpICVzOycgJSAoYWNjZXNz
b3JfdHlwZSwgam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgT2JqQ0dlbmVyYXRvci5pZGVu
dGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpKSkKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfY29tbWFuZF9wcm90b2NvbHMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgbGlu
ZXMgPSBbXQotICAgICAgICBpZiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBvYmpjX25h
bWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRv
bWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQHByb3RvY29sICVz
IDxOU09iamVjdD4nICUgb2JqY19uYW1lKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAcmVx
dWlyZWQnKQotICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9w
cm90b2NvbChkb21haW4sIGNvbW1hbmQpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5k
JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
c2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woc2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAg
cGFpcnMgPSBbXQotICAgICAgICBwYWlycy5hcHBlbmQoJ0Vycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrJykKLSAgICAgICAgcGFpcnMuYXBwZW5kKCdz
dWNjZXNzQ2FsbGJhY2s6KCVzKXN1Y2Nlc3NDYWxsYmFjaycgJSBzZWxmLl9jYWxsYmFja19ibG9j
a19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQotICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMn
ICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAg
cmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5q
b2luKHBhaXJzKSkKLQotICAgIGRlZiBfY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwg
ZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAgcGFpcnMgPSBbXQotICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYWlycy5hcHBl
bmQoam9pbl90eXBlX2FuZF9uYW1lKE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShk
b21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ3ZvaWQoXikoJXMpJyAlICcsICcuam9pbihwYWly
cykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfaW50ZXJmYWNlcyhzZWxmLCBkb21haW4pOgot
ICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRvbWFpbi5ldmVudHM6Ci0gICAgICAgICAg
ICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRv
ci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdAaW50ZXJmYWNlICVzIDogTlNPYmplY3QnICUgb2JqY19uYW1lKQotICAgICAgICAgICAg
Zm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UoZG9tYWluLCBldmVudCkpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKHNlbGYs
IGRvbWFpbiwgZXZlbnQpOgotICAgICAgICBpZiBub3QgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
LSAgICAgICAgICAgIHJldHVybiAnLSAodm9pZCklczsnICUgZXZlbnQuZXZlbnRfbmFtZQotICAg
ICAgICBwYWlycyA9IFtdCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFy
YW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBP
YmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1l
LCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBh
aXJzWzBdKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVu
dF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5h
bF9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IGJhZGM4YzJiNjY1YWI0Njg5YmNiNWQ0ZGJlOTA1NmNjMjUwNjc2
N2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAot
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
VGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNz
IE9iamVjdGl2ZUNUeXBlc0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzSW50ZXJuYWwuaCcgJSBPYmpD
R2VuZXJhdG9yLk9CSkNfUFJFRklYCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgot
ICAgICAgICBoZWFkZXJzID0gc2V0KFsKLSAgICAgICAgICAgICciJXMuaCInICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICciUldJUHJvdG9jb2xKU09OT2JqZWN0SW50
ZXJuYWwuaCInLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4nLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4nLAotICAgICAgICBdKQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAg
ICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBo
ZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCi0gICAgICAgIH0KLQotICAgICAgICBkb21haW5z
ID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgZXZlbnRfZG9tYWlucyA9IGZp
bHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hl
cl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlucykKLQotICAgICAgICBzZWN0aW9ucyA9IFtd
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDR2VuZXJpY0hlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2V2ZW50
X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNHZW5lcmljSGVhZGVyUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAn
XG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hl
cl9wcml2YXRlX2ludGVyZmFjZXMoc2VsZiwgZG9tYWluKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBpZiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNE
b21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFp
bi5kb21haW5fbmFtZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlcyAo
UHJpdmF0ZSknICUgb2JqY19uYW1lKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcjsnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdA
ZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVj
dGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVt
ZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYxNjljNmZmMWE4MTli
ZDIzMmIzZmE0ZjcyZmM2MDdkN2FlY2VmNDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0j
IENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENv
cHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9y
dCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQot
ZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ0dlbmVyYXRvcgotZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBv
cnQgT2JqZWN0VHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1k
ZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6
Ci0gICAgICAgIHJldHVybgotICAgIGxpbmVzLmFwcGVuZCgnJykKLQotCi1jbGFzcyBPYmplY3Rp
dmVDVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxl
bmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc1R5cGVzLm1tJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAg
ICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBl
c19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsKLSAgICAgICAgICAgICciJXNFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCInICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+JywKLSAgICAgICAgICAgICc8d3RmL0Fzc2VydGlvbnMuaD4nLAot
ICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCi0gICAgICAgIF0KLQotICAgICAgICBo
ZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNJbnRlcm5h
bC5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ3NlY29uZGFy
eUluY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBp
biBzZWNvbmRhcnlfaGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAgICAgICAgZG9tYWlucyA9IHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9ucywgZG9tYWlucykpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVudGF0aW9uUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAn
XG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBnZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0
aW9ucyhzZWxmLCBkb21haW4pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBkZWNs
YXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiAoaXNp
bnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBnZW5lcmF0ZV90eXBlX2ltcGxlbWVu
dGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgotICAgICAgICBsaW5lcyA9IFtdCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzJyAlIE9iakNHZW5lcmF0b3Iu
b2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUpKQotICAgICAgICByZXF1aXJlZF9t
ZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVycykKLSAgICAgICAgaWYgcmVxdWlyZWRfbWVtYmVyczoKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4sIGRlY2xh
cmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKSkKLSAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJh
dGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1iZXIoZG9tYWlu
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihk
b21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJz
KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpOgotICAgICAgICBw
YWlycyA9IFtdCi0gICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKLSAgICAg
ICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5p
ZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCi0gICAgICAg
ICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAodmFyX25hbWUsIG9iamNfdHlwZSwgdmFy
X25hbWUpKQotICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCi0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGgl
czsnICUgJyAnLmpvaW4ocGFpcnMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0gW3N1cGVyIGluaXRdOycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGlmICghc2VsZiknKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
cmV0dXJuIG5pbDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAgcmVxdWly
ZWRfcG9pbnRlcl9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IE9iakNHZW5lcmF0b3Iu
aXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShtZW1iZXIudHlwZSksIHJlcXVpcmVkX21lbWJlcnMp
Ci0gICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfbWVtYmVyczoKLSAgICAgICAgICAgIGZvciBt
ZW1iZXIgaW4gcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzOgotICAgICAgICAgICAgICAgIHZhcl9u
YW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIu
bWVtYmVyX25hbWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZh
cl9uYW1lKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAgICBmb3IgbWVt
YmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5l
cmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2VsZi4lcyA9ICVzOycgJSAodmFyX25hbWUs
IHZhcl9uYW1lKSkKLQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIHJldHVybiBzZWxmOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3NldHRlcl9m
b3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIG9i
amNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24s
IG1lbWJlcikKLSAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9f
b2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKLSAgICAgICAgc2V0dGVyX21ldGhv
ZCA9IE9iakNHZW5lcmF0b3Iub2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFyYXRp
b24sIG1lbWJlcikKLSAgICAgICAgY29udmVyc2lvbl9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVt
YmVyLCB2YXJfbmFtZSkKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQo
Jy0gKHZvaWQpc2V0JXM6KCVzKSVzJyAlICh1Y2ZpcnN0KHZhcl9uYW1lKSwgb2JqY190eXBlLCB2
YXJfbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFtzdXBlciAlczolcyBmb3JLZXk6QCIlcyJdOycgJSAoc2V0dGVyX21ldGhvZCwgY29u
dmVyc2lvbl9leHByZXNzaW9uLCBtZW1iZXIubWVtYmVyX25hbWUpKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1i
ZXIpOgotICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVt
YmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCi0gICAg
ICAgIGdldHRlcl9tZXRob2QgPSBPYmpDR2VuZXJhdG9yLm9iamNfZ2V0dGVyX21ldGhvZF9mb3Jf
bWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0gICAgICAgIGJhc2ljX2V4cHJlc3Npb24gPSAn
W3N1cGVyICVzOkAiJXMiXScgJSAoZ2V0dGVyX21ldGhvZCwgbWVtYmVyLm1lbWJlcl9uYW1lKQot
ICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3Rv
X29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIGJhc2ljX2V4
cHJlc3Npb24pCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCctICgl
cyklcycgJSAob2JqY190eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgneycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiAlczsnICUgY29udmVyc2lvbl9leHBy
ZXNzaW9uKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9j
b2xfdHlwZXNfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0N2I0Mzgy
M2IzMTYxMjI1MDFmMzBlZmRhMDZmMzdkYjgxOGZmZjBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgL2Rl
di9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29w
eXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJp
Z2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxv
Z2dpbmcKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBs
YXRlCi0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwot
ZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRpdmVUeXBlLCBB
bGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBGcmFtZXdvcmtzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoR2Vu
ZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToK
LSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkK
LQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiSW5zcGVj
dG9yUHJvdG9jb2xPYmplY3RzLmgiCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgot
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2Vs
Zi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKLQot
ICAgICAgICBoZWFkZXJzID0gc2V0KFsKLSAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4nLAotICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5oPicsCi0g
ICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JwotICAgICAgICBdKQotCi0gICAgICAgIGV4
cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3Jv
JywgTm9uZSkKLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdoZWFkZXJH
dWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwK
LSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIg
Zm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKLSAgICAgICAgICAgICd0eXBlZGVmcyc6
ICcnLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuX3R5cGUgPSAnU3RyaW5nJwotICAgICAg
ICByZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyA9IFtyZXR1cm5fdHlwZV0KLSAgICAgICAg
aWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuX3R5cGVfd2l0
aF9leHBvcnRfbWFjcm9bOjBdID0gW2V4cG9ydF9tYWNyb10KLQotICAgICAgICBzZWN0aW9ucyA9
IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQcmVsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ25hbWVzcGFjZSBQcm90b2NvbCB7JykKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnMoZG9tYWlucykpCi0gICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnJXMgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOycgJSAnICcuam9p
bihyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG4nLmpvaW4oWwotICAgICAgICAgICAgJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+ICVzIGdldEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKScgJSByZXR1cm5fdHlwZSwKLSAgICAgICAgICAg
ICd7JywKLSAgICAgICAgICAgICcgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7JywKLSAgICAgICAgICAgICd9J10pKQotCi0gICAgICAg
IGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFp
biwgZG9tYWlucykKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlv
bjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190
cmFpdHMoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bCcpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVy
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVy
biAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBtZXRob2RzLgotCi0gICAg
IyBGSVhNRTogbW92ZSBidWlsZGVycyBvdXQgb2YgY2xhc3NlcywgdW5jb21tZW50IGZvcndhcmQg
ZGVjbGFyYXRpb24KLQotICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2Vs
ZiwgZG9tYWlucyk6Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLQotICAgICAgICBmb3IgZG9tYWlu
IGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUg
Zm9yIGRlY2wgaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zXQotICAgICAgICAgICAgb2JqZWN0
X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlw
ZSksIGRlY2xhcmF0aW9uX3R5cGVzKQotICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihs
YW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlw
ZXMpCi0gICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxlbihlbnVtX3R5cGVzKSA9
PSAwOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGRvbWFpbl9saW5l
cyA9IFtdCi0gICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycg
JSBkb21haW4uZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgIG9iamVjdF90eXBlX25hbWVzID0g
W190eXBlLnJhd19uYW1lKCkgZm9yIF90eXBlIGluIG9iamVjdF90eXBlc10KLSAgICAgICAgICAg
IGVudW1fdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBlbnVtX3R5
cGVzXQotCi0gICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFyZSBhbGwgY2xhc3NlcyBzbyB0aGUg
dHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFycmFuZ2VkLgotICAgICAgICAgICAgZG9t
YWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKG9i
amVjdF90eXBlX25hbWVzKSkKLSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2VudW0g
Y2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKGVudW1fdHlwZV9uYW1lcykpCi0g
ICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5f
bmFtZSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQotCi0gICAgICAgIGlm
IGxlbihzZWN0aW9ucykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotJXMKLS8v
IEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25z
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKLSAgICAgICAg
c2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykKLSAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAs
IHNlY3Rpb25zKQotCi0gICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKLSAgICAgICAgICAg
IHJldHVybiAnJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICIiIi8vIFR5cGVk
ZWZzLgotJXMKLS8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykK
LQotICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgot
ICAgICAgICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2lu
c3RhbmNlKGRlY2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMp
Ci0gICAgICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwOgotICAgICAgICAg
ICAgcmV0dXJuICcnCi0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBmb3IgZGVjbGFy
YXRpb24gaW4gcHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKLSAgICAgICAgICAgIHByaW1pdGl2ZV9u
YW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShkZWNsYXJhdGlvbi50
eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgICAgIHR5cGVkZWZfbGluZXMgPSBbXQotICAgICAg
ICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6Ci0gICAgICAgICAgICAg
ICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0
aW9uKQotICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAl
IChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAgICAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCi0KLSAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21h
aW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNlY3Rpb25zKSkKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpv
aW4obGluZXMpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLQotICAgICAgICBmb3IgdHlwZV9kZWNs
YXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRp
b24odHlwZV9kZWNsYXJhdGlvbikpCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZV9k
ZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2Rl
Y2xhcmF0aW9uLCBkb21haW4pKQotCi0gICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSBz
ZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9ucykKLSAgICAgICAgaWYgbGVuKHNlY3Rp
b25zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVz
KSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxm
LCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgotICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAg
ICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogaXNpbnN0YW5jZShtZW1iZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMsIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxh
bWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzKQotICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1i
ZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0g
ICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKLQotICAgICAg
ICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9u
KSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVjbGFy
YXRpb24uZGVzY3JpcHRpb24pCi0gICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QnCi0gICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVs
ZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKLSAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNl
X2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMg
JXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
J3B1YmxpYzonKQotICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBc
JyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBv
YmplY3RfbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3Ry
dWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51bV9tZW1iZXIpKQotICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVjbGFyYXRp
b24pKQotCi0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQotICAgICAgICBjb25zdHJ1
Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0
ZSgpJyAlIChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUpKQotICAgICAgICBmb3IgbWVtYmVyIGlu
IHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVu
ZCgnICAgICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2ZpcnN0KG1lbWJlci5tZW1iZXJfbmFtZSkp
Ci0KLSAgICAgICAgYnVpbGRlcl9hcmdzID0gewotICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBv
YmplY3RfbmFtZSwKLSAgICAgICAgICAgICdjb25zdHJ1Y3RvckV4YW1wbGUnOiAnXG4nLmpvaW4o
Y29uc3RydWN0b3JfZXhhbXBsZSkgKyAnOycsCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLlByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9u
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCi0gICAgICAgIGZvciB0
eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlwZV9tZW1iZXIsIGRv
bWFpbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuUHJvdG9jb2xP
YmplY3RCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxk
ZXJfYXJncykpCi0gICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKLSAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9t
ZW1iZXIobWVtYmVyLCBkb21haW4pKQotCi0gICAgICAgIGlmIEdlbmVyYXRvci50eXBlX2hhc19v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gUHJvcGVydHkgbmFtZXMg
Zm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKLSAgICAgICAgICAgIGZvciB0eXBlX21lbWJl
ciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAgICAgICAgICAgICBleHBv
cnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycs
IE5vbmUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0
IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lKSkpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJh
dGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgot
ICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51
bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKLSAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dl
bmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBl
bnVtX2RlY2xhcmF0aW9uLnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihzZWxm
LCBlbnVtX21lbWJlcik6Ci0gICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5lKToKLSAg
ICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8nLCAnLy8nKSkgb3Ig
bGVuKGxpbmUpIGlzIDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKLQotICAgICAgICBp
bmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3Ry
dWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5
cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQotCi0gICAgZGVm
IF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVudW1fdHlw
ZSk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZW51bV9uYW1lID0gdWNmaXJzdChlbnVt
X25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7JyAlIGVudW1fbmFt
ZSkKLSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1fdmFsdWVzKCk6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2VuZXJhdG9yLnN0eWxp
emVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2Vu
dW1fdmFsdWUoZW51bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ307IC8vIGVudW0g
Y2xhc3MgJXMnICUgZW51bV9uYW1lKQotICAgICAgICByZXR1cm4gbGluZXMgICMgVGhlIGNhbGxl
ciBtYXkgd2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpvaW4gdGhlc2UgbGlu
ZXMuCi0KLSAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShzZWxmLCB0eXBlX2Rl
Y2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICByZXF1aXJlZF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCi0KLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwnKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVxdWly
ZWRfbWVtYmVycykpOgotICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0
KHJlcXVpcmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCi0gICAgICAgICAgICBlbnVtX3ZhbHVl
cy5hcHBlbmQoZW51bV92YWx1ZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAl
cyA9IDEgPDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKLSAgICAgICAgaWYgbGVuKGVudW1fdmFs
dWVzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRzU2V0
ID0gKCVzKScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAwJykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgfTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0
dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6Ci0gICAgICAgIHNldHRl
cl9hcmdzID0gewotICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIu
bWVtYmVyX25hbWUpLAotICAgICAgICAgICAgJ2tleWVkU2V0JzogR2VuZXJhdG9yLmtleWVkX3Nl
dF9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBH
ZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQotICAgICAg
ICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5hbWUpc1Nl
dD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9h
cmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgeycpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNT
ZXQpLCBwcm9wZXJ0eV8lKG5hbWUpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQotCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXllZFNldClzKEFT
Q0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0
YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0
LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRl
cl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICB9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAg
IGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVt
YmVyLCBkb21haW4pOgotICAgICAgICBzZXR0ZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdjYW1l
bE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKLSAgICAgICAgICAgICdr
ZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpLAotICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAg
ICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBl
X21lbWJlcih0eXBlX21lbWJlcikKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkIHNl
dCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBl
X21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1l
KXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNl
dClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0ZXJfYXJncykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5n
X3RyYWl0cyhzZWxmKToKLSAgICAgICAgIyBBIGxpc3Qgb2YgKGJ1aWxkZXJfdHlwZSwgbmVlZHNf
cnVudGltZV9jYXN0KQotICAgICAgICB0eXBlX2FyZ3VtZW50cyA9IFtdCi0KLSAgICAgICAgZm9y
IGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKLSAgICAgICAgICAgIGRlY2xh
cmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRz
X3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQot
Ci0gICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2Vu
ZXJhdGU6Ci0gICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVf
bWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJn
dW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlX21l
bWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKLQotICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToK
LSAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChHZW5lcmF0b3IucHJv
dG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUodHlwZV9kZWNsYXJhdGlvbi50eXBlKSwgR2VuZXJh
dG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSkKLQot
ICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBbJ3N0cnVjdCddCi0gICAgICAgIGZ1bmN0aW9uX2tl
eXdvcmRzID0gWydzdGF0aWMgdm9pZCddCi0gICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKLSAgICAgICAgaWYg
ZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc3RydWN0X2tleXdvcmRzLmFw
cGVuZChleHBvcnRfbWFjcm8pCi0gICAgICAgICAgICAjZnVuY3Rpb25fa2V5d29yZHNbMToxXSA9
IFtleHBvcnRfbWFjcm9dCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgYXJndW1l
bnQgaW4gdHlwZV9hcmd1bWVudHM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRl
PD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpvaW4oc3RydWN0X2tleXdvcmRzKSwg
YXJndW1lbnRbMF0pKQotICAgICAgICAgICAgaWYgYXJndW1lbnRbMV06Ci0gICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGltZUNhc3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IGQ4M2JhMTI0Yjg0OGZhOGZiYmYzY2YxMmI1Y2VmNzQyN2E4ZDZlZWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUs
IE9iamVjdFR5cGUKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xh
c3MgUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5jcHAiCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBkb21h
aW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VsZi5jYWxjdWxhdGVf
dHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKLQotICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQotCi0gICAgICAgIGhlYWRl
cl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JQcm90
b2NvbE9iamVjdHMuaCInLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5q
b2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRl
cnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3Bh
Y2UgUHJvdG9jb2wgeycpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9l
bnVtX21hcHBpbmcoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29w
ZW5fZmllbGRfbmFtZXMoKSkKLSAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9n
ZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucy5l
eHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3Nl
Y3Rpb25zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bCcpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVt
ZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLQotICAg
ICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICAjIFByaXZhdGUgbWV0aG9k
cy4KLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgotICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKLSAgICAgICAgbGluZXMuZXh0ZW5kKFsnICAgICIl
cyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gc2VsZi5hc3NpZ25lZF9lbnVtX3Zh
bHVlcygpXSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCdTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gZW51bV9jb25z
dGFudF92YWx1ZXNbY29kZV07JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9u
YW1lcyhzZWxmKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgZG9tYWluIGluIHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRp
b24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMo
ZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKToKLSAgICAgICAgICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzLCBr
ZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKLSAgICAgICAgICAgICAgICAg
ICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFp
bi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmly
c3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpCi0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAg
IGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAg
ICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRl
cihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBl
KSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQotCi0gICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKLSAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0
eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFy
YXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0gICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5
cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAg
ICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCi0KLSAgICAgICAgcmV0dXJu
ICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3Rf
Zm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAg
ICBhcmdzID0gewotICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpCi0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVD
YXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0
aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAg
ICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVy
LmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBv
cHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25h
bCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKLSAgICAgICAgc2hvdWxkX2NvdW50
X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKG9iamVjdF9k
ZWNsYXJhdGlvbi50eXBlKQotICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBC
aW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdf
Zm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5k
KCIiInsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIpCi0gICAgICAgIGZvciB0eXBlX21lbWJl
ciBpbiByZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAg
ICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9t
ZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFs
KCIlKG1lbWJlck5hbWUpcyIpKTsKLSAgICAgICAgQVNTRVJUKCUobWVtYmVyTmFtZSlzUG9zICE9
IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFtZSlz
UG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfSIiIiAlIGFyZ3MpCi0KLSAgICAgICAgaWYgc2hvdWxk
X2NvdW50X3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUg
bGVuKHJlcXVpcmVkX21lbWJlcnMpKQotCi0gICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBvcHRp
b25hbF9tZW1iZXJzOgotICAgICAgICAgICAgYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnbWVt
YmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3Nl
cnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlw
ZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCIiIiAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0
b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIlKG1lbWJl
ck5hbWUpcyIpKTsKLSAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZh
bHVlLmdldCgpKTsiIiIgJSBhcmdzKQotCi0gICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJv
cGVydGllczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9
JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotCi0gICAgICAgIGlmIHNob3Vs
ZF9jb3VudF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKScpCi0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6
ICVzXFxuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBk
ZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmlu
ZyByZXN1bHQ7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
QVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCi0KLSAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcg
fHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyInICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBp
biBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCldKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0aW9uKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
JykKLQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
LnB5CmluZGV4IDhkNGE1ZGFlNzAyNTZhYWM2ODk3YmIzMTYzZDVjYTZlZmJlY2Y2NWYuLjQ0NDUw
ZmNkNDVhODA0YmM1MmZjYzM1MTdjM2VmYzBlZGJhNTBhMjAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHkKQEAgLTM4LDE1ICszOCw2IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQogZGVmIHVjZmlyc3Qoc3RyKToKICAgICByZXR1cm4gc3RyWzoxXS51cHBlcigpICsgc3RyWzE6
XQogCi1fUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKLSAgICAnYm9vbGVhbic6ICdib29s
JywKLSAgICAnaW50ZWdlcic6ICdpbnQnLAotICAgICdudW1iZXInOiAnZG91YmxlJywKLSAgICAn
c3RyaW5nJzogJ1N0cmluZycsCi0gICAgJ29iamVjdCc6ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCcsCi0gICAgJ2FueSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlJwotfQotCiBfQUxX
QVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdTID0gc2V0KFsnQVBJJywgJ0NTUycs
ICdET00nLCAnSFRNTCcsICdYSFInLCAnWE1MJ10pCiAKICMgVGhlc2Ugb2JqZWN0cyBhcmUgYnVp
bHQgbWFudWFsbHkgYnkgY3JlYXRpbmcgYW5kIHNldHRpbmcgSW5zcGVjdG9yVmFsdWVzLgpAQCAt
MjMxLDI0OSArMjIyLDYgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICByZXR1cm4gcmUuc3Vi
KHJlLmNvbXBpbGUocmVnZXgsIHJlLklHTk9SRUNBU0UpLCByZXBsYWNlQ2FsbGJhY2ssICIiLmpv
aW4oc3Vid29yZHMpKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBrZXllZF9nZXRfbWV0
aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnZ2V0QXJyYXknCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdnZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdudW1i
ZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJwotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhbnknOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0
VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0JyAr
IHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9nZXRfbWV0
aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9nZXRf
bWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBrZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldE9i
amVjdCcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAg
ICAgIHJldHVybiAnc2V0QXJyYXknCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBf
dHlwZS5yYXdfbmFtZSgpIGlzICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0
RG91YmxlJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhbnknOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkK
LSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0
dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90
eXBlKQotCi0gICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgdmFyaW91cyBz
aXR1YXRpb25zLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvdG9jb2xfdHlwZV9zdHJp
bmdfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAo
T2JqZWN0VHlwZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4g
J0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21h
aW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8JXM+JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZS5l
bGVtZW50X3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb3RvY29sX3R5cGVfc3Ry
aW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVf
bWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICc6Oicuam9pbihb
R2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlv
bi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3Jf
dHlwZSh0eXBlX21lbWJlci50eXBlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBl
X3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAg
IyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCi0KLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgotCi0gICAgICAgIHNpZ2lsID0g
JyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJwotICAgICAgICAjIFRoaXMgaGFu
ZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVydGllcy4K
LSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlm
aWVkX25hbWUoKSBpcyAnb2JqZWN0JzoKLSAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicgKyBzaWdpbAotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4nICsgc2lnaWwKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRv
ci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUg
Y3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ3N0cmluZydd
OgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJl
dHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcl90eXBlIgotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfZXZl
bnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIHJldHVybiBHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6Ci0gICAgICAgIHJldHVy
biBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKG1lbWJlci50eXBlLCBt
ZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB0
eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFtZSwgaXNfb3B0aW9u
YWwpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBl
KSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci5wcm90
b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gR2VuZXJhdG9y
LnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgaXNf
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgYnVp
bGRlcl90eXBlCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUp
Ci0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgYnVpbGRl
cl90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVy
X3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAg
ICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUo
X3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0
J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBb
J2FueSddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPicKLSAgICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
aWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAg
IHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAg
ICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5cGVfbmFtZSkKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSAnSW5zcGVjdG9yOjpQcm90b2Nv
bDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdf
bmFtZSgpKQotCi0gICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJyVzKicgJSBlbnVtX3R5cGVfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCi0KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIp
OgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0KLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChP
YmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYn
ICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9u
YW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Ikluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1lCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCi0gICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBl
LmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3RvciVzQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMqJyAl
IChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQotCi0g
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9ybWFsIG91dCBwYXJhbWV0ZXIgdHlw
ZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNsaWdodGx5IGRpZmZlcmVudCBmcm9t
IG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZpZWQuCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0
ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0gICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZh
bGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwg
QXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVy
YXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmlu
ZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIp
Ci0KLSAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2Ug
dGhleSBjb3VsZCBiZSBwYXNzZWQKLSAgICAjICJvcGVuIHR5cGVzIiB0aGF0IGFyZSBtYW51YWxs
eSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0cy4KLQotICAgICMgRklYTUU6IE9u
bHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNob3VsZCBuZWVkIG5v
bi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHR5
cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5
cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRo
cm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5PiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJp
bWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAiUmVm
UHRyPCVzPiIgJSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQot
ICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlciddOgotICAgICAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PCVzPiIgJSBj
cHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25h
bWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3N0YWNrX291
dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQot
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6Ci0g
ICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVf
c3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8JXM+IiAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgcmV0dXJuICclcycgJSBi
dWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8JXM+IiAl
IGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBf
bmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0
b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCku
ZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotCi0gICAgICAgIGRl
ZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgICAgIHJldHVybiAn
QmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIEdlbmVyYXRv
ci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLQotICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVy
biBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90eXBl
KQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
dHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJ0JpbmRp
bmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBHZW5lcmF0b3IucHJv
dG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCi0KLSAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlw
ZV9tZW1iZXIudHlwZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQ
X05BTUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBqc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZShfdHlwZSk6CiAgICAgICAgIF90eXBlID0g
X3R5cGUKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgpAQCAtNDkw
LDEyICsyMzgsMyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdu
dW1iZXInCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpCi0KLSAgICAjIERlY2lkZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBh
cmUgbmVjZXNzYXJ5IGluIGEgc2l0dWF0aW9uLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
c2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0gICAgICAgIHJldHVy
biBub3QgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBl
KF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9i
amVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAib2JqZWN0IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXgg
ZjNkMWYyOWJjZmEwNTk0NjhkMGQ2Y2E0ZTliYzVkNmNjMWZlZTliNC4uZjJlMzMwYTcyODkyNjg5
NmI2YTJmOGUxNjI0OGRmZmEzODFmODhiOAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1w
bGF0ZXMucHkKQEAgLTU5LDM3NCArNTksMyBAQCBjbGFzcyBHZW5lcmF0b3JUZW1wbGF0ZXM6CiAK
IC8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSAke2lucHV0RmlsZW5hbWV9CiAvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5IiIiKQotCi0gICAgQ3BwSGVhZGVyUHJlbHVkZSA9ICgKLSAgICAiIiIjaWZuZGVmICR7
aGVhZGVyR3VhcmRTdHJpbmd9Ci0jZGVmaW5lICR7aGVhZGVyR3VhcmRTdHJpbmd9Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotCi0ke2luY2x1ZGVzfQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotJHt0eXBlZGVmc30iIiIpCi0KLSAgICBDcHBIZWFkZXJQb3N0bHVkZSA9ICgKLSAgICAiIiJ9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0K
LSNlbmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1YXJkU3RyaW5nfSkiIiIpCi0KLSAgICBDcHBJ
bXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCi0gICAgIiIiI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgJHtwcmltYXJ5SW5jbHVkZX0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSR7c2Vj
b25kYXJ5SW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKLQotICAgIENwcElt
cGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotIiIiKQotCi0gICAgQWx0ZXJuYXRlRGlz
cGF0Y2hlcnNIZWFkZXJQcmVsdWRlID0gKAotICAgICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0
cmluZ30KLSNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0cmluZ30KLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0ke2luY2x1ZGVzfQotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
ZGlzcGF0Y2hlcjsgfQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLSIiIikKLQotICAgIEFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9z
dGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2VuZGlmIC8vICFkZWZp
bmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikKLQotICAgIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uID0gKAotICAgICIi
ImNsYXNzIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9Ci19OyIiIikKLQotICAgIEJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uID0gKAotICAgICIiIiR7Y2xh
c3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7Ci1wdWJsaWM6Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9Ci1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB+SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsiIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNo
ZXJEZWNsYXJhdGlvbiA9ICgKLSAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOwotJHtjb21tYW5k
RGVjbGFyYXRpb25zfQotcHJpdmF0ZToKLSAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQg
c2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsKLSNlbmRpZgotfTsiIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29t
bWFuZERlY2xhcmF0aW9uID0gKAotICAgICIiIiAgICAke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7
Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgJHtjYWxsYmFja05hbWV9
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBp
ZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJzfSk7Ci0gICAgfTsK
LSAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7IiIi
KQotCi0gICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAot
ICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtZXNzYWdlKQotewotICAgIFJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0ke2Rpc3BhdGNoQ2FzZXN9Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0
cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3Vu
ZCIpKTsKLX0iIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VT
d2l0Y2ggPSAoCi0iIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKLXsKLSAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIHR5cGVkZWYgdm9p
ZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIp
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwot
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hN
YXAsICgpKTsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZTsKLSAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7Ci0gICAgICAgIH0gY29tbWFuZHNb
XSA9IHsKLSR7ZGlzcGF0Y2hDYXNlc30KLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IGxlbmd0
aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRz
W2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwotICAgIH0KLQotICAgIEhhc2hNYXA8U3Ry
aW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2Qp
OwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFt
ZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
OwotfSIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25z
dHJ1Y3RvciA9ICgKLSAgICAiIiJQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6
IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQotICAgICwgbV9hZ2VudChhZ2VudCkKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSAgICAsIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcihudWxscHRyKQotI2VuZGlm
Ci17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKLX0iIiIpCi0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMgPSAoCi0i
IiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKLSAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
LSAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKLSR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9Ci0gICAgaWYgKHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotIiIiKQotCi0gICAgQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKLSIiIkluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05h
bWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRj
aGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9Ci0KLXZvaWQgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5k
U3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSR7b3V0UGFyYW1l
dGVyQXNzaWdubWVudHN9Ci0gICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmlu
ZygpKTsKLX0iIiIpCi0KLSAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVj
bGFyYXRpb24gPSAoCi0iIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1Gcm9udGVuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KLSR7ZXZlbnREZWNsYXJhdGlvbnN9Ci1wcml2YXRlOgotICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci19
OyIiIikKLQotICAgIFByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSA9ICgK
LSIiIiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJp
dmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyAk
e29iamVjdFR5cGV9OwotICAgIHB1YmxpYzoiIiIpCi0KLSAgICBQcm90b2NvbE9iamVjdEJ1aWxk
ZXJEZWNsYXJhdGlvblBvc3RsdWRlID0gKAotIiIiCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjwk
e29iamVjdFR5cGV9PiYgKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR7b2JqZWN0VHlwZX0+Kj4oJm1fcmVzdWx0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gcmVsZWFzZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBSZWZQdHI8JHtvYmplY3RUeXBlfT4oKnRoaXMpLnJl
bGVhc2UoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKLSR7Y29uc3RydWN0b3JFeGFtcGxlfQotICAgICAqLwotICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfQotICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0SXRlbVRyYWl0cyBJ
dGVtVHJhaXRzOyIiIikKLQotICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNhc3QgPSAoCi0iIiJQ
YXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1
bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi17
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7Ci0gICAgYm9v
bCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0gICAgQVNTRVJUX1VO
VVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUocmVzdWx0LmdldCgpKTsKLSNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAotICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0iIiIpCi0KLSAgICBPYmpDSGVhZGVyUHJl
bHVkZSA9ICgKLSAgICAiIiIjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotJHtp
bmNsdWRlc30KLSIiIikKLQotICAgIE9iakNIZWFkZXJQb3N0bHVkZSA9ICgKLSAgICAiIiIiIiIp
Ci0KLSAgICBPYmpDQ29udmVyc2lvbkhlbHBlcnNQcmVsdWRlID0gKAotICAgICIiIiR7aW5jbHVk
ZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKLQotICAgIE9iakNDb252ZXJzaW9uSGVs
cGVyc1Bvc3RsdWRlID0gKAotICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIiIiKQot
Ci0gICAgT2JqQ0dlbmVyaWNIZWFkZXJQcmVsdWRlID0gKAotICAgICIiIiR7aW5jbHVkZXN9IiIi
KQotCi0gICAgT2JqQ0dlbmVyaWNIZWFkZXJQb3N0bHVkZSA9ICgKLSAgICAiIiIiIiIpCi0KLSAg
ICBPYmpDQ29udmVyc2lvbkhlbHBlcnNTdGFuZGFyZCA9ICgKLSAgICAiIiJ0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmlu
ZyB2YWx1ZSk7IiIiKQotCi0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyUHJlbHVkZSA9
ICgKLSAgICAiIiIke2luY2x1ZGVzfQotCi0ke2ZvcndhcmREZWNsYXJhdGlvbnN9Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotIiIiKQotCi0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVy
UG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0iIiIpCi0KLSAg
ICBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCi0gICAgIiIi
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICR7cHJpbWFyeUluY2x1ZGV9Ci0KLSR7c2Vjb25k
YXJ5SW5jbHVkZXN9Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKLQotICAgIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0iIiIpCi0KLSAgICBPYmpDSW1wbGVtZW50YXRpb25QcmVsdWRlID0g
KAotICAgICIiIiNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAke3ByaW1hcnlJbmNsdWRlfQot
Ci0ke3NlY29uZGFyeUluY2x1ZGVzfQotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOyIiIikK
LQotICAgIE9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlID0gKAotICAgICIiIiIiIikKLQotICAg
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJh
dGlvbiA9ICgKLSAgICAiIiJjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotJHtjb21tYW5kRGVjbGFyYXRpb25zfQotfTsiIiIp
Ci0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xh
cmF0aW9uID0gKAotICAgICIiImNsYXNzIE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotJHtjb21tYW5kRGVj
bGFyYXRpb25zfQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8JHtvYmpjUHJlZml4fSR7ZG9t
YWluTmFtZX1Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07IiIiKQotCi0gICAgT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uID0gKAotICAg
ICIiInZvaWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtj
b21tYW5kTmFtZX0oJHtwYXJhbWV0ZXJzfSkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOwotICAgIH07Ci0K
LSR7c3VjY2Vzc0NhbGxiYWNrfQotJHtjb252ZXJzaW9uc30KLSR7aW52b2NhdGlvbn0KLX0KLSIi
IikKLQotICAgIE9iakNDb25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5ID0gKAotICAgICIiIkBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXQke2RvbWFpbk5hbWV9SGFuZGxl
cjopIGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4gJHt2YXJpYWJs
ZU5hbWVQcmVmaXh9SGFuZGxlcjsiIiIpCi0KLSAgICBPYmpDQ29uZmlndXJhdGlvbkV2ZW50UHJv
cGVydHkgPSAoCi0gICAgIiIiQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSAke29iamNQ
cmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqJHt2YXJpYWJsZU5hbWVQ
cmVmaXh9RXZlbnREaXNwYXRjaGVyOyIiIikKLQotICAgIE9iakNDb25maWd1cmF0aW9uQ29tbWFu
ZFByb3BlcnR5SW1wbGVtZW50YXRpb24gPSAoCi0gICAgIiIiLSAodm9pZClzZXQke2RvbWFpbk5h
bWV9SGFuZGxlcjooaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPilo
YW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gXyR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRs
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxl
ciByZWxlYXNlXTsKLSAgICBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIp
OwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50PEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciwg
QWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlM
aXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIFdURjo6bW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGOjptb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Ci19Ci0KLS0gKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxl
cj4pJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcgotewotICAgIHJldHVybiBfJHt2YXJpYWJs
ZU5hbWVQcmVmaXh9SGFuZGxlcjsKLX0iIiIpCi0KLSAgICBPYmpDQ29uZmlndXJhdGlvbkdldHRl
ckltcGxlbWVudGF0aW9uID0gKAotICAgICIiIi0gKCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9
RG9tYWluRXZlbnREaXNwYXRjaGVyICopJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRj
aGVyCi17Ci0gICAgaWYgKCFfJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyKQot
ICAgICAgICBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyID0gW1ske29iamNQ
cmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhD
b250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gXyR7dmFyaWFibGVOYW1lUHJlZml4
fUV2ZW50RGlzcGF0Y2hlcjsKLX0iIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc4YTlhOWZiYTY0MTQwMWI4ZDg3MTQ5MGRjNTBmNzE1MzE5OWJiZWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDUxNSBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgbG9nZ2luZworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJv
bSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51
bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQorCisKK2RlZiBqb2luX3R5cGVfYW5kX25hbWUodHlwZV9zdHIsIG5hbWVfc3Ry
KToKKyAgICBpZiB0eXBlX3N0ci5lbmRzd2l0aCgnKicpOgorICAgICAgICByZXR1cm4gdHlwZV9z
dHIgKyBuYW1lX3N0cgorICAgIHJldHVybiB0eXBlX3N0ciArICcgJyArIG5hbWVfc3RyCisKKwor
ZGVmIHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFya2VycyhzdHIpOgorICAgIHJldHVybiBzdHIucmVw
bGFjZSgnLyonLCAnJykucmVwbGFjZSgnKi8nLCAnJykKKworCitkZWYgcmVtb3ZlX2R1cGxpY2F0
ZV9mcm9tX3N0cihzdHIsIHBvc3NpYmxlX2R1cGxpY2F0ZSk6CisgICAgcmV0dXJuIHN0ci5yZXBs
YWNlKHBvc3NpYmxlX2R1cGxpY2F0ZSArIHBvc3NpYmxlX2R1cGxpY2F0ZSwgcG9zc2libGVfZHVw
bGljYXRlKQorCisKK19PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUCA9IHsKKyAgICAndGhpcyc6
ICd0aGlzT2JqZWN0JywgICMgRGVidWdnZXIuQ2FsbEZyYW1lLnRoaXMKKyAgICAnZGVzY3JpcHRp
b24nOiAnc3RyaW5nUmVwcmVzZW50YXRpb24nLCAgIyBSdW50aW1lLlJlbW90ZU9iamVjdC5kZXNj
cmlwdGlvbgorICAgICdpZCc6ICdpZGVudGlmaWVyJywgICMgUGFnZS5GcmFtZS5pZCwgUnVudGlt
ZS5FeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb24uaWQsIERlYnVnZ2VyLkJyZWFrcG9pbnRBY3Rp
b24uaWQKK30KKworX09CSkNfSURFTlRJRklFUl9SRVZFUlNFX1JFTkFNRV9NQVAgPSBkaWN0KCh2
LCBrKSBmb3IgaywgdiBpbiBfT0JKQ19JREVOVElGSUVSX1JFTkFNRV9NQVAuaXRlcml0ZW1zKCkp
CisKKworY2xhc3MgT2JqQ1R5cGVDYXRlZ29yeToKKyAgICBTaW1wbGUgPSAwCisgICAgU3RyaW5n
ID0gMQorICAgIE9iamVjdCA9IDIKKyAgICBBcnJheSA9IDMKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSBpcyAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5T
dHJpbmcKKyAgICAgICAgICAgIGlmICBfdHlwZS5yYXdfbmFtZSgpIGluIFsnb2JqZWN0JywgJ2Fu
eSddOgorICAgICAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdAorICAg
ICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnYXJyYXknOgorICAgICAgICAgICAgICAg
IHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LkFycmF5CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5
cGVDYXRlZ29yeS5TaW1wbGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5
cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5Lk9iamVjdAorICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
T2JqQ1R5cGVDYXRlZ29yeS5BcnJheQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxp
YXNlZFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5
X2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5jYXRl
Z29yeV9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKyAgICAgICAgcmV0dXJuIE5vbmUK
KworCisKKyMgVGhpcyBjbGFzcyBjb250YWlucyBleHRyYSBzdGF0aWMgbWV0aG9kcyB1c2VkIGZv
ciBnZW5lcmF0aW9uLCBidXQgZG9lcworIyBub3QgcGFydGljaXBhdGUgaW4gYW55IGluaGVyaXRh
bmNlIGhpZXJhcmNoeS4gRmlsZSBnZW5lcmF0b3JzIHNob3VsZAorIyBleHRlbmQgdGhlIGdlbmVy
aWMgIkdlbmVyYXRvciIgY2xhc3MgaW5zdGVhZC4KK2NsYXNzIE9iakNHZW5lcmF0b3I6CisgICAg
T0JKQ19QUkVGSVggPSAnUldJUHJvdG9jb2wnCisgICAgT0JKQ19KU09OX09CSkVDVF9CQVNFID0g
JyVzSlNPTk9iamVjdCcgJSBPQkpDX1BSRUZJWAorCisgICAgIyBBZGp1c3QgaWRlbnRpZmllciBu
YW1lcyB0aGF0IGNvbGxpZGUgd2l0aCBPYmpDIGtleXdvcmRzLgorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBpZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihuYW1lKToKKyAgICAgICAg
cmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVOQU1FX01BUC5nZXQobmFtZSwgbmFtZSkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19pZGVudGlmaWVyX3RvX2lkZW50aWZpZXIobmFt
ZSk6CisgICAgICAgIHJldHVybiBfT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVOQU1FX01BUC5n
ZXQobmFtZSwgbmFtZSkKKworICAgICMgR2VuZXJhdGUgT2JqQyB0eXBlcywgY29tbWFuZCBoYW5k
bGVycywgYW5kIGV2ZW50IGRpc3BhdGNoZXJzIGZvciBhIHN1YnNldCBvZiBkb21haW5zLgorCisg
ICAgRE9NQUlOU19UT19HRU5FUkFURSA9IFsnQ1NTJywgJ0RPTScsICdET01TdG9yYWdlJywgJ05l
dHdvcmsnLCAnUGFnZSddCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5l
cmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKG1vZGVsKToKKyAgICAgICAgZGVmIHNob3VsZF9nZW5l
cmF0ZV9kb21haW5fdHlwZXMoZG9tYWluKToKKyAgICAgICAgICAgIGlmIG1vZGVsLmZyYW1ld29y
ayBpcyBGcmFtZXdvcmtzLlRlc3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUp
CisgICAgICAgICAgICB3aGl0ZWxpc3QudXBkYXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdnZXIn
LCAnUnVudGltZSddKSkKKyAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4g
d2hpdGVsaXN0CisgICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFu
ZF9oYW5kbGVyX2ZpbHRlcihtb2RlbCk6CisgICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9t
YWluX2NvbW1hbmRfaGFuZGxlcihkb21haW4pOgorICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3
b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFU
RSkKKyAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0Cisg
ICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcgorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rp
c3BhdGNoZXJfZmlsdGVyKG1vZGVsKToKKyAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fZXZlbnRfZGlzcGF0Y2hlcihkb21haW4pOgorICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3
b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFU
RSkKKyAgICAgICAgICAgIHdoaXRlbGlzdC5hZGQoJ0NvbnNvbGUnKQorICAgICAgICAgICAgcmV0
dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKKyAgICAgICAgcmV0dXJuIHNob3Vs
ZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcgorCisgICAgIyBPYmpDIGVudW0gYW5k
IHR5cGUgbmFtZXMuCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfbmFtZV9mb3Jf
dHlwZSh0eXBlKToKKyAgICAgICAgbmFtZSA9IHR5cGUucXVhbGlmaWVkX25hbWUoKS5yZXBsYWNl
KCcuJywgJycpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUs
IHR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVzJyAl
IChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVj
bGFyYXRpb24pOgorICAgICAgICBkb21haW5fbmFtZSA9IGRlY2xhcmF0aW9uLnR5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZQorICAgICAgICBuYW1lID0gJyVzJXMnICUgKGRvbWFpbl9uYW1l
LCBkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCkpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVw
bGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMn
ICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFy
YXRpb24sIG1lbWJlcik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gbWVtYmVyLnR5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZQorICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25h
bWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwgdWNmaXJzdChtZW1iZXIubWVtYmVyX25h
bWUpKQorICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21h
aW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJF
RklYLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2VudW1fbmFtZV9m
b3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1l
LCBwYXJhbWV0ZXIpOgorICAgICAgICBkb21haW5fbmFtZSA9IGRvbWFpbi5kb21haW5fbmFtZQor
ICAgICAgICBuYW1lID0gJyVzJXMlcycgJSAoZG9tYWluX25hbWUsIHVjZmlyc3QoZXZlbnRfb3Jf
Y29tbWFuZF9uYW1lKSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKKyAg
ICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255
bW91c19lbnVtKF90eXBlKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lCisgICAgICAgIG5hbWUgPSBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpLnJl
cGxhY2UoJy4nLCAnJykKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIo
bmFtZSwgZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRv
ci5PQkpDX1BSRUZJWCwgbmFtZSkKKworICAgICMgTWlzY2VsbGFuZW91cyBuYW1lIGhhbmRsaW5n
LgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB2YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3Jf
ZG9tYWluKGRvbWFpbik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZG9tYWluLmRvbWFpbl9uYW1l
CisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0RPTScpOgorICAgICAgICAgICAg
cmV0dXJuICdkb20nICsgZG9tYWluX25hbWVbMzpdCisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0
YXJ0c3dpdGgoJ0NTUycpOgorICAgICAgICAgICAgcmV0dXJuICdjc3MnICsgZG9tYWluX25hbWVb
MzpdCisgICAgICAgIHJldHVybiBkb21haW5fbmFtZVs6MV0ubG93ZXIoKSArIGRvbWFpbl9uYW1l
WzE6XQorCisgICAgIyBUeXBlIGJhc2ljcy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
b2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJh
d19uYW1lIGluIFsnc3RyaW5nJywgJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ2NvcHkn
CisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnaW50ZWdlcicsICdudW1iZXInLCAnYm9vbGVhbidd
OgorICAgICAgICAgICAgcmV0dXJuICdhc3NpZ24nCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsn
YW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgcmV0dXJuICdyZXRhaW4nCisgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdHlwZV9mb3JfcmF3
X25hbWUocmF3X25hbWUpOgorICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKKyAgICAg
ICAgICAgIHJldHVybiAnTlNTdHJpbmcgKicKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5
JzoKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheSAqJworICAgICAgICBpZiByYXdfbmFtZSBp
cyAnaW50ZWdlcic6CisgICAgICAgICAgICByZXR1cm4gJ2ludCcKKyAgICAgICAgaWYgcmF3X25h
bWUgaXMgJ251bWJlcic6CisgICAgICAgICAgICByZXR1cm4gJ2RvdWJsZScKKyAgICAgICAgaWYg
cmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgcmV0dXJuICdCT09MJworICAgICAg
ICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAn
JXMgKicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQorICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2NsYXNzX2Zvcl9yYXdf
bmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgorICAgICAg
ICAgICAgcmV0dXJuICdOU1N0cmluZycKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5JzoK
KyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheScKKyAgICAgICAgaWYgcmF3X25hbWUgaW4gWydp
bnRlZ2VyJywgJ251bWJlcicsICdib29sZWFuJ106CisgICAgICAgICAgICByZXR1cm4gJ05TTnVt
YmVyJworICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgIyBGSVhNRTogQ2FuIHRoZXNlIHByb3RvY29sX3R5cGUgZnVuY3Rp
b25zIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgQysrIGdlbmVyYXRvcnMgZnVuY3Rpb25zPworCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShyYXdf
bmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0
dXJuICdTdHJpbmcnCisgICAgICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKKyAgICAgICAg
ICAgIHJldHVybiAnaW50JworICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVtYmVyJzoKKyAgICAg
ICAgICAgIHJldHVybiAnZG91YmxlJworICAgICAgICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6
CisgICAgICAgICAgICByZXR1cm4gJ2Jvb2wnCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55
JywgJ29iamVjdCddOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3JPYmplY3QnCisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb3RvY29sX3R5
cGVfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNl
ZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1
cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFt
ZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUucHJp
bWl0aXZlX3R5cGUpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5
cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgc3ViX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBl
KQorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUg
c3ViX3R5cGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToK
KyAgICAgICAgICAgIHJldHVybiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJywgJ2FycmF5
JywgJ2FueScsICdvYmplY3QnXQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19j
bGFzc19mb3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAg
ICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfcmF3X25hbWUoX3R5cGUucHJp
bWl0aXZlX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9i
amVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9m
b3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkp
OgorICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50X21hcmtlcnMoT2Jq
Q0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLycgJSBzdWJfdHlwZQorICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2FjY2Vzc29yX3R5cGVf
Zm9yX21lbWJlcihtZW1iZXIpOgorICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2Fj
Y2Vzc29yX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlwZSkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwo
X3R5cGUpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVy
YXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCisg
ICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0
dXJuICdhc3NpZ24nCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICByZXR1cm4gJ3JldGFpbicKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdjb3B5JworICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3R5cGVfZm9yX21lbWJl
cihkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2Jq
Y190eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1i
ZXIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdHlwZV9mb3JfbWVtYmVyX2lu
dGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgor
ICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9yYXdfbmFtZShf
dHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
KToKKyAgICAgICAgICAgIGlmIChfdHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAgICAgICAg
IHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9t
ZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5cGUpCisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
T2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAqJworICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICBzdWJfdHlwZSA9
IHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9y
X3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8q
PCVzPiovIConICUgc3ViX3R5cGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgb2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2ZW50X29yX2NvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyLCByZXNwZWN0X29wdGlvbmFsPVRydWUpOgorICAgICAgICBvYmpj
X3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJuYWwocGFyYW1l
dGVyLnR5cGUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAg
ICAgIGlmIHJlc3BlY3Rfb3B0aW9uYWwgYW5kIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgIGlmIG9iamNfdHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgICAgIHJldHVy
biBvYmpjX3R5cGUgKyAnKicKKyAgICAgICAgICAgIHJldHVybiBvYmpjX3R5cGUgKyAnIConCisg
ICAgICAgIHJldHVybiBvYmpjX3R5cGUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2Jq
Y190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbChfdHlwZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5k
X25hbWUsIHBhcmFtZXRlcik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAgIHJldHVy
biBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUucmF3X25hbWUoKSkK
KyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICBp
ZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0
b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2
ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQorICAgICAgICAgICAgcmV0dXJuIE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSkKKyAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkgKyAnIConCisgICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHN1Yl90
eXBlID0gc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0b3Iub2JqY19jbGFz
c19mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpKQorICAgICAgICAgICAgcmV0dXJuICdOU0Fy
cmF5Lyo8JXM+Ki8gKicgJSBzdWJfdHlwZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBP
YmpDIDwtPiBQcm90b2NvbCBjb252ZXJzaW9uIGZvciBjb21tYW5kcyBhbmQgZXZlbnRzLgorICAg
ICMgICAtIGNvbnZlcnQgYSBjb21tYW5kIGNhbGwgcGFyYW1ldGVyIHJlY2VpdmVkIGZyb20gUHJv
dG9jb2wgdG8gT2JqQyBmb3IgaGFuZGxlcgorICAgICMgICAtIGNvbnZlcnQgYSBjb21tYW5kIHJl
dHVybiBwYXJhbWV0ZXIgaW4gY2FsbGJhY2sgYmxvY2sgZnJvbSBPYmpDIHRvIFByb3RvY29sIHRv
IHNlbmQKKyAgICAjICAgLSBjb252ZXJ0IGFuIGV2ZW50IHBhcmFtZXRlciBmcm9tIE9iakMgQVBJ
IHRvIFByb3RvY29sIHRvIHNlbmQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19w
cm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUodmFyX3R5cGUsIHZhcl9uYW1l
KToKKyAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBl
KHZhcl90eXBlKQorICAgICAgICBpZiBjYXRlZ29yeSBpbiBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1w
bGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dmFyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3RvUHJvdG9jb2xT
dHJpbmcoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICByZXR1cm4gdmFyX25hbWUKKyAgICAg
ICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3Q6CisgICAgICAgICAgICBy
ZXR1cm4gJ1slcyB0b0luc3BlY3Rvck9iamVjdF0nICUgdmFyX25hbWUKKyAgICAgICAgaWYgY2F0
ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKKyAgICAgICAgICAgIHByb3RvY29sX3R5
cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUodmFyX3R5cGUuZWxlbWVu
dF90eXBlKQorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFz
c19mb3JfdHlwZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICBpZiBwcm90b2Nv
bF90eXBlID09ICdJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5QXJyYXkoJXMpJyAlIHZhcl9uYW1l
CisgICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdTdHJpbmcnIGFuZCBvYmpjX2NsYXNz
IGlzICdOU1N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JTdHJpbmdB
cnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2lu
dCcgYW5kIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
J2luc3BlY3RvckludGVnZXJBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIGlmIHBy
b3RvY29sX3R5cGUgaXMgJ2RvdWJsZScgYW5kIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckRvdWJsZUFycmF5KCVzKScgJSB2YXJfbmFt
ZQorICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSglcyknICUgdmFyX25h
bWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhw
cmVzc2lvbl9mb3JfbWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBp
ZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBtZW1i
ZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9j
b2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5v
bnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBuYW1lKQorICAgICAgICAg
ICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5v
YmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKG1lbWJlci50eXBlKSwgbmFtZSkK
KyAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVz
c2lvbl9mb3JfdmFyaWFibGUobWVtYmVyLnR5cGUsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihu
YW1lLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVybiAnZnJv
bVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVf
Zm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFt
ZSwgcGFyYW1ldGVyKSwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3Ry
aW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9u
eW1vdXNfZW51bShwYXJhbWV0ZXIudHlwZSksIG5hbWUpCisgICAgICAgIHJldHVybiBPYmpDR2Vu
ZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFt
ZXRlci50eXBlLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZSh2YXJfdHlwZSwgdmFyX25hbWUpOgor
ICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUodmFy
X3R5cGUpCisgICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZSwg
T2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgorICAgICAgICAgICAgcmV0dXJuIHZhcl9uYW1lCisg
ICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAgICAgICAg
ICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJfdHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiAnW1tbJXMgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2Jq
ZWN0OiVzXSBhdXRvcmVsZWFzZV0nICUgKG9iamNfY2xhc3MsIHZhcl9uYW1lKQorICAgICAgICBp
ZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgorICAgICAgICAgICAgb2JqY19j
bGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJfdHlwZS5lbGVtZW50
X3R5cGUpCisgICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdvYmpjU3RyaW5nQXJyYXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAg
ICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6ICAjIEZJWE1FOiBJbnRlZ2VyIG9yIERv
dWJsZT8KKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNJbnRlZ2VyQXJyYXkoJXMpJyAlIHZh
cl9uYW1lCisgICAgICAgICAgICByZXR1cm4gJ29iamNBcnJheTwlcz4oJXMpJyAlIChvYmpjX2Ns
YXNzLCB2YXJfbmFtZSkKKworICAgICMgT2JqQyA8LT4gSlNPTiBvYmplY3QgY29udmVyc2lvbiBm
b3IgdHlwZXMgZ2V0dGVycy9zZXR0ZXJzLgorICAgICMgICAtIGNvbnZlcnQgYSBtZW1iZXIgc2V0
dGVyIGZyb20gT2JqQyBBUEkgdG8gSlNPTiBvYmplY3Qgc2V0dGVyCisgICAgIyAgIC0gY29udmVy
dCBhIG1lbWJlciBnZXR0ZXIgZnJvbSBKU09OIG9iamVjdCB0byBPYmpDIEFQSQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Npb25fZm9yX21lbWJl
cihkZWNsYXJhdGlvbiwgbWVtYmVyLCBzdWJfZXhwcmVzc2lvbik6CisgICAgICAgIGNhdGVnb3J5
ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShtZW1iZXIudHlwZSkKKyAgICAg
ICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVn
b3J5LlN0cmluZ106CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICd0b1Byb3RvY29sU3RyaW5nKCVzKScgJSBz
dWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCisgICAgICAg
IGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgorICAgICAgICAgICAgcmV0
dXJuIHN1Yl9leHByZXNzaW9uCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdv
cnkuQXJyYXk6CisgICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2Ns
YXNzX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIGlmIG9i
amNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rv
clN0cmluZ0FycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgb2JqY19j
bGFzcyBpcyAnTlNOdW1iZXInOgorICAgICAgICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpD
R2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBl
KQorICAgICAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZSc6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yRG91YmxlQXJyYXkoJXMpJyAlIHN1Yl9leHBy
ZXNzaW9uCisgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JJbnRlZ2VyQXJyYXkoJXMp
JyAlIHN1Yl9leHByZXNzaW9uCisgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rvck9iamVjdEFy
cmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBw
cm90b2NvbF90b19vYmpjX2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVy
LCBzdWJfZXhwcmVzc2lvbik6CisgICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5j
YXRlZ29yeV9mb3JfdHlwZShtZW1iZXIudHlwZSkKKyAgICAgICAgaWYgY2F0ZWdvcnkgaW4gW09i
akNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106CisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAg
ICAgaWYgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNfZW51
bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciksIHN1
Yl9leHByZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5n
PCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1v
dXNfZW51bShtZW1iZXIudHlwZSksIHN1Yl9leHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJu
IHN1Yl9leHByZXNzaW9uCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnku
T2JqZWN0OgorICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVf
Zm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICAgICAgcmV0dXJuICcoJXMp
JXMnICUgKG9iamNfdHlwZSwgc3ViX2V4cHJlc3Npb24pCisgICAgICAgIGlmIGNhdGVnb3J5IGlz
IE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6CisgICAgICAgICAgICBwcm90b2NvbF90eXBlID0gT2Jq
Q0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlw
ZSkKKyAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9y
X3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgaWYgb2JqY19jbGFz
cyBpcyAnTlNTdHJpbmcnOgorICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY1N0cmluZ0FycmF5
KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNO
dW1iZXInOgorICAgICAgICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnBy
b3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAg
ICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZSc6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAnb2JqY0RvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgorICAgICAgICAg
ICAgICAgIHJldHVybiAnb2JqY0ludGVnZXJBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKyAg
ICAgICAgICAgIHJldHVybiAnb2JqY0FycmF5PCVzPiglcyknICUgKG9iamNfY2xhc3MsIHN1Yl9l
eHByZXNzaW9uKQorCisgICAgIyBKU09OIG9iamVjdCBzZXR0ZXIvZ2V0dGVyIHNlbGVjdG9ycyBm
b3IgdHlwZXMuCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfc2V0dGVyX21ldGhv
ZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gT2JqQ0dl
bmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlw
ZSwgZGVjbGFyYXRpb24sIG1lbWJlcikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2Jq
Y19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUsIGRlY2xhcmF0aW9uLCBt
ZW1iZXIpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByYXdfbmFtZSA9IF90eXBl
LnJhd19uYW1lKCkKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdib29sZWFuJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ3NldEJvb2wnCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAn
aW50ZWdlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJworICAgICAgICAg
ICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRE
b3VibGUnCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ3NldFN0cmluZycKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55
JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JworICAgICAg
ICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3Nl
dEluc3BlY3RvckFycmF5JworICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldFN0cmlu
ZycKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAg
ICAgIHJldHVybiAnc2V0T2JqZWN0JworICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldEluc3BlY3RvckFycmF5JworICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2dldHRlcl9t
ZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgcmV0dXJuIE9i
akNHZW5lcmF0b3Iub2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVy
LnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IG9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBlLCBkZWNsYXJhdGlv
biwgbWVtYmVyKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiAoaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmF3X25hbWUgPSBf
dHlwZS5yYXdfbmFtZSgpCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICdib29sRm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25h
bWUgaXMgJ2ludGVnZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnaW50ZWdlckZvcktleScK
KyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnZG91YmxlRm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0cmluZyc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdzdHJpbmdGb3JLZXknCisgICAgICAgICAgICBpZiBy
YXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ29i
amVjdEZvcktleScKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJheSc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JBcnJheUZvcktleScKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAg
ICAgICAgcmV0dXJuICdzdHJpbmdGb3JLZXknCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ29iamVjdEZvcktleScKKyAgICAg
ICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJu
ICdpbnNwZWN0b3JBcnJheUZvcktleScKKyAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGQz
ZDdhNGJhNmU3NjJkMjUxNDE1NmYxM2VmMzAxZDgyNmQ1NjMwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0wLDAgKzEsMTU1IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyMgR2VuZXJhdG9yIHRlbXBsYXRlcywgd2hpY2ggY2FuIGJlIGZpbGxlZCB3aXRoIHN0cmluZy5U
ZW1wbGF0ZS4KKyMgRm9sbG93aW5nIGFyZSBjbGFzc2VzIHRoYXQgZmlsbCB0aGUgdGVtcGxhdGVz
IGZyb20gdGhlIHR5cGVjaGVja2VkIG1vZGVsLgorCitjbGFzcyBPYmpDR2VuZXJhdG9yVGVtcGxh
dGVzOgorCisgICAgSGVhZGVyUHJlbHVkZSA9ICgKKyAgICAiIiIjaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KKworJHtpbmNsdWRlc30KKyIiIikKKworICAgIEhlYWRlclBvc3RsdWRl
ID0gKAorICAgICIiIiIiIikKKworICAgIENvbnZlcnNpb25IZWxwZXJzUHJlbHVkZSA9ICgKKyAg
ICAiIiIke2luY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCisKKyAgICBDb252
ZXJzaW9uSGVscGVyc1Bvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIiIiKQorCisgICAgR2VuZXJpY0hlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiJHtpbmNsdWRl
c30iIiIpCisKKyAgICBHZW5lcmljSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIiIiIiKQorCisg
ICAgQ29udmVyc2lvbkhlbHBlcnNTdGFuZGFyZCA9ICgKKyAgICAiIiJ0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2
YWx1ZSk7IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlID0gKAorICAg
ICIiIiR7aW5jbHVkZXN9CisKKyR7Zm9yd2FyZERlY2xhcmF0aW9uc30KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlclBvc3RsdWRlID0g
KAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIiIiKQorCisgICAgQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAgIiIiI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICR7cHJpbWFyeUluY2x1ZGV9CisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyIi
IikKKworICAgIEltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgJHtwcmltYXJ5SW5jbHVkZX0KKworJHtzZWNvbmRhcnlJbmNsdWRlc30K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsiIiIpCisKKyAgICBJbXBsZW1lbnRhdGlvblBv
c3RsdWRlID0gKAorICAgICIiIiIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9t
YWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9uID0gKAorICAgICIiImNsYXNzIEFsdGVybmF0
ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5h
dGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0
ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ciske2Nv
bW1hbmREZWNsYXJhdGlvbnN9Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
RG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiJjbGFzcyBPYmpDSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0
ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
T2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihpZDwke29iamNQcmVm
aXh9JHtkb21haW5OYW1lfURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgUmV0YWluUHRy
PGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7
Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxl
bWVudGF0aW9uID0gKAorICAgICIiInZvaWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0ZXJzfSkKK3sKKyAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwg
ZXJyb3IpOworICAgIH07CisKKyR7c3VjY2Vzc0NhbGxiYWNrfQorJHtjb252ZXJzaW9uc30KKyR7
aW52b2NhdGlvbn0KK30KKyIiIikKKworICAgIENvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHkg
PSAoCisgICAgIiIiQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldCR7ZG9t
YWluTmFtZX1IYW5kbGVyOikgaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5k
bGVyPiAke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOyIiIikKKworICAgIENvbmZpZ3VyYXRp
b25FdmVudFByb3BlcnR5ID0gKAorICAgICIiIkBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgJHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5FdmVudERpc3BhdGNoZXIgKiR7dmFy
aWFibGVOYW1lUHJlZml4fUV2ZW50RGlzcGF0Y2hlcjsiIiIpCisKKyAgICBDb25maWd1cmF0aW9u
Q29tbWFuZFByb3BlcnR5SW1wbGVtZW50YXRpb24gPSAoCisgICAgIiIiLSAodm9pZClzZXQke2Rv
bWFpbk5hbWV9SGFuZGxlcjooaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5k
bGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gXyR7dmFyaWFibGVOYW1lUHJlZml4
fUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfJHt2YXJpYWJsZU5hbWVQcmVmaXh9
SGFuZGxlciByZWxlYXNlXTsKKyAgICBfJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPj4o
QVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIFdURjo6bW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGOjptb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWlu
SGFuZGxlcj4pJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcgoreworICAgIHJldHVybiBfJHt2
YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsKK30iIiIpCisKKyAgICBDb25maWd1cmF0aW9uR2V0
dGVySW1wbGVtZW50YXRpb24gPSAoCisgICAgIiIiLSAoJHtvYmpjUHJlZml4fSR7ZG9tYWluTmFt
ZX1Eb21haW5FdmVudERpc3BhdGNoZXIgKikke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3Bh
dGNoZXIKK3sKKyAgICBpZiAoIV8ke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIp
CisgICAgICAgIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXIgPSBbWyR7b2Jq
Y1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0
aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfJHt2YXJpYWJsZU5hbWVQcmVm
aXh9RXZlbnREaXNwYXRjaGVyOworfSIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CmluZGV4IGIwYzcyYjBiNTlhMDQ2ZThkMzNi
NDZhNTc5YTQ3ZDQwMDJiMTU2YmYuLjlkOTMxY2ZkOTFmNTdiYjk0Y2I4YTExMjVkOWZlZGFkOGE1
M2E2ODMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQpAQCAtMjQsNyArMjQsNyBAQAogIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgSlMg
YW5kIEMrKyBiaW5kaW5ncyBmb3IgdGhlIGluc3BlY3RvciBwcm90b2NvbC4KKyMgVGhpcyBzY3Jp
cHQgZ2VuZXJhdGVzIEpTLCBPYmplY3RpdmUgQywgYW5kIEMrKyBiaW5kaW5ncyBmb3IgdGhlIGlu
c3BlY3RvciBwcm90b2NvbC4KICMgR2VuZXJhdG9ycyBmb3IgaW5kaXZpZHVhbCBmaWxlcyBhcmUg
bG9jYXRlZCBpbiB0aGUgY29kZWdlbi8gZGlyZWN0b3J5LgogCiBpbXBvcnQgb3MucGF0aApAQCAt
NDAsMzcgKzQwLDM5IEBAIHRyeToKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBpbXBvcnQgc2lt
cGxlanNvbiBhcyBqc29uCiAKK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFt
ZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKKwogdHJ5OgogICAgIGZyb20gY29kZWdlbiBpbXBvcnQgKgogCiAj
IFdoZW4gY29weWluZyBnZW5lcmF0b3IgZmlsZXMgdG8gSmF2YVNjcmlwdENvcmUncyBwcml2YXRl
IGhlYWRlcnMgb24gTWFjLAogIyB0aGUgY29kZWdlbi8gbW9kdWxlIGRpcmVjdG9yeSBpcyBmbGF0
dGVuZWQuIFNvLCBpbXBvcnQgZGlyZWN0bHkuCi1leGNlcHQgSW1wb3J0RXJyb3I6CitleGNlcHQg
SW1wb3J0RXJyb3IsIGU6CisgICAgIyBsb2cuZXJyb3IoZSkgIyBVbmNvbW1lbnQgdGhpcyB0byBk
ZWJ1ZyBlYXJseSBpbXBvcnQgZXJyb3JzLgogICAgIGltcG9ydCBtb2RlbHMKICAgICBmcm9tIG1v
ZGVscyBpbXBvcnQgKgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCi0KLSAgICBmcm9tIGdl
bmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAg
ZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJvbSBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCi0g
ICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRp
b25faGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1
cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19jb252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVj
dGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLSAgICBm
cm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2hlYWRlciBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0
ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotICAgIGZyb20gZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyIGltcG9ydCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotCi0KLWxvZ2dpbmcuYmFzaWND
b25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcu
RVJST1IpCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKyAgICBmcm9tIGNwcF9n
ZW5lcmF0b3IgaW1wb3J0ICoKKyAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCAqCisKKyAg
ICBmcm9tIGdlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBp
bXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfY29tbWFuZHMgaW1wb3J0ICoK
KyAgICBmcm9tIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAq
CisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
IGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29i
amNfY29uZmlndXJhdGlvbl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVf
b2JqY19jb252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29iamNfaW50ZXJu
YWxfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVz
X2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCiAKIAogIyBBIHdyaXRlciB0aGF0IG9ubHkgdXBkYXRl
cyBmaWxlIGlmIGl0IGFjdHVhbGx5IGNoYW5nZWQuCkBAIC0xMzAsMjQgKzEzMiwyNCBAQCBkZWYg
Z2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aD1Ob25lLAogICAgIGdlbmVyYXRvcnMgPSBbXQogICAgIGlzX3Rlc3QgPSBwcm90b2NvbC5mcmFt
ZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0CiAgICAgaWYgaXNfdGVzdCBvciBwcm90b2NvbC5mcmFt
ZXdvcmsgaXMgbm90IEZyYW1ld29ya3MuV2ViSW5zcGVjdG9yOgotICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5
X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoSlNC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCiAgICAgaWYgaXNfdGVzdCBvciBw
cm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJJbnNwZWN0b3I6Ci0gICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDQ29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3Io
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqZWN0aXZlQ1R5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9i
amVjdGl2ZUNUeXBlc0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNh
dGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJh
dGlvbkhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbnZlcnNpb25IZWxwZXJzR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQ
cm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNJbnRl
cm5hbEhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKIAogICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241832</attachid>
            <date>2014-11-18 16:36:49 -0800</date>
            <delta_ts>2014-11-18 16:36:49 -0800</delta_ts>
            <desc>Final patch for EWS</desc>
            <filename>bug-138237-20141118163630.patch</filename>
            <type>text/plain</type>
            <size>454697</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Mjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OGI3MzhmMWRlZWY4MTllY2U4YmQ0N2VlMTI0NWNiNjE4MTViNzc0Li5iMmNkNmE2NDQ5MzJiMzQ3
MmZkZjk3YjBhZTA0MWYzOWM4N2UxMTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNC0xMS0xOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RhbmRhcmRpemUgbGFuZ3VhZ2Utc3Bl
Y2lmaWMgcHJvdG9jb2wgZ2VuZXJhdG9yIGZpbGUsIGNsYXNzLCBhbmQgbWV0aG9kIHByZWZpeGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgyMzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXR0bGUg
b24gY3BwL29iamMvanMgZmlsZSBwcmVmaXhlcyBhbmQgQ3BwL09iakMvSlMgY2xhc3MgcHJlZml4
ZXMgZm9yIGdlbmVyYXRvcnMuCisgICAgICAgIE1vdmUgQysrLXNwZWNpZmljIHN0YXRpYyBtZXRo
b2RzIGludG8gQ3BwR2VuZXJhdG9yIGFuZCBhZGQgY3BwXyBwcmVmaXhlcyB3aGVyZSByZWxldmFu
dC4KKyAgICAgICAgU3BsaXQgdGhlIHRlbXBsYXRlcyBmaWxlIGludG8gbGFuZ3VhZ2Utc3BlY2lm
aWMgdGVtcGxhdGUgZmlsZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vX19pbml0X18ucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yLnB5OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weS4KKyAgICAgICAgKENwcEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weS4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29t
bWFuZHMucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5LgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5LgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hl
YWRlci5weTogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5OiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5LgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weS4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfaGVhZGVyLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVy
LnB5LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19p
bnRlcm5hbF9oZWFkZXIucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFk
ZXIucHkuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3IucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfYy5weS4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5OgorCiAyMDE0LTExLTE4ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHRoZSBWZWN0b3IgQVBJIHRvIGRlYWwg
d2l0aCB1bnNpZ25lZCB0eXBlcyBpbnN0ZWFkIG9mIHNpemVfdApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDgyODdlN2VmMDQ1MzBkNzllMTVmZmQxNjAxZmNmYWI3YmFiYTEz
MTYuLmUwM2M4ZmU3ODQ2MGY2MzBiN2M0MDE0ZGNjNWY0MGQ1ZDFiOWQ3NWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTk5MiwxMyArOTkyLDE1IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNw
ZWN0b3Ivc2NyaXB0CiAKIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NS
SVBUUwogICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
Ci0gICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2Vu
ZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQotICAgICR7SmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weQotICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQ
VFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Ci0g
ICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQotICAgICR7SmF2YVNjcmlw
dENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5
cGVzX2hlYWRlci5weQotICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9jb2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisgICAg
JHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vY3BwX2dlbmVy
YXRvci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2Rl
Z2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5w
eQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVD
VE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weQogICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQ
VFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvci5weQogICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVD
VE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKICAgICAke0ph
dmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9fX2luaXRfXy5weQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBmYTFjMjBlOTA5
ZmIyODZiN2I0ODE2Y2MwMTJhMmY3NGY1MmUwODdlLi5kYzgwOTZjMDQ3ODFhNmMwZmZhM2FkZjA0
ODg4Mjc5YTYyNTcxZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtMTQ0LDEzICsxNDQsMTUgQEAgZW5kaWYKIAogSU5TUEVDVE9SX0dFTkVSQVRPUl9T
Q1JJUFRTID0gXAogCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
X19pbml0X18ucHkgXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBcCi0JJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCi0JJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBcCi0JJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKLQkk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weSBcCi0JJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBcCisJ
JChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwK
KwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgXAogCSQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBcCiAJJChKYXZh
U2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgXAogCSQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5IFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IDEyMWQ3NzMxOTQ5OWQ2ZjA0
YWU1YmM4YjNjODBkNzU5ZGNmNzJhNzkuLjlkZjc1MmE5ZDBhNmI4NDIyMjJhMDlhODQ0ZWYzMTM2
YTA3YzJiMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtMTY1
OCwxMyArMTY1OCwxNSBAQAogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpc3QuanNvbiIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfY29t
bWFuZHMucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29k
ZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IiAvPgotICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdl
blxnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IiAvPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfcHJv
dG9jb2xfdHlwZXNfaGVhZGVyLnB5IiAvPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxj
cHBfZ2VuZXJhdG9yLnB5IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3Jp
cHRzXGNvZGVnZW5cY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkiIC8+CisgICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
c2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29k
ZWdlblxnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkiIC8+CisgICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSIgLz4KKyAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHki
IC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5l
cmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdG9yLnB5IiAvPgogICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSIg
Lz4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXG1vZGVs
cy5weSIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycwppbmRleCBkYjdjNGUwOTM1YmM4MGNkMDY2MmRiNDQ2NzVhODU3YzU0ZDAxMWE1Li41MmYw
ZjIwNmRmMDdlM2YzZmVmYWY4N2I0NWZjMzYzMTQwODJhMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC00MTk3LDI1ICs0MTk3LDMx
IEBAIO+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiAgICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxfX2luaXRfXy5weSI+CiAgICAg
ICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05vbmU+
Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0
ZV9iYWNrZW5kX2NvbW1hbmRzLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
c2NyaXB0c1xjb2RlZ2VuXGNwcF9nZW5lcmF0b3IucHkiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0
b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSI+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNc
Y29kZWdlblxjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSI+CiAgICAgICA8RmlsdGVyPmluc3Bl
Y3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+CiAg
ICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVn
ZW5cZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkiPgorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSI+CiAgICAgICA8RmlsdGVyPmluc3BlY3Rvclxz
Y3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5Ij4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2Ny
aXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSI+
CiAgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8
L05vbmU+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxn
ZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkiPgogICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xj
b2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5c
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSI+CisgICAgICA8RmlsdGVyPmlu
c3BlY3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KKyAgICA8L05vbmU+CisgICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkiPgorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2Ny
aXB0c1xjb2RlZ2VuPC9GaWx0ZXI+CisgICAgPC9Ob25lPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5w
eSI+CiAgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4KICAg
ICA8L05vbmU+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdl
blxnZW5lcmF0b3IucHkiPgpAQCAtNDM1MCw0ICs0MzU2LDQgQEAg77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAg
PC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhkMjJh
MmI4NzY1YTFjNjY5ODY2NTZmNWY3OWE4YzY3MGE4YmUxZWIuLmNlOGYzN2JkNmU0Y2JkZDE0MDRm
ZGRkN2ViMmE5ZTQxNDM5Y2VlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MTg4LDE4ICsxMTg4LDE3IEBACiAJCUE1RUE3MEU3MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1RUE3MEU0MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNUVBNzBFNTE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTVFQTcwRTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNUVBNzBFNjE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlBNUVBNzBFQzE5RjVCM0VBMDA5OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyogZ2VuZXJhdGVfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcwRUMxOUY1QjNFQTAwOThGNUVDIC8qIGdlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVBMTlGNUIzRDUwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTVF
QTcwRUUxOUY1QjVDNDAwOThGNUVDIC8qIEpTQ29udGV4dFJlZkluc3BlY3RvclN1cHBvcnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVEMTlG
NUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTVFQTcxMDMxOUY2REU2
RjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVB
NzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjAxOUY2REU1QTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNUVB
NzEwNTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlv
bl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2
ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNUVBNzEwNzE5RjZE
RTc4MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjMx
OUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVy
cy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlB
NUVBNzEwODE5RjZERTdBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTA5MTlGNkRF
N0MwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNTE5RjZERTVBMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNjE5RjZERTVBMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1RUE3MTBCMTlGNkRFODAwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY3MTlGNkRF
NUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNUVB
NzEwQzE5RjZERTgyMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGODE5RjZERTVBMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDMxOUY2REU2RjAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEVGMTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDQxOUY2REU3MjAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcw
RjAxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUE1RUE3MTA1MTlGNkRFNzQwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZp
Z3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRjExOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMDcxOUY2REU3ODAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRjMxOUY2REU1QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1RUE3MTA4MTlGNkRFN0EwMDk4RjVFQyAvKiBn
ZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNDE5RjZERTVB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUE1RUE3MTA5MTlGNkRFN0MwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY1MTlGNkRF
NUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNUVBNzEwQTE5RjZERTdFMDA5OEY1RUMg
LyogZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGNjE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTVFQTcxMEMxOUY2REU4MjAwOThGNUVDIC8qIG9iamNf
Z2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTVFQTcwRjgxOUY2REU1QTAwOThGNUVDIC8qIG9iamNfZ2VuZXJhdG9yLnB5ICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1RUE3MTBFMTlGNkRG
ODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MTBEMTlGNkRG
ODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNUZEMDA2NzE4
OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RkQwMDY1MTg5QUZFOUMwMDYzMzIzMSAvKiBT
Y3JpcHRBcmd1bWVudHMuY3BwICovOyB9OwogCQlBNUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyog
U2NyaXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNUZEMDA2NjE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1NjYsMTYg
KzE1NjUsMzMgQEAKIAkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkUx
OEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYx
IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2Vu
ZF9jb21tYW5kcy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlDNDcwM0NDRjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUM0NzAzQ0QwMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUM0NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDNDcwM0NEMjE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M3MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAz
Q0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzMxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzQ3MDNDRDUxOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0IxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxz
LnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDND
Q0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDNDlGRTRBQjE5QUFDODYxMDBGNDBDRTkgLyogZ2Vu
ZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ5RkU0QTcxOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRl
X3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlDNDlGRTRBQzE5QUFDODYxMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJh
dGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzRGNEI2RDkxQTA1Qzc2RjAwNUNBQjc2IC8q
IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZDRjFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgKi87IH07CisJCUM0RjRCNkRBMUEwNUM3NkYwMDVDQUI3NiAvKiBj
cHBfZ2VuZXJhdG9yLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNEY0QjZEMDFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSAqLzsg
fTsKKwkJQzRGNEI2RTExQTA1Qzc2RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ3MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovOyB9OworCQlDNEY0QjZFMjFBMDVD
NzZGMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZEODFBMDVDNzZGMDA1Q0FC
NzYgLyogb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovOyB9OworCQlDNEY0QjZFMzFBMDVD
ODEwMDA1Q0FCNzYgLyogX19pbml0X18ucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5w
eSAqLzsgfTsKKwkJQzRGNEI2RTQxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdl
bmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgfTsK
KwkJQzRGNEI2RTYxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVFQTcwRUYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgfTsKKwkJQzRGNEI2RTcxQTA1QzgxMTAwNUNBQjc2
IC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMDE5
RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkgKi87IH07CisJCUM0RjRCNkU4MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0
ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJh
dGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weSAqLzsgfTsKKwkJQzRGNEI2RTkxQTA1Qzgx
MTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5w
eSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVFQTcw
RjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbi5weSAqLzsgfTsKKwkJQzRGNEI2RUExQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRl
X29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNUVBNzBGMzE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgKi87IH07CisJCUM0RjRCNkVCMUEwNUM4MTEwMDVD
QUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3
MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkgKi87IH07CisJCUM0RjRCNkVDMUEwNUM4MTEwMDVDQUI3NiAvKiBn
ZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTVFQTcwRjUxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNf
aGVhZGVyLnB5ICovOyB9OworCQlDNEY0QjZFRDFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVf
b2JqY19pbnRlcm5hbF9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpj
X2ludGVybmFsX2hlYWRlci5weSAqLzsgfTsKKwkJQzRGNEI2RUUxQTA1QzgxMTAwNUNBQjc2IC8q
IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVt
cGxhdGVzLnB5ICovOyB9OworCQlDNEY0QjZFRjFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdG9y
LnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcw
M0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICovOyB9OworCQlDNEY0QjZGMDFB
MDVDODExMDA1Q0FCNzYgLyogbW9kZWxzLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5
ICovOyB9OworCQlDNEY0QjZGMTFBMDVDODExMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3IucHkg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1RUE3MEY4
MTlGNkRFNUEwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSAqLzsgfTsKKwkJQzRGNEI2RjIx
QTA1QzhBQzAwNUNBQjc2IC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0MzMTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5ICovOyB9OworCQlD
NEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0QjZDRjFBMDVD
NzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IH07CisJCUM0RjRC
NkY0MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2RDAxQTA1Qzc2RjAwNUNBQjc2IC8q
IGNwcF9nZW5lcmF0b3IucHkgKi87IH07CisJCUM0RjRCNkY1MUEwNUM5ODQwMDVDQUI3NiAvKiBn
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2RDcxQTA1Qzc2RjAwNUNB
Qjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87
IH07CisJCUM0RjRCNkY2MUEwNUM5ODQwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEY0
QjZEODFBMDVDNzZGMDA1Q0FCNzYgLyogb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovOyB9
OwogCQlEQzAwMDM5MzE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAz
OTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzAwMDM5ODE5REJB
NzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTYxOURCQTcwNjAwMDIzRUIw
IC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKIAkJREMwMDAzOTkxOURCQTcw
NjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5NzE5REJBNzA2MDAwMjNFQjAgLyog
REZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMjg3MSwxOCArMjg4NywxNyBAQAogCQlBNUVBNzBFNDE5RjVC
MTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUVBNzBFNTE5RjVCMTAxMDA5OEY1RUMg
LyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUVBNzBFNjE5RjVCMTAxMDA5OEY1RUMg
LyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTVFQTcwRUExOUY1QjNENTAwOThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEVBMTlGNUIzRDUwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9jcHBfYWx0ZXJu
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1RUE3MEVEMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRleHRSZWZJbnNwZWN0b3JT
dXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dFJlZklu
c3BlY3RvclN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRUYx
OUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0
ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBNUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBNUVBNzBGMTE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBn
ZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29i
amVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9u
X2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNUVBNzBG
MzE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxw
ZXJzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBNUVBNzBGNDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2ZV9jX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3MEY1
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFk
ZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3MEY2MTlGNkRFNUEwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5h
bF9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1RUE3MEY3MTlGNkRF
NUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamVjdGl2
ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBNUVBNzBGODE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2MucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmplY3RpdmVfYy5w
eTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRUYxOUY2REU1QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjAxOUY2
REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE1RUE3MEYxMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBw
YXRoID0gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjIxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29i
amNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlv
bi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjMxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMu
cHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RUE3MEY0MTlGNkRFNUEwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE1RUE3MEY1MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRlci5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX29iamNfaGVh
ZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUVBNzBGNjE5RjZERTVBMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVFQTcwRjgxOUY2REU1QTAwOThGNUVDIC8q
IG9iamNfZ2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0g
b2JqY19nZW5lcmF0b3IucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RUE3MTBE
MTlGNkRGODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RkQwMDY1
MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTVGRDAwNjYxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRBcmd1bWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyNDMsMTYgKzMyNTgsMjAgQEAKIAkJQzJG
RTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSAiZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ijsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5p
dF9fLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gX19pbml0X18ucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDcwM0NDNjE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzQ3MDNDQzcxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5k
cy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2pzX2Jh
Y2tlbmRfY29tbWFuZHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0NzAzQ0NB
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzQ3MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRv
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRvci5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8q
IG1vZGVscy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IG1vZGVscy5w
eTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzQ5RkU0QTcxOUFBQzgzRTAwRjQwQ0U5
IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2Ny
aXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzQ5RkU0QTgxOUFBQzgzRTAwRjQwQ0U5IC8qIGdl
bmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkNGMUEwNUM3NkYwMDVD
QUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDNEY0QjZEMDFBMDVDNzZGMDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRv
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGNwcF9nZW5lcmF0b3Iu
cHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQxMUEwNUM3NkYwMDVDQUI3
NiAvKiBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEY0QjZEMjFBMDVD
NzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUM0RjRCNkQzMUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RjRCNkQ0MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEY0
QjZENTFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
RjRCNkQ2MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUM0RjRCNkQ3MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGNEI2RDgxQTA1Qzc2RjAwNUNB
Qjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJz
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVy
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMw
MEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMw
MDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
OyBwYXRoID0gZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUyODMsMjcgKzUzMDIsMzAgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5pdF9f
LnB5ICovLAotCQkJCUE1RUE3MEVBMTlGNUIzRDUwMDk4RjVFQyAvKiBnZW5lcmF0ZV9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKLQkJCQlDNDcwM0NDMzE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSAqLywKLQkJCQlDNDcwM0ND
NDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSAqLywKLQkJCQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAotCQkJCUM0NzAzQ0M2MTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKLQkJCQlD
NDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLywKLQkJCQlBNUVBNzBFRjE5RjZERTVBMDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKLQkJCQlB
NUVBNzBGMDE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEYxMTlGNkRFNUEwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weSAqLywK
LQkJCQlBNUVBNzBGMjE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSAqLywKLQkJCQlBNUVBNzBGMzE5RjZERTVBMDA5
OEY1RUMgLyogZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5ICovLAot
CQkJCUE1RUE3MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAotCQkJCUE1RUE3MEY1MTlGNkRF
NUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgKi8sCi0JCQkJQTVF
QTcwRjYxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hl
YWRlci5weSAqLywKLQkJCQlBNUVBNzBGNzE5RjZERTVBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi8sCi0JCQkJQTVFQTcwRjgxOUY2REU1
QTAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jLnB5ICovLAotCQkJCUM0OUZFNEE3MTlB
QUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgKi8sCi0J
CQkJQzQ5RkU0QTgxOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0RjRCNkNGMUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLywKKwkJCQlDNEY0QjZEMDFBMDVDNzZGMDA1Q0FCNzYg
LyogY3BwX2dlbmVyYXRvci5weSAqLywKKwkJCQlBNUVBNzBFQTE5RjVCM0Q1MDA5OEY1RUMgLyog
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAor
CQkJCUM0RjRCNkQxMUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNEY0QjZEMjFBMDVDNzZGMDA1Q0FCNzYgLyogZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlD
NEY0QjZEMzFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0RjRCNkQ0MUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlDNEY0
QjZENTFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weSAqLywKKwkJCQlDNEY0QjZENjFBMDVDNzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0MzMTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5ICovLAorCQkJCUE1RUE3
MEVGMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi8sCisJCQkJQTVFQTcwRjAxOUY2REU1QTAwOThGNUVDIC8qIGdlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUE1RUE3MEYx
MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5
ICovLAorCQkJCUE1RUE3MEYyMTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZp
Z3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRjMxOUY2REU1QTAwOThG
NUVDIC8qIGdlbmVyYXRlX29iamNfY29udmVyc2lvbl9oZWxwZXJzLnB5ICovLAorCQkJCUE1RUE3
MEY0MTlGNkRFNUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQTVFQTcwRjUxOUY2REU1QTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamNfaGVhZGVyLnB5ICovLAorCQkJCUE1RUE3MEY2MTlGNkRFNUEwMDk4RjVFQyAv
KiBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSAqLywKKwkJCQlDNEY0QjZENzFBMDVD
NzZGMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weSAqLywKIAkJCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weSAqLywKIAkJCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5
ICovLAogCQkJCUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi8sCisJCQkJ
QzRGNEI2RDgxQTA1Qzc2RjAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAq
LywKKwkJCQlBNUVBNzBGODE5RjZERTVBMDA5OEY1RUMgLyogb2JqY19nZW5lcmF0b3IucHkgKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGNvZGVnZW47CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtNTM1MywxMCArNTM3NSw4IEBACiAJCQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFS
TTY0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1
RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzEwRTE5RjZERjgx
MDA5OEY1RUMgLyogSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDNDlGRTRBQjE5QUFDODYxMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9j
b2xfdHlwZXNfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcwRUMxOUY1QjNFQTAw
OThGNUVDIC8qIGdlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcwRUMxOUY1QjNFQTAwOThGNUVDIC8qIGdlbmVyYXRl
X2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICov
LAogCQkJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDNDlGRTRBQzE5QUFDODYxMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQk2NThE
M0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkFEMkVERkIxOTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9u
T3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKQEAgLTUzNjcsMjUgKzUzODcsMjAgQEAKIAkJCQlD
MkRBNzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0
b3ItanNvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAv
KiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKLQkJCQlDNDcwM0NEMjE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovLAotCQkJCUE1RUE3MTA0MTlGNkRFNzIwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywK
LQkJCQlDNDcwM0NEMTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2hlYWRlci5weSBpbiBIZWFk
ZXJzICovLAotCQkJCUE1RUE3MTA2MTlGNkRFNzYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3Rp
dmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJ
QTVFQTcxMDcxOUY2REU3ODAwOThGNUVDIC8qIGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNp
b25faGVscGVycy5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1RUE3MTA4MTlGNkRFN0EwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTVFQTcxMEExOUY2REU3RTAwOThGNUVDIC8qIGdl
bmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAotCQkJ
CUE1RUE3MTBCMTlGNkRFODAwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19p
bXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1RUE3MTBDMTlGNkRFODIwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfYy5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1RUE3
MTA5MTlGNkRFN0MwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkgaW4g
SGVhZGVycyAqLywKKwkJCQlBNUVBNzEwNTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1RUE3MTA2MTlG
NkRFNzYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVBNzEwNzE5RjZERTc4MDA5OEY1RUMgLyogZ2Vu
ZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNUVB
NzEwODE5RjZERTdBMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMEExOUY2REU3RTAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8s
CisJCQkJQTVFQTcxMEMxOUY2REU4MjAwOThGNUVDIC8qIG9iamNfZ2VuZXJhdG9yLnB5IGluIEhl
YWRlcnMgKi8sCisJCQkJQTVFQTcxMDkxOUY2REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNf
aGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAotCQkJCUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovLAotCQkJCUM0NzAzQ0QwMTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4g
SGVhZGVycyAqLywKLQkJCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSBpbiBIZWFkZXJzICovLAot
CQkJCUE1RUE3MTAzMTlGNkRFNkYwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTVFQTcxMDMxOUY2
REU2RjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2
aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJD
QyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4
QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTA3LDYgKzYxMjIsMTAgQEAKIAkJCQlBNTdEMjNFRTE4OTFCNTU0MDAzMUM3RkEg
LyogUmVndWxhckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjgyRkIzMTlCQ0Iz
NjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3
RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDNEY0
QjZGNTFBMDVDOTg0MDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0RjRCNkY2MUEwNUM5ODQwMDVDQUI3
NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNEY0
QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVh
ZGVycyAqLywKKwkJCQlDNEY0QjZGNDFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5w
eSBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBS
ZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4
MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLApAQCAtNjQy
Miw3ICs2NDQxLDI2IEBACiAJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUM0RjRCNkYyMUEw
NUM4QUMwMDVDQUI3NiAvKiBnZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGluIFJlc291
cmNlcyAqLywKIAkJCQlBNTNGMUFDMDE4QzkwRjhGMDA3MkVCNkQgLyogZnJhbWV3b3JrLnNiIGlu
IFJlc291cmNlcyAqLywKKwkJCQlDNEY0QjZFMzFBMDVDODEwMDA1Q0FCNzYgLyogX19pbml0X18u
cHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkQ5MUEwNUM3NkYwMDVDQUI3NiAvKiBjcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2REExQTA1
Qzc2RjAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0
RjRCNkU0MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkU2MUEwNUM4
MTEwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
aW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkU3MUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMg
Ki8sCisJCQkJQzRGNEI2RTgxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkU5MUEwNUM4MTEw
MDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkg
aW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkVBMUEwNUM4MTEwMDVDQUI3NiAvKiBnZW5lcmF0
ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2
RUIxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RUMxQTA1QzgxMTAw
NUNBQjc2IC8qIGdlbmVyYXRlX29iamNfaGVhZGVyLnB5IGluIFJlc291cmNlcyAqLywKKwkJCQlD
NEY0QjZFRDFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIu
cHkgaW4gUmVzb3VyY2VzICovLAorCQkJCUM0RjRCNkUxMUEwNUM3NkYwMDVDQUI3NiAvKiBnZW5l
cmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAq
LywKKwkJCQlDNEY0QjZFRTFBMDVDODExMDA1Q0FCNzYgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5w
eSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RUYxQTA1QzgxMTAwNUNBQjc2IC8qIGdlbmVy
YXRvci5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RjAxQTA1QzgxMTAwNUNBQjc2IC8q
IG1vZGVscy5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRGNEI2RTIxQTA1Qzc2RjAwNUNBQjc2
IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBSZXNvdXJjZXMgKi8sCisJCQkJQzRG
NEI2RjExQTA1QzgxMTAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yLnB5IGluIFJlc291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL19faW5pdF9fLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vX19pbml0X18ucHkKaW5kZXggZTljNjdiNWZkNGRjYTlmMzMyYTlhYWUwZjJi
ZDAwNjFhOWQzZTM2NC4uNjA3N2ZhOTdhOTdmOGMyMTdjYjBhYjYzNzBhODU2NGY2YTQ5YzY3YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vX19pbml0X18ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vX19pbml0X18ucHkKQEAgLTIsMjEgKzIsMjMgQEAKIAogZnJvbSBtb2RlbHMg
aW1wb3J0ICoKIGZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1w
b3J0ICoKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0ICoKIAotZnJvbSBnZW5lcmF0ZV9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfY29uZmlndXJhdGlvbl9oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9v
YmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotZnJv
bSBnZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIgaW1wb3J0ICoKLWZyb20gZ2VuZXJhdGVfb2Jq
ZWN0aXZlX2NfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2
ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi1mcm9tIGdlbmVyYXRlX3Byb3RvY29s
X3R5cGVzX2hlYWRlciBpbXBvcnQgKgotZnJvbSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfanNfYmFja2VuZF9jb21t
YW5kcyBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRl
ciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMgaW1wb3J0
ICoKK2Zyb20gZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
IGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamNfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVy
YXRlX29iamNfaW50ZXJuYWxfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX29iamNfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2Vu
ZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4M2UyZmE2OTgxNGQ3ZjRmMDkzY2I0ODYxMDQwNTQzYjA3
NjYxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsMzAxIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJl
CisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgUHJp
bWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUs
IEZyYW1ld29ya3MKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKK19QUklN
SVRJVkVfVE9fQ1BQX05BTUVfTUFQID0geworICAgICdib29sZWFuJzogJ2Jvb2wnLAorICAgICdp
bnRlZ2VyJzogJ2ludCcsCisgICAgJ251bWJlcic6ICdkb3VibGUnLAorICAgICdzdHJpbmcnOiAn
U3RyaW5nJywKKyAgICAnb2JqZWN0JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKKyAg
ICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUnCit9CisKKyMgVGhpcyBjbGFzcyBj
b250YWlucyBleHRyYSBzdGF0aWMgbWV0aG9kcyB1c2VkIGZvciBnZW5lcmF0aW9uLCBidXQgZG9l
cworIyBub3QgcGFydGljaXBhdGUgaW4gYW55IGluaGVyaXRhbmNlIGhpZXJhcmNoeS4gRmlsZSBn
ZW5lcmF0b3JzIHNob3VsZAorIyBleHRlbmQgdGhlIGdlbmVyaWMgIkdlbmVyYXRvciIgY2xhc3Mg
aW5zdGVhZC4KK2NsYXNzIENwcEdlbmVyYXRvcjoKKworICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0
IG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF9n
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0
QXJyYXknCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAg
ICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdnZXRJbnRlZ2VyJworICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgp
IGlzICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJworICAgICAg
ICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhbnknOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnZ2V0VmFsdWUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biAnZ2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5j
cHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5l
cmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gJ3NldE9iamVjdCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnc2V0QXJyYXknCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25h
bWUoKSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJwor
ICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdudW1iZXInOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnc2V0RG91YmxlJworICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFt
ZSgpIGlzICdhbnknOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlw
ZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2Rf
Zm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisKKyAgICAjIEdlbmVyYXRlIHR5cGUgcmVw
cmVzZW50YXRpb25zIGZvciB2YXJpb3VzIHNpdHVhdGlvbnMuCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBjcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVtYmVycykgPT0gMDoK
KyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUp
KToKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9y
LmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJzo6Jy5qb2luKFtDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFt
ZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0g
X3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2ZS4K
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUu
CisKKyAgICAgICAgc2lnaWwgPSAnKicgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJyYn
CisgICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGgg
ZGVmaW5lZCBwcm9wZXJ0aWVzLgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdvYmplY3QnOgorICAgICAgICAgICAg
cmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JyArIHNpZ2ls
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICBy
ZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PicgKyBzaWdpbAor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5y
YXdfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAl
cyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNwcF9uYW1lCisKKyAgICAgICAgcmV0dXJuICJ1bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5f
cGFyYW1ldGVyX3R5cGUiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zv
cl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgcmV0
dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVy
KToKKyAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25h
bWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJfbmFtZSwgRmFsc2UpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9u
YW1lLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5
cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjwlcz4nICUg
Q3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBidWlsZGVyX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAg
ICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVz
KiBjb25zdCcgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAg
ICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90
eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0ICVzJicgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAgZWxpZiBfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JworICAgICAgICAgICAgZWxpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBf
bmFtZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5n
J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fu
b255bW91czoKKyAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9u
YW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9
ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFs
OgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVudW1fdHlwZV9uYW1lCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMnICUgZW51bV90eXBlX25hbWUK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2Zvcm1hbF9vdXRfcGFy
YW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKworICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlw
ZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0
dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2
ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PCVzPioi
ICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICcl
cyonICUgY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgor
ICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVy
biAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzKicgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6
UHJvdG9jb2w6OiVzOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBmb3Jt
YWwgb3V0IHBhcmFtZXRlciB0eXBlLiIpCisKKyAgICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xp
Z2h0bHkgZGlmZmVyZW50IGZyb20gb3V0IHBhcmFtZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmll
ZC4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNf
cGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJp
bWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUGFzc1Jl
ZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
KQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAg
ICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9u
YW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2Vy
JywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNwcF9uYW1lCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBmb3JtYWwg
YXN5bmMgcGFyYW1ldGVyIHR5cGUuIikKKworICAgICMgSW4tcGFyYW1ldGVycyBkb24ndCB1c2Ug
YnVpbGRlciB0eXBlcywgYmVjYXVzZSB0aGV5IGNvdWxkIGJlIHBhc3NlZAorICAgICMgIm9wZW4g
dHlwZXMiIHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0cnVjdGVkIG91dCBvZiBJbnNwZWN0b3JPYmpl
Y3RzLgorCisgICAgIyBGSVhNRTogT25seSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFjdHVhbGx5IG9w
ZW4gdHlwZXMgc2hvdWxkIG5lZWQgbm9uLWJ1aWxkZXIgcGFyYW1ldGVyIHR5cGVzLgorICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJh
bWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAj
IEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KToKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAg
IHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IgorICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAg
ICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0
cmluZycsICdpbnRlZ2VyJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8JXM+IiAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBf
dHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJh
eVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBD
cHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlw
ZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Ikluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4iICUgYnVpbGRlcl90eXBlCisgICAg
ICAgICAgICByZXR1cm4gJyVzJyAlIGJ1aWxkZXJfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJh
dG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4iICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmpl
Y3RfZGVjbGFyYXRpb24pOgorCisgICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBl
KF90eXBlKToKKyAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSkKKworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFs
aWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBl
KHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5
cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1v
dXM6CisgICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZScgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVf
bWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisKKyAgICAgICAgcmV0dXJu
IGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKToKKyAg
ICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQLmdldChfdHlwZS5yYXdfbmFt
ZSgpKQorCisgICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2Fy
eSBpbiBhIHNpdHVhdGlvbi4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF91c2Vf
d3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gbm90IGlzaW5z
dGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Cisg
ICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkg
b3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gIm9iamVjdCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwNDg4NDJiZmM1YjZjZDgyYmQ1NDg5Njc2MzI4
NzdiZDA5ZWFlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMCww
ICsxLDI3NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdo
aWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUg
Y2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2Rl
bC4KKworY2xhc3MgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzOgorCisgICAgSGVhZGVyUHJlbHVkZSA9
ICgKKyAgICAiIiIjaWZuZGVmICR7aGVhZGVyR3VhcmRTdHJpbmd9CisjZGVmaW5lICR7aGVhZGVy
R3VhcmRTdHJpbmd9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCiske2luY2x1ZGVzfQorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworJHt0eXBlZGVmc30iIiIpCisKKyAgICBIZWFkZXJQb3N0
bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1YXJkU3RyaW5n
fSkiIiIpCisKKyAgICBJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAgIiIiI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgJHtwcmltYXJ5SW5jbHVkZX0KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyIi
IikKKworICAgIEltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAg
QWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiNpZm5kZWYgJHto
ZWFkZXJHdWFyZFN0cmluZ30KKyNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0cmluZ30KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCiske2luY2x1ZGVzfQorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKyIiIikKKworICAgIEFsdGVybmF0ZURpc3BhdGNo
ZXJzSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikKKworICAgIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckludGVyZmFjZURlY2xhcmF0aW9u
ID0gKAorICAgICIiImNsYXNzIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Cit9OyIiIikKKwor
ICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uID0gKAor
ICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOworfTsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFj
cm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRl
OworJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50OworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGlj
OgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBB
bHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsKKyNlbmRpZgorfTsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uID0gKAorICAgICIiIiAgICAke2NsYXNzQW5kRXhw
b3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgJHtj
YWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJz
fSk7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRl
cnN9KSA9IDA7IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxs
U3dpdGNoID0gKAorICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCiske2Rpc3BhdGNo
Q2FzZXN9CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCisiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAg
IHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoq
Q2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERp
c3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1h
cCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAgICAgICAgY29u
c3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAg
IH0gY29tbWFuZHNbXSA9IHsKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICAgICAgfTsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAg
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAu
ZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywg
IiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1l
c3NhZ2UuZ2V0KCkpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25Eb21haW5Db25zdHJ1Y3RvciA9ICgKKyAgICAiIiJQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICAsIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcihudWxs
cHRyKQorI2VuZGlmCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKK30iIiIp
CisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCisiIiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIp
KTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKKyR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorIiIiKQorCisgICAgQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKKyIiIkluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6
JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJh
Y2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQg
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFj
a05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQoreworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdl
LCBFcnJvclN0cmluZygpKTsKK30iIiIpCisKKyAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5E
aXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KKyR7ZXZlbnREZWNsYXJhdGlvbnN9Citw
cml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7Cit9OyIiIikKKworICAgIFByb3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9u
UHJlbHVkZSA9ICgKKyIiIiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyAke29iamVjdFR5cGV9OworICAgIHB1YmxpYzoiIiIpCisKKyAgICBQcm90b2Nv
bE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0gKAorIiIiCisgICAgICAgIG9wZXJh
dG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR7b2JqZWN0VHlwZX0+Kj4oJm1fcmVz
dWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gcmVs
ZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8JHtvYmplY3RUeXBl
fT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyR7Y29uc3RydWN0b3JFeGFtcGxlfQorICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6U3RydWN0
SXRlbVRyYWl0cyBJdGVtVHJhaXRzOyIiIikKKworICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNh
c3QgPSAoCisiIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmpl
Y3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKKyNlbmRpZiAgLy8gIUFTU0VSVF9ESVNB
QkxFRAorICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2Yo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Cit9CisiIiIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCBhNzZhMjBjNDU2NGNkMjk4YTg2ZDVhMmE5MmI2OTM0ZDNjMmVkOWViLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMg
YXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1pbXBvcnQgcmUKLWZy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAg
R2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRl
ZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgnCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYp
OgotICAgICAgICBoZWFkZXJzID0gWwotICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmgiJywKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAg
ICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRw
dXRfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5j
bHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rp
b25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkFsdGVybmF0ZURp
c3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYu
X2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKSkpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0
Y2hlcnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlm
IG5vdCBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBj
b21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5j
b21tYW5kczoKLSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQotCi0gICAg
ICAgIGhhbmRsZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4o
Y29tbWFuZF9kZWNsYXJhdGlvbnMpLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KLSAg
ICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgIGNvbW1hbmRfYXJncyA9IHsKLSAgICAgICAg
ICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3Bh
cmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCi0gICAgICAgIH0KLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMp
cykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYThjY2U1NTRjNDE1ZjBkMTYyOTU1MGI3Y2Vj
MGJkNWUwZDUyNGQ0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAK
LSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0j
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCi0KLWxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJhY2tlbmRDb21tYW5kc0dl
bmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0
dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMiCi0KLSAgICBkZWYgZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oZG9tYWlu
KToKLSAgICAgICAgICAgIGRvbWFpbl9lbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJh
dGlvbjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSksIGRvbWFpbi50eXBl
X2RlY2xhcmF0aW9ucykKLSAgICAgICAgICAgIHJldHVybiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+
IDAgb3IgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBvciBsZW4oZG9tYWluX2VudW1fdHlwZXMpID4g
MAotCi0gICAgICAgIHJldHVybiBmaWx0ZXIoc2hvdWxkX2dlbmVyYXRlX2RvbWFpbiwgR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0
KHNlbGYpOgotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxm
LmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQotICAgICAgICBy
ZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgZ2VuZXJhdGVfZG9tYWluKHNl
bGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgYXJncyA9IHsKLSAgICAg
ICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUKLSAgICAgICAgfQotCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnLy8gJShkb21haW4pcy4nICUgYXJncykKLQotICAgICAgICBoYXNfYXN5
bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBjb21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBk
b21haW4uY29tbWFuZHMpKQotICAgICAgICBpZiBsZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGhh
c19hc3luY19jb21tYW5kczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiJShkb21haW4pcyIp
OycgJSBhcmdzKQotCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNs
YXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiBkZWNsYXJhdGlvbi50eXBlLmlzX2VudW0oKToKLSAg
ICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdkb21haW4n
OiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRl
Y2xhcmF0aW9uLnR5cGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAi
LmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFs
dWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9u
LnR5cGUuZW51bV92YWx1ZXMoKV0pCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMu
JShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKLQotICAgICAgICAg
ICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0
eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwotCi0gICAgICAgICAgICBmb3IgX21lbWJlciBp
biBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyLCBkZWNsYXJhdGlvbi50eXBlX21lbWJl
cnMpOgotICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAgICAg
J2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ2VudW1O
YW1lJzogJyVzJXMnICUgKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdChfbWVtYmVyLm1l
bWJlcl9uYW1lKSksCi0gICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsn
JXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1f
dmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBfbWVtYmVyLnR5cGUuZW51bV92
YWx1ZXMoKV0pCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlz
IiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKLQotICAgICAgICBkZWYgaXNfYW5vbnlt
b3VzX2VudW1fcGFyYW0ocGFyYW0pOgotICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UocGFy
YW0udHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbS50eXBlLmlzX2Fub255bW91cwotCi0gICAgICAg
IGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgZm9yIHBhcmFtIGluIGZp
bHRlcihpc19hbm9ueW1vdXNfZW51bV9wYXJhbSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycyk6Ci0g
ICAgICAgICAgICAgICAgZW51bV9hcmdzID0gewotICAgICAgICAgICAgICAgICAgICAnZG9tYWlu
JzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAn
JXMlcycgJSAodWNmaXJzdChldmVudC5ldmVudF9uYW1lKSwgdWNmaXJzdChwYXJhbS5wYXJhbWV0
ZXJfbmFtZSkpLAotICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVz
OiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3Zh
bHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW0udHlwZS5lbnVtX3ZhbHVl
cygpXSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7
JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQotCi0gICAgICAgICAgICBldmVudF9hcmdzID0g
ewotICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAg
ICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCi0gICAgICAgICAgICAgICAg
J3BhcmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZv
ciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCi0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
JShkb21haW4pcy4lKGV2ZW50TmFtZSlzIiwgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykK
LQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICBk
ZWYgZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpOgotICAgICAgICAgICAgICAg
IG9wdGlvbmFsX3N0cmluZyA9ICJ0cnVlIiBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAi
ZmFsc2UiCi0gICAgICAgICAgICAgICAgcGFpcnMgPSBbXQotICAgICAgICAgICAgICAgIHBhaXJz
LmFwcGVuZCgnIm5hbWUiOiAiJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3IuanNfbmFt
ZV9mb3JfcGFyYW1ldGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpKQotICAgICAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCgnIm9wdGlvbmFsIjogJXMnICUgb3B0aW9uYWxfc3RyaW5nKQotICAgICAgICAg
ICAgICAgIHJldHVybiAieyVzfSIgJSAiLCAiLmpvaW4ocGFpcnMpCi0KLSAgICAgICAgICAgIGNv
bW1hbmRfYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9u
YW1lLAotICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1l
LAotICAgICAgICAgICAgICAgICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJh
bWV0ZXJfb2JqZWN0KHBhcmFtZXRlcikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFy
YW1ldGVyc10pLAotICAgICAgICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyci
JXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnNdKSwKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShjb21t
YW5kTmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29t
bWFuZF9hcmdzKQotCi0gICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBvciBkb21haW4uZXZlbnRz
OgotICAgICAgICAgICAgYWN0aXZhdGVfYXJncyA9IHsKLSAgICAgICAgICAgICAgICAnZG9tYWlu
JzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICdhdmFpbGFiaWxpdHknOiBk
b21haW4uYXZhaWxhYmlsaXR5LAotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgZG9tYWlu
LmF2YWlsYWJpbGl0eToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMiLCAiJShhdmFpbGFiaWxpdHkpcyIpOycg
JSBhY3RpdmF0ZV9hcmdzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluKXMiKTsn
ICUgYWN0aXZhdGVfYXJncykKLQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDlhMDhlNjEwODhlZjNl
MDQzOTFjNTI4YmY4NTM1ODMwZmFhODQyOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDIwMCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJp
Z2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dp
bmcKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
Ci0KLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJv
bSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQotCi0KLWNsYXNzIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRv
cik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAg
ICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6
Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5k
cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAn
Ikluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCi0gICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVm
UHRyLmg+JywKLSAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KLQotICAgICAg
ICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQotCi0gICAgICAgIGhlYWRl
cl9hcmdzID0gewotICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysn
LCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzog
J1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwK
LSAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5
cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRv
bWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotCi0gICAgICAgIHNlY3Rpb25zID0g
W10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclByZWx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfZG9tYWlucyhkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKLSAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQotCi0gICAgIyBQ
cml2YXRlIG1ldGhvZHMuCi0KLSAgICBkZWYgX2dlbmVyYXRlX2FsdGVybmF0ZV9oYW5kbGVyX2Zv
cndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgotICAgICAgICBp
ZiBub3QgZG9tYWluczoKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpJykKLSAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAn
Y2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRv
bWFpbl9uYW1lKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgotICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KLSAg
ICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9y
dF9tYWNybycsIE5vbmUpCi0gICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKLQotICAgICAgICB1
c2VkX2VudW1fbmFtZXMgPSBzZXQoKQotCi0gICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0g
W10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAg
Y29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKLQotICAgICAgICBo
YW5kbGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5q
b2luKGNsYXNzQ29tcG9uZW50cyksCi0gICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5k
b21haW5fbmFtZSwKLSAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2lu
KGNvbW1hbmRfZGVjbGFyYXRpb25zKQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipoYW5kbGVyX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6Ci0gICAgICAgIGVudW1f
YXJncyA9IHsKLSAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUK
LSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBn
ZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21tYW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRl
ci50eXBlLmVudW1fdmFsdWVzKCk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
JXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1f
dmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0K
LSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKLSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0
aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBw
YXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyYnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBj
b21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIl
cyBpbl8lcyIgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2lu
X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAgICAgICAgICAgICB1c2VkX2VudW1f
bmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgZm9yIF9wYXJh
bWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAg
aWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX291dF9wYXJhbWV0
ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0ZXIs
IGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdwYXJh
bWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCi0gICAgICAgIH0KLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
PSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0K
LSAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQo
c2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVj
Zmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpCi0KLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFsn
RXJyb3JTdHJpbmcmJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUg
KEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIo
X3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJh
bWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQot
Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4g
Y29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFw
cGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3Bh
cmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAg
ICAgY2xhc3NfY29tcG9uZW50cyA9IFsnY2xhc3MnXQotICAgICAgICBleHBvcnRfbWFjcm8gPSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAg
ICAgIGlmIGV4cG9ydF9tYWNybzoKLSAgICAgICAgICAgIGNsYXNzX2NvbXBvbmVudHMuYXBwZW5k
KGV4cG9ydF9tYWNybykKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAn
Y2xhc3NBbmRFeHBvcnRNYWNybyc6ICcgJy5qb2luKGNsYXNzX2NvbXBvbmVudHMpLAotICAgICAg
ICAgICAgJ2NhbGxiYWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwKLSAgICAgICAgICAgICdjb21tYW5k
TmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6
ICIsICIuam9pbihpbl9wYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzog
IiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBU
ZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgot
ICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KLSAgICAgICAgZXhwb3J0TWFjcm8g
PSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0g
ICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY2xhc3NDb21w
b25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKLQotICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQot
ICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDA6Ci0gICAgICAgICAgICBkZWNsYXJh
dGlvbnMuYXBwZW5kKCdwcml2YXRlOicpCi0gICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFw
KHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFp
bi5jb21tYW5kcykpCi0KLSAgICAgICAgaGFuZGxlcl9hcmdzID0gewotICAgICAgICAgICAgJ2Ns
YXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAotICAgICAgICAg
ICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAnY29tbWFu
ZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihkZWNsYXJhdGlvbnMpCi0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBs
YXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6
Ci0gICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggOWJlYzU1NzQ0ZTdlZWMyMGZiZWM3NTExOGM0NDE1OTk0ZTBjNDAwMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMg
YXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
VGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCi0KLWxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcCIK
LQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmls
dGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYp
OgotICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKLSAgICAgICAgICAgICc8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCi0gICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4nLAotICAgICAgICAgICAgJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10K
LQotICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMgPSBbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBm
b3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXQotICAgICAgICBzZWNvbmRhcnlfaW5jbHVk
ZXMuYXBwZW5kKCcnKQotICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKLSAgICAgICAgc2Vjb25kYXJ5
X2luY2x1ZGVzLmFwcGVuZCgnI2luY2x1ZGUgIkluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIicpCi0gICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNlbmRpZicp
Ci0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUn
OiAnIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oIicsCi0gICAgICAgICAgICAnc2Vjb25k
YXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oc2Vjb25kYXJ5X2luY2x1ZGVzKSwKLSAgICAgICAgfQot
Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCJcbiIuam9pbihtYXAoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpKSkpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlKCkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNw
cEltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
Ci0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBt
ZXRob2RzLgotCi0gICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBkZXN0cnVjdG9yX2FyZ3MgPSB7Ci0gICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZQotICAgICAgICB9Ci0gICAg
ICAgIGRlc3RydWN0b3IgPSAnSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6On5JbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBkZXN0cnVjdG9yKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0g
ICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCi0KLSAgICAgICAgY29uc3RydWN0b3JfYXJncyA9
IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAg
ICB9Ci0gICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0
ZShOb25lLCAqKmNvbnN0cnVjdG9yX2FyZ3MpKQotCi0gICAgICAgIGlmIGxlbihkb21haW4uY29t
bWFuZHMpIDw9IDU6Ci0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4o
ZG9tYWluKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25f
Zm9yX2RvbWFpbihkb21haW4pKQotCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21t
YW5kczoKLSAgICAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2Ns
YXNzX2Zvcl9kb21haW4oY29tbWFuZCwgZG9tYWluKSkKLSAgICAgICAgICAgIGltcGxlbWVudGF0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3Jf
Y29tbWFuZChjb21tYW5kLCBkb21haW4pKQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkK
LQotICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRp
b25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBjYXNlcyA9IFtdCi0gICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJ
ZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQot
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgotICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lKQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwg
Km1lc3NhZ2UuZ2V0KCkpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKLQotICAgICAgICBzd2l0
Y2hfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCi0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdz
KQotCi0gICAgZGVmIF9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRh
dGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGNhc2VzID0gW10KLSAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgYXJncyA9IHsK
LSAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAg
ICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICAgICB7ICIlKGNvbW1hbmRO
YW1lKXMiLCAmSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21t
YW5kTmFtZSlzIH0sJyAlIGFyZ3MpCi0KLSAgICAgICAgc3dpdGNoX2FyZ3MgPSB7Ci0gICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdkaXNw
YXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VT
d2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKLQotICAgIGRlZiBfZ2VuZXJh
dGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKHNlbGYsIGNvbW1hbmQsIGRvbWFp
bik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAgICAgICBmb3Jt
YWxfcGFyYW1ldGVycyA9IFtdCi0KLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlw
ZShwYXJhbWV0ZXIudHlwZSksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBH
ZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLAot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVz
ICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIo
cGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShw
YXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVz
c2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMi
KSwgJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
ICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFt
ZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0
TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJh
bV9hcmdzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMo
QVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAl
IHBhcmFtX2FyZ3MpCi0KLSAgICAgICAgYXN5bmNfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21h
aW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6
IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAgICAgICAgICAg
ICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwKLSAgICAg
ICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzKQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0
ZShOb25lLCAqKmFzeW5jX2FyZ3MpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgZG9tYWluKToKLSAgICAgICAg
aW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVj
bGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0g
ICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzID0gWydjYWxsSWQn
XQotICAgICAgICBtZXRob2RfcGFyYW1ldGVycyA9IFsnZXJyb3InXQotCi0gICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBvdXRfc3Vj
Y2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJyYlc192YWx1
ZUZvdW5kJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgICAgIGluX3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFs
c2U7JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICAgICAgcGFyYW1fYXJn
cyA9IHsKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0
cmluZ19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAg
J3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAg
ICAgJ2tleWVkR2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUo
cGFyYW1ldGVyLnR5cGUpLAotICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRf
c3VjY2Vzc19hcmd1bWVudAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbl9wYXJhbWV0
ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1l
dGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2Qp
cyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwg
JShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnNQdHIpOycgJSBwYXJhbV9hcmdzKQot
Ci0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
b3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZv
dW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9hcmdzCi0gICAg
ICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJh
bWV0ZXJzLmFwcGVuZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpCi0KLSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFz
eW5jX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCi0gICAgICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5j
b21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJs
ZSgpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
JykKLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAg
IHJldHVybjsnKQotICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFj
aycpCi0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAg
ICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICAgICAn
cGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgJ2tleWVkU2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5
cGUocGFyYW1ldGVyLnR5cGUpLAotCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBl
KXMgb3V0XyUocGFyYW1ldGVyTmFtZSlzOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgR2VuZXJh
dG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQo
JyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFt
X2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRl
cmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUo
KSk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBp
ZiAob3V0XyUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJl
c3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMi
KSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAg
ICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0
TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUg
cGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFt
ZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0KLSAgICAgICAgICAgICAgICBpZiBHZW5lcmF0
b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgot
ICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnJm91dF8nICsgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQotCi0gICAgICAgIGNvbW1hbmRfYXJncyA9IHsKLSAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFt
ZSc6ICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpLAotICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAn
aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucyksCi0gICAgICAgICAgICAnaW52b2NhdGlvblBhcmFtZXRlcnMnOiAnLCAnLmpvaW4obWV0
aG9kX3BhcmFtZXRlcnMpLAotICAgICAgICAgICAgJ2FsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0
ZXJzJzogJywgJy5qb2luKGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzKSwK
LSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgbGVuKGNvbW1hbmQu
Y2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIElu
c3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9t
YWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKScgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCi0KLSAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cykuc3Vi
c3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCi0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeycpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPiUoY29tbWFuZE5hbWUp
cyglKGFsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVy
cm9yOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgaWYgY29tbWFu
ZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0
b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUp
cz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlcixj
YWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVycykgPiAwOgotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1h
bmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAg
ICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVycykgPiAxOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgeycpCi0gICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotICAgICAgICBl
bGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAxOgotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAgICAgbGluZXMu
ZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCi0KLSAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
LSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGE4ZDVhZmVlZDQ0NTJlZTlmYmY3OGVh
NTJiOTQzM2ZhYjIzNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworaW1wb3J0IHJlCitmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKK2Zyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBDcHBUZW1wbGF0ZXMKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKwor
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQ3BwQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgnCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBo
ZWFkZXJzID0gWworICAgICAgICAgICAgJyJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiJywKKyAg
ICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4n
LAorICAgICAgICBdCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVh
ZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUo
KSksCisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVh
ZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlu
cyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJz
SGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRl
X2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKSkpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlRGlzcGF0Y2hlcnNI
ZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
cmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBk
b21haW4uY29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBjb21tYW5k
X2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5k
czoKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQorCisgICAgICAgIGhh
bmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLAorICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFu
ZF9kZWNsYXJhdGlvbnMpLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRp
b24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAg
ICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KKyAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCisgICAgICAgIH0KKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
PSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNzJjMDBhZWZhYjU3OWJjZDI3OGM5
YzA4ZmM2MDUzYTRkZGMwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDIwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
CisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJv
bSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAor
ZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQorCisKK2NsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdl
bmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
CisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oIgorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5j
b21tYW5kcykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAg
IGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAg
ICAgICAnIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCisgICAgICAgICAgICAnPGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9Q
YXNzUmVmUHRyLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KKwor
ICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisgICAgICAg
IGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3Vi
KCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1
ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRl
cnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7
JyAlIHR5cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgfQorCisgICAg
ICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorCisgICAgICAgIHNlY3Rp
b25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkhlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWlucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChz
ZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKENwcFRlbXBsYXRlcy5IZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAq
KmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisg
ICAgIyBQcml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2FsdGVybmF0ZV9oYW5k
bGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgorICAg
ICAgICBpZiBub3QgZG9tYWluczoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpJykKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCAnY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9t
YWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKKyAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNz
J10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmco
J2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAg
ICAgICB1c2VkX2VudW1fbmFtZXMgPSBzZXQoKQorCisgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRp
b25zID0gW10KKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAg
ICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKworICAg
ICAgICBoYW5kbGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6
ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyksCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxu
Ii5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6CisgICAg
ICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21t
YW5kX25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1lKXNc
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21tYW5kTmFtZSlzLicgJSBlbnVt
X2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2Zp
cnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGlu
IHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3Zh
bHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUp
KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2Zp
cnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKKyAgICAgICAgaWYgY29tbWFuZC5p
c19hc3luYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCisKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyYnXQorICAgICAgICBmb3IgX3BhcmFt
ZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKCIlcyBpbl8lcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRf
Zm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKKyAgICAgICAgICAgICAgICB1
c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAg
Zm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291
dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9w
YXJhbWV0ZXIsIGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQo
X3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCisgICAgICAgIH0KKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFt
ZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9y
X2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxi
YWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpCisKKyAgICAgICAgaW5fcGFyYW1l
dGVycyA9IFsnRXJyb3JTdHJpbmcmJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMg
aW5fJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9w
YXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJh
Y2tOYW1lKQorCisgICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIF9wYXJh
bWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFs
X2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
CisKKyAgICAgICAgY2xhc3NfY29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRf
bWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5v
bmUpCisgICAgICAgIGlmIGV4cG9ydF9tYWNybzoKKyAgICAgICAgICAgIGNsYXNzX2NvbXBvbmVu
dHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAg
ICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICcgJy5qb2luKGNsYXNzX2NvbXBvbmVudHMp
LAorICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwKKyAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFy
YW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJh
bWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3lu
Y0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAg
ZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNy
bycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICBkZWNsYXJh
dGlvbnMgPSBbXQorICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDA6CisgICAgICAg
ICAgICBkZWNsYXJhdGlvbnMuYXBwZW5kKCdwcml2YXRlOicpCisgICAgICAgIGRlY2xhcmF0aW9u
cy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQsIGRvbWFpbi5jb21tYW5kcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAg
ICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMp
LAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAg
ICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihkZWNsYXJhdGlvbnMpCisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFp
bkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQo
c2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5j
b21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg0NjE1ZGQxMzQ1OWMxZjMxMjdiNWZiNTE5YjU2YmI5ZWE0MDhjMTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0w
LDAgKzEsMjg3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUs
IEFycmF5VHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAg
IEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5jcHAiCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmNvbW1hbmRz
KSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAg
ICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAg
ICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3Rm
L3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gWycjaW5j
bHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10KKyAgICAg
ICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnJykKKyAgICAgICAgc2Vjb25kYXJ5X2luY2x1
ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScp
CisgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNpbmNsdWRlICJJbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCInKQorICAgICAgICBzZWNvbmRhcnlfaW5jbHVk
ZXMuYXBwZW5kKCcjZW5kaWYnKQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCInLAor
ICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKHNlY29uZGFyeV9pbmNs
dWRlcyksCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiXG4iLmpv
aW4obWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWlu
LCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQo
bWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4s
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMp
CisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9j
bGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZGVzdHJ1
Y3Rvcl9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25h
bWUKKyAgICAgICAgfQorICAgICAgICBkZXN0cnVjdG9yID0gJ0luc3BlY3RvciUoZG9tYWluTmFt
ZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1Y3Rvcl9hcmdzCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikK
KworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQorCisgICAgICAg
IGNvbnN0cnVjdG9yX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5k
b21haW5fbmFtZSwKKyAgICAgICAgfQorICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWlu
Q29uc3RydWN0b3IpLnN1YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkKKworICAg
ICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA8PSA1OgorICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBs
ZW1lbnRhdGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJf
c3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKKworICAgICAgICBmb3Ig
Y29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBpZiBjb21tYW5kLmlzX2Fz
eW5jOgorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCisg
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwgZG9tYWluKSkKKworICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5q
b2luKGltcGxlbWVudGF0aW9ucykpCisKKyAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNo
ZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAg
ICAgY2FzZXMgPSBbXQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIl
cyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgZG9tYWluLmNvbW1h
bmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1h
bmRzWzE6XToKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9
PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGNhc2VzLmFwcGVu
ZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgY29tbWFuZC5jb21tYW5k
X25hbWUpCisKKyAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFt
ZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxu
Ii5qb2luKGNhc2VzKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0
aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlz
cGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICBjYXNlcyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5k
czoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFu
ZC5jb21tYW5kX25hbWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgn
ICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJkluc3BlY3RvciUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKQorCisgICAgICAg
IHN3aXRjaF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUsICoqc3dp
dGNoX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9y
X2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzID0gW10KKyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAg
IHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0
dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcy5pc0Fzc2ln
bmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9k
KXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcy5n
ZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICgl
KHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5
ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1l
dGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5
cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMu
YXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwo
IiUocGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFu
dFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1l
dGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAg
ICBhc3luY19hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1h
bmRfbmFtZSkgKyAnQ2FsbGJhY2snLAorICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAi
LCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ291dFBhcmFtZXRlckFz
c2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJn
cykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29t
bWFuZChzZWxmLCBjb21tYW5kLCBkb21haW4pOgorICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgb3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KKyAgICAgICAgYWx0ZXJuYXRlX2Rp
c3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBbJ2NhbGxJZCddCisgICAgICAgIG1ldGhvZF9w
YXJhbWV0ZXJzID0gWydlcnJvciddCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJ251
bGxwdHInCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVzX3ZhbHVlRm91bmQnICUgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9u
cy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxzZTsnICUgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorCisgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9w
YXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2Qn
OiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUp
LAorICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVu
dAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25z
LmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFy
YW0pcywgcHJvdG9jb2xFcnJvcnNQdHIpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFy
YW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFy
YW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9hcmdzCisgICAgICAgICAgICAgICAgYWx0
ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3Bh
cmFtZXRlcl9zdHJpbmcpCisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
aW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAg
ICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsg
J0NhbGxiYWNrJworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCisgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKKyAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAg
ICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCisKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1l
dGVyczoKKyAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3Bh
cmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0
TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRl
ci50eXBlKSwKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8lKHBh
cmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAg
IGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQo
JyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShw
YXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBw
YXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8l
KHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUo
a2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8l
KHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxpZiBw
YXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClz
KEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0XyUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2Fy
Z3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9k
KXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNo
b3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAg
ICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWlu
TmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAn
JXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKKyAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFy
YW1ldGVyRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMp
LAorICAgICAgICAgICAgJ2ludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKG1ldGhvZF9w
YXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycyc6
ICcsICcuam9pbihhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyksCisgICAg
ICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxf
cGFyYW1ldGVycykgPT0gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0
b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSknICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ3snKQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykg
PiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0
aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT4lKGNvbW1hbmROYW1lKXMo
JShhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIH0nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKKworICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJv
cjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGlmIGNvbW1hbmQu
aXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9y
JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+
IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIsY2Fs
bElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5k
TmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7JykKKyAgICAgICAg
ICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnMpID4gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxp
ZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0gMToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKKyAgICAgICAgICAgIGxpbmVzLmV4
dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorCisgICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisg
ICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWUwNGFkZjY4NDlkOGE2NzU5M2VmYWFjZGEwNWJjY2JkYThkZjI2OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMCww
ICsxLDExOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
cmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVu
dW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIENw
cEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3Iu
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvclByb3Rv
Y29sT2JqZWN0cy5oIicsCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2Zp
bGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUg
JyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVm
cyc6ICcnLAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAg
ICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2Rz
LgorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYs
IHBhcmFtZXRlciwgZXZlbnQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAn
cGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICdl
dmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0
ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAl
KGV2ZW50TmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQor
ICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJh
dG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2Rp
bmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAg
ICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAg
ICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9u
ZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0
KFtdKQorCisgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBldmVu
dCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChldmVudCwg
ZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAg
ICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRz
KSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9t
YWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFp
bkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNl
bGYsIGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1lcyk6CisgICAgICAgIGZvcm1hbF9wYXJh
bWV0ZXJzID0gW10KKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5h
cHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFs
X2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihwYXJhbWV0ZXIsIGV2ZW50KSkKKyAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFt
ZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBsaW5lcy5hcHBlbmQo
IiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxf
cGFyYW1ldGVycykpKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjcwYjNiNTkwZjRi
NzMzYjdkNzRhZThhYzFmNzFlODJmYWU5ODYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCitmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1
Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKK2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
IgorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBm
aWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYp
OgorICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQor
CisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzog
JyJJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgiJywKKyAgICAgICAgICAgICdzZWNvbmRh
cnlJbmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVy
IGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9
IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5JbXBsZW1lbnRhdGlv
blByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rp
b25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNf
Zm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9p
bihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Cisg
ICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4u
ZXZlbnRzOgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkKKwor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdc
blxuJy5qb2luKGltcGxlbWVudGF0aW9ucykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgorICAgICAg
ICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAg
IGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CisKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGFuZCBub3QgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBl
KHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicg
KyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0o
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIHBhcmFtZXRlcl92YWx1ZQorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6
IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIp
LAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92YWx1ZSwK
KyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRl
cl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFy
YW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgICAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwo
IiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9h
cmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlM
aXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bWV0ZXJfYXJncykKKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAl
cycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJh
bWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBl
dmVudF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25h
bWUsCisgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZSwKKyAgICAgICAg
ICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKQorICAg
ICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFt
ZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2ZW50TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVycylz
KScgJSBldmVudF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiUo
ZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiKSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAg
aWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9h
c3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQorCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVy
biAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjBjNmFkOGYy
OTYyMmRiMTYyOGE1MGZhOTE2ZTFiNWRlNzg1MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtMCwwICsxLDM0MSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgorZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIENwcFRlbXBsYXRlcworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmltaXRp
dmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBGcmFtZXdvcmtzCisKK2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkK
KyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMo
ZG9tYWlucykKKworICAgICAgICBoZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAgICc8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvQXNzZXJ0
aW9ucy5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JworICAgICAgICBdKQor
CisgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
ZXhwb3J0X21hY3JvJywgTm9uZSkKKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9m
aWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRl
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAgICAg
ICd0eXBlZGVmcyc6ICcnLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuX3R5cGUgPSAnU3Ry
aW5nJworICAgICAgICByZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyA9IFtyZXR1cm5fdHlw
ZV0KKyAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0
dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm9bOjBdID0gW2V4cG9ydF9tYWNyb10KKworICAgICAg
ICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xp
Y2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5I
ZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBQcm90b2NvbCB7JykKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKGRvbWFpbnMpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnMoZG9tYWlucykpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnJXMgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
OycgJSAnICcuam9pbihyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybykpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oWworICAgICAgICAgICAgJ3RlbXBsYXRlPHR5cGVuYW1l
IFQ+ICVzIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKScgJSByZXR1cm5fdHlwZSwK
KyAgICAgICAgICAgICd7JywKKyAgICAgICAgICAgICcgICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7JywKKyAgICAgICAgICAgICd9J10p
KQorCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRl
cnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihs
YW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfYmluZGluZ190cmFpdHMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbCcpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisg
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRo
b2RzLgorCisgICAgIyBGSVhNRTogbW92ZSBidWlsZGVycyBvdXQgb2YgY2xhc3NlcywgdW5jb21t
ZW50IGZvcndhcmQgZGVjbGFyYXRpb24KKworICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNs
YXJhdGlvbnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAgIHNlY3Rpb25zID0gW10KKworICAgICAg
ICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9
IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zXQorICAgICAg
ICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlw
ZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgZW51bV90eXBl
cyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVj
bGFyYXRpb25fdHlwZXMpCisgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxlbihl
bnVtX3R5cGVzKSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg
IGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1l
c3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgIG9iamVjdF90
eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9yIF90eXBlIGluIG9iamVjdF90eXBlc10K
KyAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFtZSgpIGZvciBfdHlw
ZSBpbiBlbnVtX3R5cGVzXQorCisgICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFyZSBhbGwgY2xh
c3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFycmFuZ2VkLgorICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUg
aW4gc29ydGVkKG9iamVjdF90eXBlX25hbWVzKSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5l
eHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKGVudW1fdHlw
ZV9uYW1lcykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRv
bWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQor
CisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJwor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorJXMKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyIiIiAlICdcblxuJy5q
b2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5z
KToKKyAgICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykKKyAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxl
bih0ZXh0KSA+IDAsIHNlY3Rpb25zKQorCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoK
KyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
ICIiIi8vIFR5cGVkZWZzLgorJXMKKy8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9p
bihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJk
YSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnMpCisgICAgICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAw
OgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAg
ICBmb3IgZGVjbGFyYXRpb24gaW4gcHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAg
IHByaW1pdGl2ZV9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlw
ZShkZWNsYXJhdGlvbi50eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIHR5cGVkZWZfbGlu
ZXMgPSBbXQorICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6
CisgICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xh
cmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5
cGVkZWYgJXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkK
KyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisK
KyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7
JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2lu
KHNlY3Rpb25zKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21h
aW5fbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHNlY3Rpb25zID0gW10KKworICAgICAg
ICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgor
ICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9y
X2VudW1fZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICBlbGlmIGlz
aW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNs
YXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pKQorCisgICAgICAgIHNlY3Rpb25zID0g
ZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9ucykKKyAgICAg
ICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRv
bWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9u
cykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwg
J1xuJy5qb2luKGxpbmVzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9k
ZWNsYXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAgICBpZiBs
ZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6CisgICAgICAgICAgICByZXR1
cm4gJycKKworICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogaXNp
bnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1v
dXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICByZXF1aXJlZF9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVf
ZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmls
dGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnMpCisgICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0
aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICov
JyAlIHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisgICAgICAgIGJhc2VfY2xhc3MgPSAn
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlw
ZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAgICAgICAgIGJh
c2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCisgICAgICAgIGxpbmVzLmFwcGVuZCgnY2xh
c3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQorICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZW51
bV9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIg
cHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVudW1fbWVtYmVy
Lm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51bV9tZW1iZXIp
KQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVt
KHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQor
ICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0cjwlcz4gcmVz
dWx0ID0gJXM6OmNyZWF0ZSgpJyAlIChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUpKQorICAgICAg
ICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBjb25zdHJ1Y3Rv
cl9leGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2ZpcnN0KG1lbWJl
ci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgYnVpbGRlcl9hcmdzID0geworICAgICAgICAgICAg
J29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKKyAgICAgICAgICAgICdjb25zdHJ1Y3RvckV4YW1w
bGUnOiAnXG4nLmpvaW4oY29uc3RydWN0b3JfZXhhbXBsZSkgKyAnOycsCisgICAgICAgIH0KKwor
ICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLlByb3RvY29sT2JqZWN0
QnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJn
cykpCisgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1i
ZXIodHlwZV9tZW1iZXIsIGRvbWFpbikpCisgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShD
cHBUZW1wbGF0ZXMuUHJvdG9jb2xPYmplY3RCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0
aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91
bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIobWVtYmVyLCBkb21haW4pKQorCisgICAgICAgIGlm
IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKKyAgICAg
ICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoK
KyAgICAgICAgICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNl
dHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1Y2ZpcnN0
KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9Oycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYs
IGVudW1fZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAg
bGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVj
bGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5cGUpKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255
bW91c19lbnVtX21lbWJlcihzZWxmLCBlbnVtX21lbWJlcik6CisgICAgICAgIGRlZiBhcHBseV9p
bmRlbnRhdGlvbihsaW5lKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAn
LyonLCAnKi8nLCAnLy8nKSkgb3IgbGVuKGxpbmUpIGlzIDA6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGxpbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICcgICAg
JyArIGxpbmUKKworICAgICAgICBpbmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlv
biwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVy
X25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVu
dGVkX2xpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxm
LCBlbnVtX25hbWUsIGVudW1fdHlwZSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZW51
bV9uYW1lID0gdWNmaXJzdChlbnVtX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBj
bGFzcyAlcyB7JyAlIGVudW1fbmFtZSkKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90
eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVz
LCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSks
IHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ307IC8vIGVudW0gY2xhc3MgJXMnICUgZW51bV9uYW1lKQorICAgICAgICByZXR1
cm4gbGluZXMgICMgVGhlIGNhbGxlciBtYXkgd2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNv
IGRvbid0IGpvaW4gdGhlc2UgbGluZXMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3Rh
dGVfZW51bShzZWxmLCB0eXBlX2RlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIu
aXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBlbnVt
X3ZhbHVlcyA9IFtdCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIE5vRmllbGRzU2V0ID0gMCwnKQorICAgICAgICBmb3Ig
aSBpbiByYW5nZShsZW4ocmVxdWlyZWRfbWVtYmVycykpOgorICAgICAgICAgICAgZW51bV92YWx1
ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0KHJlcXVpcmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCisg
ICAgICAgICAgICBlbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAlcyA9IDEgPDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKKyAg
ICAgICAgaWYgbGVuKGVudW1fdmFsdWVzKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgQWxsRmllbGRzU2V0ID0gKCVzKScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAwJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRv
bWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0geworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6
IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAorICAgICAgICAgICAgJ2tleWVkU2V0
JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5
cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAg
ICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21l
bWJlcih0eXBlX21lbWJlcikKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRl
cjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVy
VHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9z
ZXQpOycgJSBzZXR0ZXJfYXJncykKKworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAg
bV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUp
KSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShu
YW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPCUoY2FtZWxOYW1lKXNTZXQ+KCk7JyAlIHNldHRl
cl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfScpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJf
Zm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToKKyAgICAgICAgc2V0dGVyX2Fy
Z3MgPSB7CisgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSksCisgICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRl
cl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbmFtZSc6
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQorICAgICAg
ICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5
cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHsn
KQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjolKGtl
eWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJf
YXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJ
bnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIp
LCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykK
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKHNlbGYpOgorICAgICAgICAjIEEg
bGlzdCBvZiAoYnVpbGRlcl90eXBlLCBuZWVkc19ydW50aW1lX2Nhc3QpCisgICAgICAgIHR5cGVf
YXJndW1lbnRzID0gW10KKworICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpOgorICAgICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVy
KGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUp
LCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisKKyAgICAgICAgICAgIGZvciB0eXBlX2RlY2xh
cmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAgICAgICAgICAgICAgICBmb3Ig
dHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xh
cmF0aW9uKSwgRmFsc2UpKQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2Fy
Z3VtZW50cy5hcHBlbmQoKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3Rz
KHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQorCisgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsn
c3RydWN0J10KKyAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KKyAg
ICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBv
cnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKyAgICAgICAg
ICAgICNmdW5jdGlvbl9rZXl3b3Jkc1sxOjFdID0gW2V4cG9ydF9tYWNyb10KKworICAgICAgICBs
aW5lcyA9IFtdCisgICAgICAgIGZvciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAl
ICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1bWVudFswXSkpCisgICAgICAgICAgICBp
ZiBhcmd1bWVudFsxXToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBQYXNz
UmVmUHRyPCVzPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNp
ZiAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcu
am9pbihmdW5jdGlvbl9rZXl3b3JkcykpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRp
ZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMxZWY0OTQxMmRhYjljMDNiNzJmMDMzM2VjYmYzYmYwYzg5ZTM5
YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkKQEAgLTAsMCArMSwxODEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gY3Bw
X2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCitmcm9tIGdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgQWxp
YXNlZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKKworbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAiCisKKyAgICBkZWYgZ2Vu
ZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fz
c2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsnPHd0Zi90
ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAg
J3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCInLAorICAgICAg
ICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVh
ZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAg
ICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVz
LkltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgUHJvdG9jb2wgeycpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKKyAgICAg
ICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9t
YWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0
aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBQcm90b2NvbCcpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4o
c2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVf
ZW51bV9tYXBwaW5nKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
JykKKyAgICAgICAgbGluZXMuZXh0ZW5kKFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUgZm9yIGVu
dW1fdmFsdWUgaW4gc2VsZi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCdTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KworICAgIGRlZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyhzZWxmKToKKyAgICAgICAgbGlu
ZXMgPSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgp
OgorICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNs
OiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVf
ZGVjbGFyYXRpb25zKToKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVk
KHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVy
Lm1lbWJlcl9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9p
bihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0
eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25h
bWUpXSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9
ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNf
Zm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAg
IGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBl
X25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zKQorCisgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19n
ZW5lcmF0ZToKKyAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJh
dGlvbikpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBl
LCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikp
CisgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlw
ZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihz
ZWxmLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAg
J29iamVjdFR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2Jq
ZWN0X2RlY2xhcmF0aW9uLnR5cGUpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRl
KENwcFRlbXBsYXRlcy5Qcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUs
ICoqYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFy
YXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVy
cyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3Rf
ZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmls
dGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykKKyAgICAgICAgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2Vu
ZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAg
ICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNB
QkxFRCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiInsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
T2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3Vj
Y2VlZGVkKTsiIiIpCisgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJz
OgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5
cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgiIiIgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUo
bWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1l
KXMiKSk7CisgICAgICAgIEFTU0VSVCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgp
KTsKKyAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0
KCkpOworICAgIH0iIiIgJSBhcmdzKQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0
aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9t
ZW1iZXJzKSkKKworICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoK
KyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogQ3Bw
R2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJl
ciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoIiIiICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1l
bWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlz
IikpOworICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewor
ICAgICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0
KCkpOyIiIiAlIGFyZ3MpCisKKyAgICAgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVz
OgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgKytmb3VuZFByb3Bl
cnRpZXNDb3VudDsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIH0nKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisKKyAgICAgICAgaWYgc2hvdWxkX2NvdW50
X3Byb3BlcnRpZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZm91bmRQcm9w
ZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcXG4i
LCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVEJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHNlbGYsIGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFy
YXRpb24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFB
U1NFUlRfRElTQUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmlu
ZyByZXN1bHQ7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
QVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCisKKyAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcg
fHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyInICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBp
biBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCldKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0aW9uKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
JykKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzNmZjdiMGZjZDcyMjUyMmQ2MGIyZWNmNGE0
Nzk1N2U2MGRkMmYyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDEx
NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBy
ZQotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gbW9k
ZWxzIGltcG9ydCBFbnVtVHlwZQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMg
YXMgVGVtcGxhdGVzCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNs
YXNzIEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIkluc3BlY3RvclBy
b3RvY29sT2JqZWN0cy5oIicsCi0gICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4nLAotICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+JywKLSAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAotICAgICAgICAgICAgJzx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAg
ICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0
X2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1
ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKLSAgICAgICAgICAgICd0eXBl
ZGVmcyc6ICcnLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBbXQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9n
ZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0g
ICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAgICMgUHJpdmF0ZSBtZXRo
b2RzLgotCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNl
bGYsIHBhcmFtZXRlciwgZXZlbnQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAg
ICdldmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lCi0gICAgICAgIH0KLQotICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVu
dCAlKGV2ZW50TmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygp
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICAlcyA9ICVkLCcgJSAoR2Vu
ZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5j
b2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
LSAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCi0gICAgICAgIGV4cG9ydE1hY3Jv
ID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQot
ICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNsYXNzQ29t
cG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCi0KLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0g
c2V0KFtdKQotCi0gICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBl
dmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChldmVu
dCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQotCi0gICAgICAgIGhhbmRsZXJfYXJncyA9IHsK
LSAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25l
bnRzKSwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAg
ICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9u
cykKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
ZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFp
bkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykp
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNl
bGYsIGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1lcyk6Ci0gICAgICAgIGZvcm1hbF9wYXJh
bWV0ZXJzID0gW10KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5h
cHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFs
X2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQot
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihwYXJhbWV0ZXIsIGV2ZW50KSkKLSAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFt
ZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBsaW5lcy5hcHBlbmQo
IiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxf
cGFyYW1ldGVycykpKQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDBk
NTUxODM2MGIwMGUxNTg5ZGU1YWMyMDk4ZTQ5NGFhZmM2NjhlNWYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0jIS91c3IvYmluL2Vu
diBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUg
bWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1m
cm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1w
bGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKLQotbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiAiSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiCi0K
LSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRl
cihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0g
ICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPiddCi0KLSAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIklu
c3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaCInLAotICAgICAgICAgICAgJ3NlY29uZGFyeUlu
Y2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4g
c2Vjb25kYXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIHNlY3Rpb25zID0gW10K
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMu
ZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3Jf
ZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNl
Y3Rpb25zKQotCi0gICAgIyBQcml2YXRlIG1ldGhvZHMuCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAg
ICAgaW1wbGVtZW50YXRpb25zID0gW10KLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVu
dHM6Ci0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQotCi0gICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4n
LmpvaW4oaW1wbGVtZW50YXRpb25zKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6Ci0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KLSAgICAgICAgZm9y
bWFsX3BhcmFtZXRlcnMgPSBbXQotCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZl
bnRfcGFyYW1ldGVyczoKLQotICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5k
IG5vdCBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1l
dGVyLnR5cGUpOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFt
ZXRlcl92YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCi0KLSAgICAgICAgICAgIHBh
cmFtZXRlcl9hcmdzID0gewotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJh
dG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0g
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zv
cl90eXBlKHBhcmFtZXRlci50eXBlKSwKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdz
KQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRl
ck5hbWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShw
YXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3Mp
Ci0KLSAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFt
ZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgZXZlbnRfYXJncyA9
IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAg
ICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCi0gICAgICAgICAgICAnZm9ybWFs
UGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykKLSAgICAgICAgfQotCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5k
RGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRf
YXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQotCi0gICAgICAgIGlmIGxlbihwYXJh
bWV0ZXJfYXNzaWdubWVudHMpID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMp
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKLQotICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gIlxuIi5qb2lu
KGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRf
Y29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM5MmM3ODQ1OTNjOTE0N2NiZjg0NTY3YTgxNzU4MGM3
Zjk2Y2IxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTAs
MCArMSwxMzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1U
eXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxm
LCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIKKworICAgIGRl
ZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRl
X2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBmaWx0ZXIo
bGFtYmRhIGRlY2xhcmF0aW9uOiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBl
KSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgcmV0dXJuIGxlbihkb21h
aW4uY29tbWFuZHMpID4gMCBvciBsZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGxlbihkb21haW5f
ZW51bV90eXBlcykgPiAwCisKKyAgICAgICAgcmV0dXJuIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVf
ZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5l
eHRlbmQobWFwKHNlbGYuZ2VuZXJhdGVfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
KSkpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5l
cmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBh
cmdzID0geworICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQorICAgICAg
ICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcvLyAlKGRvbWFpbilzLicgJSBhcmdzKQorCisg
ICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1h
bmQuaXNfYXN5bmMsIGRvbWFpbi5jb21tYW5kcykpCisgICAgICAgIGlmIGxlbihkb21haW4uZXZl
bnRzKSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1hbmRzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJShkb21haW4pc0Rpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICIlKGRvbWFpbilzIik7JyAlIGFyZ3MpCisKKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRv
bWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUu
aXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
J2VudW1OYW1lJzogZGVjbGFyYXRpb24udHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAn
ZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFt
ZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUg
aW4gZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdz
KQorCisgICAgICAgICAgICBkZWYgaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVy
KToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBF
bnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzCisKKyAgICAgICAgICAg
IGZvciBfbWVtYmVyIGluIGZpbHRlcihpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIsIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycyk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAgICAg
ICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2Zp
cnN0KF9tZW1iZXIubWVtYmVyX25hbWUpKSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAn
OiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2Vu
dW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIF9tZW1i
ZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4p
cy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAgICAg
IGRlZiBpc19hbm9ueW1vdXNfZW51bV9wYXJhbShwYXJhbSk6CisgICAgICAgICAgICByZXR1cm4g
aXNpbnN0YW5jZShwYXJhbS50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtLnR5cGUuaXNfYW5vbnlt
b3VzCisKKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBm
b3IgcGFyYW0gaW4gZmlsdGVyKGlzX2Fub255bW91c19lbnVtX3BhcmFtLCBldmVudC5ldmVudF9w
YXJhbWV0ZXJzKToKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAg
ICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICdlbnVtTmFtZSc6ICclcyVzJyAlICh1Y2ZpcnN0KGV2ZW50LmV2ZW50X25hbWUpLCB1Y2ZpcnN0
KHBhcmFtLnBhcmFtZXRlcl9uYW1lKSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzog
IiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbS50
eXBlLmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUo
ZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgICAg
IGV2ZW50X2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5f
bmFtZSwKKyAgICAgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZSwKKyAg
ICAgICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzXSkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCIlKGRvbWFpbilzLiUoZXZlbnROYW1lKXMiLCBbJShwYXJhbXMpc10pOycg
JSBldmVudF9hcmdzKQorCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoK
KyAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcik6Cisg
ICAgICAgICAgICAgICAgb3B0aW9uYWxfc3RyaW5nID0gInRydWUiIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbCBlbHNlICJmYWxzZSIKKyAgICAgICAgICAgICAgICBwYWlycyA9IFtdCisgICAgICAg
ICAgICAgICAgcGFpcnMuYXBwZW5kKCcibmFtZSI6ICIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnInR5cGUiOiAiJXMiJyAlIEdl
bmVyYXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSkpCisgICAg
ICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcib3B0aW9uYWwiOiAlcycgJSBvcHRpb25hbF9zdHJp
bmcpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihwYWlycykKKwor
ICAgICAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW4nOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFu
ZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJ2NhbGxQYXJhbXMnOiAiLCAiLmpvaW4o
W2dlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QocGFyYW1ldGVyKSBmb3IgcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSksCisgICAgICAgICAgICAgICAgJ3JldHVyblBhcmFtcyc6
ICIsICIuam9pbihbJyIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyc10pLAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShk
b21haW4pcy4lKGNvbW1hbmROYW1lKXMiLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJh
bXMpc10pOycgJSBjb21tYW5kX2FyZ3MpCisKKyAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIG9y
IGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBhY3RpdmF0ZV9hcmdzID0geworICAgICAgICAg
ICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2F2
YWlsYWJpbGl0eSc6IGRvbWFpbi5hdmFpbGFiaWxpdHksCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiBkb21haW4uYXZhaWxhYmlsaXR5OgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiJShkb21haW4pcyIsICIlKGF2YWls
YWJpbGl0eSlzIik7JyAlIGFjdGl2YXRlX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
JShkb21haW4pcyIpOycgJSBhY3RpdmF0ZV9hcmdzKQorCisgICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk2NDVjN2Q4
OTNhZDA5MTcwZjNlNzE0ZjdjNzJhZjVhMTNiNDcwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDEwOSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgcmUKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENw
cEdlbmVyYXRvcgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorZnJvbSBtb2RlbHMg
aW1wb3J0IEZyYW1ld29ya3MKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0
b3IKK2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCisKKworY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVy
YXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Cisg
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisK
KyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzQmFja2Vu
ZERpc3BhdGNoZXJzLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVy
YXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5t
b2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAgICAg
JzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4n
LAorICAgICAgICAgICAgJzx3dGYvUmV0YWluUHRyLmg+JywKKyAgICAgICAgXQorCisgICAgICAg
IGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3Vi
KCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1
ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRl
cnNdKSwKKyAgICAgICAgICAgICdmb3J3YXJkRGVjbGFyYXRpb25zJzogc2VsZi5fZ2VuZXJhdGVf
b2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucygpLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlu
cyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNl
Y3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rp
b25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYp
OgorICAgICAgICBsaW5lcyA9IFsnQHByb3RvY29sICVzJXNEb21haW5IYW5kbGVyOycgJSAoT2Jq
Q0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKSBmb3IgZG9tYWluIGlu
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpXQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW5zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBk
b21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVzJXNE
b21haW5IYW5kbGVyOycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFp
bl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIGlmIG5vdCBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gJycK
KworICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5k
IGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQo
Y29tbWFuZCkpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0
aW9ucyc6ICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucyksCisgICAgICAgICAgICAnb2Jq
Y1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRl
KE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0Rl
Y2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBf
Z2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1h
bmQpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2Fs
bElkJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsK
KyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCisgICAgICAgIH0KKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBh
cmFtZXRlcnMpcykgb3ZlcnJpZGU7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGZmYWU5YjdhZjc3ODg5OTUzNDg0OTM1YWNkMmY4MzhjN2M2YmNlYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CkBAIC0wLDAgKzEsMTc3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0
IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBzdHJpbmcKK2ltcG9ydCByZQorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisK
K2Zyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIGdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yCitmcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcworZnJvbSBvYmpj
X2dlbmVyYXRvciBpbXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dlbmVyYXRvciwgam9pbl90
eXBlX2FuZF9uYW1lCitmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dl
bmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WAorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBm
aWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxl
cl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsKKyAgICAgICAgICAgICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJhdG9y
Lk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVscGVycy5oIicg
JSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICBdCisKKyAgICAgICAgaGVhZGVyX2Fy
Z3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzQmFja2VuZERpc3BhdGNo
ZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnc2Vjb25k
YXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRl
ciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0
aW9uX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAnXG5cbicu
am9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlv
bl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBkb21haW4uY29tbWFu
ZHM6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9u
cyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAg
ICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2lt
cGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCkpCisKKyAgICAgICAgcmV0
dXJuICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVf
aGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQp
OgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElk
J10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAg
ICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2Nv
bW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVy
cyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdzdWNjZXNzQ2FsbGJhY2sn
OiBzZWxmLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFu
ZCksCisgICAgICAgICAgICAnY29udmVyc2lvbnMnOiBzZWxmLl9nZW5lcmF0ZV9jb252ZXJzaW9u
c19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAorICAgICAgICAgICAgJ2ludm9jYXRpb24n
OiBzZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCks
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5k
X2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kKHNl
bGYsIGRvbWFpbiwgY29tbWFuZCk6CisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICBpZiBj
b21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzID0gW10KKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9i
amNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVy
KQorICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3Rv
X29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAg
ICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2Jq
Y190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRl
cnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsnKQorCisgICAgICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorCisgICAg
ICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFt
ZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBl
X29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgY29tbWFuZC5yZXR1cm5fcGFyYW1l
dGVycykKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9pbnRlcl9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlm
aWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorCisgICAg
ICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFt
ZXRlcjogcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2Jq
Y19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJz
KQorICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJf
dG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorCisgICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21l
dGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSkKKyAgICAgICAgICAgICAgICB2YXJfbmFtZSA9
IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHZhcl9leHByZXNzaW9uID0gJyolcycgJSB2
YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJfbmFtZQorICAgICAgICAg
ICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2V4
cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgdmFyX2V4cHJlc3Np
b24pCisgICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoQVND
SUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJf
bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1
bHRPYmplY3QtPiVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhv
ZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOycpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgU3Ry
aW5nKCkpOycpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQorICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3Jf
Y29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGlmIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFy
YW1fbmFtZQorICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVf
Zm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgRmFsc2Up
CisgICAgICAgICAgICBpbl9wYXJhbV9vcHRpb25hbF9zYWZlX25hbWUgPSAnKiVzJyAlIGluX3Bh
cmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgaW5fcGFyYW1fbmFtZQorICAg
ICAgICAgICAgaW1wb3J0X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xf
aW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihpbl9wYXJhbV9vcHRpb25hbF9zYWZlX25h
bWUsIGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKKyAgICAgICAgICAg
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgJXMgPSAlczsnICUgKGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIG9iamNf
aW5fcGFyYW1fbmFtZSksIGltcG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9hbmRfbmFt
ZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJhbV9uYW1lLCBpbXBv
cnRfZXhwcmVzc2lvbikpCisKKyAgICAgICAgaWYgbGluZXM6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKKyAg
ICAgICAgcGFpcnMgPSBbXQorICAgICAgICBwYWlycy5hcHBlbmQoJ1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2snKQorICAgICAgICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2snKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVz
JyAlIGluX3BhcmFtX25hbWUKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycgJSAocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lLCBvYmpjX2luX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBvcHRpb25hbF9leHByZXNzaW9uID0gJyglcyA/ICYlcyA6IG5pbCknICUg
KGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBwYWly
cy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIG9wdGlvbmFsX2V4
cHJlc3Npb24pKQorICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAlcyVzXTsnICUgKGNv
bW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Nv
bmZpZ3VyYXRpb25faGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MjJjZjhmNDExYjgyMmZmNTA3NjIyZDBmZmIyNjkyZGMyNzZmZmQzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weQpAQCAtMCwwICsxLDg2IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yCitmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCitmcm9tIG9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNz
IE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzQ29uZmlndXJhdGlvbi5oJyAlIE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Cisg
ICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIiVzLmgiJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgsCisgICAgICAgIF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVh
ZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuX2NvbW1hbmRfZmls
dGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxl
cl9maWx0ZXIoc2VsZi5tb2RlbCgpKQorICAgICAgICBzZWxmLl9ldmVudF9maWx0ZXIgPSBPYmpD
R2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIo
c2VsZi5tb2RlbCgpKQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKQorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9i
akNUZW1wbGF0ZXMuR2VuZXJpY0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jb25maWd1
cmF0aW9uX2ludGVyZmFjZV9mb3JfZG9tYWlucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuR2VuZXJpY0hlYWRlclBvc3RsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4o
c2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50ZXJmYWNlX2Zv
cl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnQGludGVyZmFjZSBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dCcpCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGxpbmVzLmV4
dGVuZChzZWxmLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KworICAgIGRlZiBfZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIHByb3BlcnR5X2FyZ3MgPSB7CisgICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICd2YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2Vu
ZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSwKKyAgICAgICAg
fQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBz
ZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRl
bXBsYXRlKE9iakNUZW1wbGF0ZXMuQ29uZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eSkuc3Vic3Rp
dHV0ZShOb25lLCAqKnByb3BlcnR5X2FyZ3MpKQorICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFu
ZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChU
ZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbmZpZ3VyYXRpb25FdmVudFByb3BlcnR5KS5zdWJzdGl0
dXRlKE5vbmUsICoqcHJvcGVydHlfYXJncykpCisgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1
cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzMjA1Y2I5ZGNlNzM4N2M5NGU1
YWMyNmRhYTUxYmIwNjg0Mzg5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5l
cmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6CisgICAgICAgIHJldHVybiAnJXNDb25maWd1cmF0aW9uLm1tJyAlIE9iakNHZW5lcmF0
b3IuT0JKQ19QUkVGSVgKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAg
IHNlY29uZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAgJyIlc0ludGVybmFsLmgiJyAlIE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnIiVzQmFja2VuZERpc3BhdGNo
ZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+JywKKyAgICAgICAgICAgICc8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+JywKKyAgICAg
ICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+JywKKyAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+JywKKyAgICAgICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0NvbmZpZ3VyYXRpb24uaCInICUgT2JqQ0dl
bmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICdc
bicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hl
YWRlcnNdKSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuX2NvbW1hbmRfZmlsdGVyID0gT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIo
c2VsZi5tb2RlbCgpKQorICAgICAgICBzZWxmLl9ldmVudF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9y
LnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2Rl
bCgpKQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAg
ICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0
ZXMuSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9p
bXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNl
Y3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW5zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbicp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7JykKKyAgICAgICAgbGlu
ZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2l2YXJzKGRvbWFpbnMpKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2VsZiA9IFtzdXBlciBpbml0XTsnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpZiAoIXNlbGYpJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIHJldHVybiBuaWw7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gc2VsZjsnKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxp
bmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9kZWFsbG9jKGRvbWFpbnMpKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAg
IGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJf
Zm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAg
ICAgICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4p
OgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNw
YXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKGRvbWFpbikpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9pdmFycyhzZWxmLCBkb21haW5z
KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Cisg
ICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRv
bWFpbik6CisgICAgICAgICAgICAgICAgb2JqY19jbGFzc19uYW1lID0gJyVzJXNEb21haW5IYW5k
bGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCisg
ICAgICAgICAgICAgICAgaXZhcl9uYW1lID0gJ18lc0hhbmRsZXInICUgT2JqQ0dlbmVyYXRvci52
YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpZDwlcz4gJXM7JyAlIChvYmpjX2NsYXNzX25hbWUsIGl2YXJfbmFt
ZSkpCisgICAgICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIo
ZG9tYWluKToKKyAgICAgICAgICAgICAgICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkV2
ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFp
bl9uYW1lKQorICAgICAgICAgICAgICAgIGl2YXJfbmFtZSA9ICdfJXNFdmVudERpc3BhdGNoZXIn
ICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyAqJXM7JyAlIChvYmpjX2NsYXNz
X25hbWUsIGl2YXJfbmFtZSkpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIF9nZW5l
cmF0ZV9kZWFsbG9jKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnLSAodm9pZClkZWFsbG9jJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7
JykKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgaWYgZG9tYWlu
LmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFtfJXNIYW5kbGVyIHJlbGVhc2VdOycgJSBPYmpDR2VuZXJh
dG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAgICAgICAg
IGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgorICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtfJXNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
JyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4p
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBbc3VwZXIgZGVhbGxvY107JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgX2dlbmVy
YXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgc2V0
dGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnb2JqY1ByZWZpeCc6IE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgICAgICd2YXJpYWJsZU5hbWVQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLnZhcmlhYmxl
X25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSwKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5Db25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5SW1w
bGVtZW50YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipzZXR0ZXJfYXJncykKKworICAgIGRlZiBf
Z2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbihzZWxmLCBkb21haW4p
OgorICAgICAgICBnZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2Jq
Q0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWlu
LmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ3ZhcmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5l
cmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pLAorICAgICAgICB9
CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbmZpZ3VyYXRpb25HZXR0
ZXJJbXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmdldHRlcl9hcmdzKQorCisgICAg
ZGVmIF92YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAg
ICAgIGRvbWFpbl9uYW1lID0gZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIGlmIGRvbWFpbl9u
YW1lLnN0YXJ0c3dpdGgoJ0RPTScpOgorICAgICAgICAgICAgcmV0dXJuICdkb20nICsgZG9tYWlu
X25hbWVbMzpdCisgICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0NTUycpOgorICAg
ICAgICAgICAgcmV0dXJuICdjc3MnICsgZG9tYWluX25hbWVbMzpdCisgICAgICAgIHJldHVybiBk
b21haW5fbmFtZVs6MV0ubG93ZXIoKSArIGRvbWFpbl9uYW1lWzE6XQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19jb252ZXJzaW9uX2hlbHBlcnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40YmQ1YWIzZjVhOWViYjRjOGYxNjNjZGExZTM2ODc2M2QyMjIzNzBlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19jb252ZXJzaW9uX2hlbHBlcnMucHkKQEAgLTAsMCArMSwxNTUgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgYWRkX25ld2xpbmUobGluZXMpOgorICAgIGlmIGxp
bmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgICAgIHJldHVybgorICAgIGxpbmVzLmFwcGVu
ZCgnJykKKworCitjbGFzcyBPYmpDQ29udmVyc2lvbkhlbHBlcnNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAg
ICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAg
IGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnJXNFbnVtQ29udmVy
c2lvbkhlbHBlcnMuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJh
dG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciJXNBcnJheUNv
bnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAg
IF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdc
bicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAg
ICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuQ29udmVyc2lvbkhlbHBlcnNQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5D
b252ZXJzaW9uSGVscGVyc1N0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQorICAgICAgICBzZWN0
aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMs
IGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRl
cy5Db252ZXJzaW9uSGVscGVyc1Bvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMoc2VsZiwgZG9tYWluKToKKyAgICAgICAg
bGluZXMgPSBbXQorCisgICAgICAgICMgVHlwZSBlbnVtcyBhbmQgbWVtYmVyIGVudW1zLgorICAg
ICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9u
KGRvbWFpbiwgZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5
cGUuaXNfYW5vbnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxp
bmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9u
LCBtZW1iZXIpKQorCisgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMuCisgICAgICAg
IGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgKGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5v
bnltb3VzKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCisgICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9j
b252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyKSkKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAgICAg
ICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRl
cihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorCisgICAgICAgICMg
QW5vbnltb3VzIGV2ZW50IGVudW1zLgorICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50
czoKKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4s
IGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlcikpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9m
b3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CisgICAgICAgIG9iamNf
ZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2Vu
dW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCisgICAgICAgIGVudW1fdmFsdWVzID0gZGVjbGFy
YXRpb24udHlwZS5lbnVtX3ZhbHVlcygpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcob2Jq
Y19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFs
dWVzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBk
ZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24s
IG1lbWJlcikKKyAgICAgICAgZW51bV92YWx1ZXMgPSBtZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2VudW1fb2JqY190b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVz
KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2Nv
bF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKKyAgICAgICAgcmV0dXJuICdc
blxuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252
ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUs
IHBhcmFtZXRlcik6CisgICAgICAgIG9iamNfZW51bV9uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpj
X2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3Jf
Y29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAgIGVudW1fdmFsdWVzID0gcGFyYW1ldGVy
LnR5cGUuZW51bV92YWx1ZXMoKQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51
bV9uYW1lLCBlbnVtX3ZhbHVlcykpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykp
CisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVf
ZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhzZWxmLCBvYmpjX2VudW1fbmFtZSwgZW51bV92
YWx1ZXMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKCVzIHZhbHVlKScgJSBvYmpjX2VudW1fbmFtZSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc3dpdGNo
KHZhbHVlKSB7JykKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBjYXNlICVzJXM6JyAlIChvYmpjX2VudW1fbmFtZSwg
R2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIiVzIik7
JyAlIGVudW1fdmFsdWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKHNlbGYsIG9iamNfZW51bV9u
YW1lLCBlbnVtX3ZhbHVlcyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBw
ZW5kKCd0ZW1wbGF0ZTw+JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdpbmxpbmUgJXMgZnJvbVBy
b3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSknICUgb2JqY19lbnVtX25hbWUpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgneycpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKHZhbHVlID09ICIlcyIpJyAlIGVudW1f
dmFsdWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuICVzJXM7JyAl
IChvYmpjX2VudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gJXMlczsnICUgKG9iamNf
ZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3Zh
bHVlc1swXSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNiODM2ZmEwNWY3NmQ1M2EwYjIwMzhkNTMwYWZlZWY3MDgwZmUyMmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKQEAgLTAsMCArMSwxNTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gY3Bw
X2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9y
Citmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBs
YXRlcyBhcyBPYmpDVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQorCisKK2NsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICcl
c0V2ZW50RGlzcGF0Y2hlcnMubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVy
KHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMg
PSBbCisgICAgICAgICAgICAnIiVzRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiJyAlIE9iakNHZW5l
cmF0b3IuT0JKQ19QUkVGSVgsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPicsCisgICAgICAgIF0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAg
ICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNJbnRlcm5hbC5oIicgJSBPYmpDR2VuZXJh
dG9yLk9CSkNfUFJFRklYLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5q
b2luKFsnI2ltcG9ydCAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVy
c10pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5l
cmF0ZSgpCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
T2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMsIGRvbWFpbnMpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5JbXBsZW1lbnRhdGlvblBvc3RsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gJ1xuXG4n
LmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBkb21haW4uZXZlbnRz
OgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBv
YmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bp
bXBsZW1lbnRhdGlvbiAlcycgJSBvYmpjX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICgh
c2VsZiknKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuIG5pbDsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY29udHJvbGxlcik7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVu
dHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnQoZG9tYWlu
LCBldmVudCkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2V2ZW50KHNlbGYsIGRvbWFpbiwgZXZlbnQpOgorICAgICAgICBsaW5lcyA9IFtd
CisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9zaWduYXR1cmUoZG9t
YWluLCBldmVudCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kQ2hhbm5lbCgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IGlmICghZnJvbnRlbmRDaGFubmVsKScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBy
ZXR1cm47JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorCisgICAgICAgIHJlcXVpcmVkX3Bv
aW50ZXJfcGFyYW1ldGVycyA9IGZpbHRlcihsYW1iZGEgcGFyYW1ldGVyOiBub3QgcGFyYW1ldGVy
LmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUo
cGFyYW1ldGVyLnR5cGUpLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKQorICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHZhcl9u
YW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUs
IHZhcl9uYW1lKSkKKworICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0
ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJh
dG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBldmVudC5ldmVu
dF9wYXJhbWV0ZXJzKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIG9wdGlvbmFsX3BvaW50ZXJf
cGFyYW1ldGVyczoKKyAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlm
aWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisKKyAgICAgICAg
aWYgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzIG9yIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1l
dGVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiVzLiVzIikp
OycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5ldmVudF9uYW1lKSkKKyAgICAgICAgaWYg
ZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9n
ZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhkb21haW4sIGV2ZW50KSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgZnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9ldmVu
dF9zaWduYXR1cmUoc2VsZiwgZG9tYWluLCBldmVudCk6CisgICAgICAgIGlmIG5vdCBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcmV0dXJuICctICh2b2lkKSVzJyAlIGV2ZW50
LmV2ZW50X25hbWUKKyAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycg
JSAocGFyYW1fbmFtZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwg
ZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCisgICAgICAgIHBhaXJz
WzBdID0gdWNmaXJzdChwYWlyc1swXSkKKyAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVz
JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9pbihwYWlycykpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgorICAgICAgICBs
aW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAga2V5
ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShw
YXJhbWV0ZXIudHlwZSkKKyAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBzYWZlX3Zhcl9uYW1lID0gJygqJXMpJyAlIHZhcl9uYW1lIGlm
IHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAgICAgICAgICBleHBvcnRf
ZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lv
bl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNhZmVfdmFyX25hbWUpCisgICAgICAgICAg
ICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIHBhcmFtc09iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChr
ZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNz
aW9uKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKCVzKScgJSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcyhBU0NJSUxpdGVyYWwoIiVz
IiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
ZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKyAg
ICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVh
ZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1NTZmNDJlOWQxM2Y4ZjdmZmQ4Y2IyNDlmZjc1ZTFjYWRlYWQ5
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpAQCAtMCwwICsxLDIyNyBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
ciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlCitmcm9t
IG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUK
K2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CisKKworZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKKyAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFd
ID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBsaW5lcy5hcHBlbmQoJycpCisKKworY2xhc3Mg
T2JqQ0hlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuICclcy5oJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKKworICAg
IGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBzZXQoWworICAg
ICAgICAgICAgJzxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+JywKKyAgICAg
ICAgXSkKKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdpbmNsdWRlcyc6
ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFk
ZXJzKV0pLAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpCisgICAgICAgIHR5cGVfZG9tYWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNo
b3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMp
CisgICAgICAgIGNvbW1hbmRfZG9tYWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21h
aW5zKQorICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBk
b21haW5zKQorCisgICAgICAgICMgRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+
IFdlYiBJbnNwZWN0b3I6IFJlZHVjZSB1bm5lY2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQg
aW4gT2JqQyBQcm90b2NvbCBJbnRlcmZhY2VzCisgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVy
YXRlIGVudW1zL3R5cGVzIGZvciBhbGwgdHlwZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRo
ZSBidWlsdC1pbgorICAgICAgICAjIEpTQyBkb21haW5zIChEZWJ1Z2dlciwgUnVudGltZSkgdGhp
cyBwcm9kdWNlcyBleHRyYSB1bnVzZWQgdHlwZXMuIFdlIG9ubHkgbmVlZCB0bworICAgICAgICAj
IGdlbmVyYXRlIHRoZXNlIHR5cGVzIGlmIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGNvbW1h
bmRfZG9tYWlucyBvciBldmVudF9kb21haW5zLgorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xu
Jy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlv
bnMsIHR5cGVfZG9tYWlucykpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihm
aWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVyYXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpKSkpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9n
ZW5lcmF0ZV90eXBlcywgdHlwZV9kb21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
J1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3Rv
Y29scywgY29tbWFuZF9kb21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4n
LmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzLCBl
dmVudF9kb21haW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1Rl
bXBsYXRlcy5IZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lKSkKKyAgICAgICAgcmV0dXJu
ICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xh
cmF0aW9ucyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBk
ZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiAo
aXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICAg
ICAgb2JqY19uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRp
b24udHlwZSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BjbGFzcyAlczsnICUgb2Jq
Y19uYW1lKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAg
IyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVf
bWVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVyKGRvbWFpbiwg
ZGVjbGFyYXRpb24sIG1lbWJlcikpCisKKyAgICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVt
cy4KKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50
eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikpCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1h
bmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorCisgICAgICAgICMgQW5vbnltb3VzIGV2ZW50
IGVudW1zLgorICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50
eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVy
KSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0
ZV90eXBlcyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICMgVHlw
ZSBpbnRlcmZhY2VzLgorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UoZG9tYWlu
LCBkZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4s
IGRlY2xhcmF0aW9uKToKKyAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9i
amNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGRlY2xh
cmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAg
ICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fu
b255bW91c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICByZXR1cm4g
c2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFtZSwgbWVtYmVyLnR5cGUuZW51bV92YWx1
ZXMoKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihz
ZWxmLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAg
b2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1v
dXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIHBh
cmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCkpCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW0oc2Vs
ZiwgZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
bGluZXMuYXBwZW5kKCd0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCAlcykgeycgJSBlbnVtX25h
bWUpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdmFsdWVzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgJXMlcywnICUgKGVudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVk
X25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J307JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJh
dGVfdHlwZV9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgb2JqY19uYW1lID0gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9y
X3R5cGUoZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNl
ICVzIDogJXMnICUgKG9iamNfbmFtZSwgT2JqQ0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JB
U0UpKQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5v
dCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAg
b3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9u
YWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgaWYgcmVxdWlyZWRfbWVtYmVy
czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9m
b3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJz
KSkKKyAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcvKiByZXF1aXJlZCAqLyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3By
b3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlv
bmFsX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qIG9wdGlvbmFsICovICcg
KyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJz
KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpOgorICAgICAgICBw
YWlycyA9IFtdCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAg
ICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlcikKKyAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5p
ZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAg
ICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAodmFyX25hbWUsIG9iamNfdHlwZSwgdmFy
X25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisgICAgICAgIHJl
dHVybiAnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoJXM7JyAlICcgJy5qb2luKHBhaXJzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoc2VsZiwgZGVjbGFyYXRpb24sIG1lbWJl
cik6CisgICAgICAgIGFjY2Vzc29yX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3Jf
dHlwZV9mb3JfbWVtYmVyKG1lbWJlcikKKyAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICByZXR1
cm4gJ0Bwcm9wZXJ0eSAobm9uYXRvbWljLCAlcykgJXM7JyAlIChhY2Nlc3Nvcl90eXBlLCBqb2lu
X3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2Jq
Y19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9j
b21tYW5kX3Byb3RvY29scyhzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGlmIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9t
YWluSGFuZGxlcicgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9u
YW1lKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAcHJvdG9jb2wgJXMgPE5TT2JqZWN0Picg
JSBvYmpjX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0ByZXF1aXJlZCcpCisgICAg
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKGRvbWFp
biwgY29tbWFuZCkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zaW5nbGVfY29tbWFu
ZF9wcm90b2NvbChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgorICAgICAgICBwYWlycyA9IFtdCisg
ICAgICAgIHBhaXJzLmFwcGVuZCgnRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2snKQorICAgICAgICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFj
azooJXMpc3VjY2Vzc0NhbGxiYWNrJyAlIHNlbGYuX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5k
KGRvbWFpbiwgY29tbWFuZCkpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFt
ZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21t
YW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQorICAgICAgICByZXR1cm4gJy0gKHZv
aWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQor
CisgICAgZGVmIF9jYWxsYmFja19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1h
bmQpOgorICAgICAgICBwYWlycyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZChqb2luX3R5cGVf
YW5kX25hbWUoT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFu
ZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisg
ICAgICAgIHJldHVybiAndm9pZCheKSglcyknICUgJywgJy5qb2luKHBhaXJzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVz
ID0gW10KKyAgICAgICAgaWYgZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIG9iamNfbmFtZSA9
ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklY
LCBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZh
Y2UgJXMgOiBOU09iamVjdCcgJSBvYmpjX25hbWUpCisgICAgICAgICAgICBmb3IgZXZlbnQgaW4g
ZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShkb21haW4sIGV2ZW50KSkKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBldmVu
dCk6CisgICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
cmV0dXJuICctICh2b2lkKSVzOycgJSBldmVudC5ldmVudF9uYW1lCisgICAgICAgIHBhaXJzID0g
W10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAg
ICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciks
IHBhcmFtX25hbWUpKQorICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCisgICAg
ICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5q
b2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19p
bnRlcm5hbF9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUwMWFkMzI0MmJkYTVhM2FjYTBlMjZiYzc4
NmQ0NGJhMDIxNDAwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5
CkBAIC0wLDAgKzEsNzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IKK2Zyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpD
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKEdl
bmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
CisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzSW50
ZXJuYWwuaCcgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYCisKKyAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAgICciJXMu
aCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKKyAgICAgICAgICAgICciUldJUHJvdG9j
b2xKU09OT2JqZWN0SW50ZXJuYWwuaCInLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4nLAorICAgICAgICBdKQorCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAn
ICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCisgICAgICAgIH0KKwor
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgZXZl
bnRfZG9tYWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5f
ZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlucykKKworICAgICAg
ICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xp
Y2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMu
R2VuZXJpY0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYu
X2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZhY2VzLCBldmVudF9kb21h
aW5zKSkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5H
ZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisg
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVf
ZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMoc2VsZiwgZG9tYWluKToKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBpZiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgb2Jq
Y19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
QGludGVyZmFjZSAlcyAoUHJpdmF0ZSknICUgb2JqY19uYW1lKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsnKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxNTRmZWEzNmE4ZGY4
MjlkZmVlMjVhOTk0MjJlMjAyMGUwNjFkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTU1IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Citmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZQorZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBv
cnQgT2JqQ0dlbmVyYXRvcgorZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgYWRkX25ld2xpbmUobGluZXMpOgorICAgIGlmIGxp
bmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgICAgIHJldHVybgorICAgIGxpbmVzLmFwcGVu
ZCgnJykKKworCitjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVz
VHlwZXMubW0nICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAorCisgICAgZGVmIGRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5z
aG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CisgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAgJyIlc0Vu
dW1Db252ZXJzaW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAorICAg
ICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAg
ICAgJzx3dGYvQXNzZXJ0aW9ucy5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+
JywKKyAgICAgICAgXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3By
aW1hcnlJbmNsdWRlJzogJyIlc0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgsCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAg
IH0KKworICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAg
ICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9s
aWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LkltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50
YXRpb25zLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNU
ZW1wbGF0ZXMuSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVm
IGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0
aW9uczoKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVj
dFR5cGUpKToKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKGRvbWFp
biwgZGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAg
ZGVmIGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlv
bik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50
YXRpb24gJXMnICUgT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24u
dHlwZSkpCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjog
bm90IG1lbWJlci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAg
ICBpZiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1
aXJlZF9tZW1iZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQorICAg
ICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9zZXR0ZXJfZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9t
ZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVx
dWlyZWRfbWVtYmVycyk6CisgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAgZm9yIG1lbWJlciBp
biByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICAgICAg
dmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1l
bWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAl
ICh2YXJfbmFtZSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgIHBhaXJzWzBdID0gdWNm
aXJzdChwYWlyc1swXSkKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQo
Jy0gKGluc3RhbmNldHlwZSlpbml0V2l0aCVzOycgJSAnICcuam9pbihwYWlycykpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKworICAgICAgICByZXF1aXJlZF9wb2ludGVyX21lbWJlcnMgPSBmaWx0ZXIobGFt
YmRhIG1lbWJlcjogT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKG1lbWJl
ci50eXBlKSwgcmVxdWlyZWRfbWVtYmVycykKKyAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9t
ZW1iZXJzOgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9wb2ludGVyX21lbWJl
cnM6CisgICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJf
dG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKCVz
LCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQorCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAg
ICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRp
ZmllcihtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBz
ZWxmLiVzID0gJXM7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJh
dGlvbiwgbWVtYmVyKToKKyAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5
cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICB2YXJfbmFtZSA9IE9i
akNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9u
YW1lKQorICAgICAgICBzZXR0ZXJfbWV0aG9kID0gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9t
ZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICBjb252ZXJzaW9u
X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNfdG9fcHJvdG9jb2xfZXhwcmVzc2lvbl9m
b3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIHZhcl9uYW1lKQorICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLSAodm9pZClzZXQlczooJXMpJXMnICUgKHVjZmly
c3QodmFyX25hbWUpLCBvYmpjX3R5cGUsIHZhcl9uYW1lKSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW3N1cGVyICVzOiVzIGZvcktleTpAIiVz
Il07JyAlIChzZXR0ZXJfbWV0aG9kLCBjb252ZXJzaW9uX2V4cHJlc3Npb24sIG1lbWJlci5tZW1i
ZXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKHNlbGYs
IGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIG9iamNfdHlwZSA9IE9iakNH
ZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAgICAg
ICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVy
KG1lbWJlci5tZW1iZXJfbmFtZSkKKyAgICAgICAgZ2V0dGVyX21ldGhvZCA9IE9iakNHZW5lcmF0
b3Iub2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKKyAg
ICAgICAgYmFzaWNfZXhwcmVzc2lvbiA9ICdbc3VwZXIgJXM6QCIlcyJdJyAlIChnZXR0ZXJfbWV0
aG9kLCBtZW1iZXIubWVtYmVyX25hbWUpCisgICAgICAgIGNvbnZlcnNpb25fZXhwcmVzc2lvbiA9
IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdG9fb2JqY19leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVj
bGFyYXRpb24sIG1lbWJlciwgYmFzaWNfZXhwcmVzc2lvbikKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKCVzKSVzJyAlIChvYmpjX3R5cGUsIHZhcl9uYW1lKSkK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0
dXJuICVzOycgJSBjb252ZXJzaW9uX2V4cHJlc3Npb24pCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3Rp
dmVfYy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamVjdGl2ZV9jLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1
Y2Q1ZWVkZjAxOGYwZGVlNjE3N2IyYWU3Mjc2ZjY4ZjY3OWE1M2VhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jLnB5CisrKyAvZGV2L251
bGwKQEAgLTEsNTExICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWZyb20gZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRp
dmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJh
bWV3b3JrcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1kZWYgam9p
bl90eXBlX2FuZF9uYW1lKHR5cGVfc3RyLCBuYW1lX3N0cik6Ci0gICAgaWYgdHlwZV9zdHIuZW5k
c3dpdGgoJyonKToKLSAgICAgICAgcmV0dXJuIHR5cGVfc3RyICsgbmFtZV9zdHIKLSAgICByZXR1
cm4gdHlwZV9zdHIgKyAnICcgKyBuYW1lX3N0cgotCi0KLWRlZiBzdHJpcF9ibG9ja19jb21tZW50
X21hcmtlcnMoc3RyKToKLSAgICByZXR1cm4gc3RyLnJlcGxhY2UoJy8qJywgJycpLnJlcGxhY2Uo
JyovJywgJycpCi0KLQotZGVmIHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIoc3RyLCBwb3NzaWJs
ZV9kdXBsaWNhdGUpOgotICAgIHJldHVybiBzdHIucmVwbGFjZShwb3NzaWJsZV9kdXBsaWNhdGUg
KyBwb3NzaWJsZV9kdXBsaWNhdGUsIHBvc3NpYmxlX2R1cGxpY2F0ZSkKLQotCi1fT0JKQ19JREVO
VElGSUVSX1JFTkFNRV9NQVAgPSB7Ci0gICAgJ3RoaXMnOiAndGhpc09iamVjdCcsICAjIERlYnVn
Z2VyLkNhbGxGcmFtZS50aGlzCi0gICAgJ2Rlc2NyaXB0aW9uJzogJ3N0cmluZ1JlcHJlc2VudGF0
aW9uJywgICMgUnVudGltZS5SZW1vdGVPYmplY3QuZGVzY3JpcHRpb24KLSAgICAnaWQnOiAnaWRl
bnRpZmllcicsICAjIFBhZ2UuRnJhbWUuaWQsIFJ1bnRpbWUuRXhlY3V0aW9uQ29udGV4dERlc2Ny
aXB0aW9uLmlkLCBEZWJ1Z2dlci5CcmVha3BvaW50QWN0aW9uLmlkCi19Ci0KLV9PQkpDX0lERU5U
SUZJRVJfUkVWRVJTRV9SRU5BTUVfTUFQID0gZGljdCgodiwgaykgZm9yIGssIHYgaW4gX09CSkNf
SURFTlRJRklFUl9SRU5BTUVfTUFQLml0ZXJpdGVtcygpKQotCi0KLWNsYXNzIE9iakNUeXBlQ2F0
ZWdvcnk6Ci0gICAgU2ltcGxlID0gMAotICAgIFN0cmluZyA9IDEKLSAgICBPYmplY3QgPSAyCi0g
ICAgQXJyYXkgPSAzCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNhdGVnb3J5X2Zvcl90
eXBlKF90eXBlKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
KToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ3N0cmluZyc6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nCi0gICAgICAgICAgICBpZiAg
X3R5cGUucmF3X25hbWUoKSBpbiBbJ29iamVjdCcsICdhbnknXToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3QKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19u
YW1lKCkgaXMgJ2FycmF5JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29y
eS5BcnJheQotICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlCi0gICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1
cm4gT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3QKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUs
IEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXkK
LSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAg
ICByZXR1cm4gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShfdHlwZS5hbGlhc2Vk
X3R5cGUpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAg
ICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUucHJp
bWl0aXZlX3R5cGUpCi0gICAgICAgIHJldHVybiBOb25lCi0KLQotY2xhc3MgT2JqQ0dlbmVyYXRv
cjoKLSAgICBPQkpDX1BSRUZJWCA9ICdSV0lQcm90b2NvbCcKLSAgICBPQkpDX0pTT05fT0JKRUNU
X0JBU0UgPSAnJXNKU09OT2JqZWN0JyAlIE9CSkNfUFJFRklYCi0KLSAgICAjIEFkanVzdCBpZGVu
dGlmaWVyIG5hbWVzIHRoYXQgY29sbGlkZSB3aXRoIE9iakMga2V5d29yZHMuCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG5hbWUpOgot
ICAgICAgICByZXR1cm4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQLmdldChuYW1lLCBuYW1l
KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2lkZW50aWZpZXJfdG9faWRlbnRp
ZmllcihuYW1lKToKLSAgICAgICAgcmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVWRVJTRV9SRU5B
TUVfTUFQLmdldChuYW1lLCBuYW1lKQotCi0gICAgIyBHZW5lcmF0ZSBPYmpDIHR5cGVzLCBjb21t
YW5kIGhhbmRsZXJzLCBhbmQgZXZlbnQgZGlzcGF0Y2hlcnMgZm9yIGEgc3Vic2V0IG9mIGRvbWFp
bnMuCi0KLSAgICBET01BSU5TX1RPX0dFTkVSQVRFID0gWydDU1MnLCAnRE9NJywgJ0RPTVN0b3Jh
Z2UnLCAnTmV0d29yaycsICdQYWdlJ10KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIobW9kZWwpOgotICAgICAgICBkZWYgc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlcyhkb21haW4pOgotICAgICAgICAgICAgaWYgbW9kZWwu
ZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQotICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19H
RU5FUkFURSkKLSAgICAgICAgICAgIHdoaXRlbGlzdC51cGRhdGUoc2V0KFsnQ29uc29sZScsICdE
ZWJ1Z2dlcicsICdSdW50aW1lJ10pKQotICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5f
bmFtZSBpbiB3aGl0ZWxpc3QKLSAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5f
dHlwZXMKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5l
cmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyKGRvbWFpbik6Ci0gICAgICAgICAgICBpZiBtb2Rl
bC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgotICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCi0gICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RP
X0dFTkVSQVRFKQotICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0
ZWxpc3QKLSAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5k
bGVyCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5f
ZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIobW9kZWwpOgotICAgICAgICBkZWYgc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyKGRvbWFpbik6Ci0gICAgICAgICAgICBpZiBtb2Rl
bC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgotICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCi0gICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RP
X0dFTkVSQVRFKQotICAgICAgICAgICAgd2hpdGVsaXN0LmFkZCgnQ29uc29sZScpCi0gICAgICAg
ICAgICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGluIHdoaXRlbGlzdAotICAgICAgICByZXR1
cm4gc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyCi0KLSAgICAjIE9iakMg
ZW51bSBhbmQgdHlwZSBuYW1lcy4KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19u
YW1lX2Zvcl90eXBlKHR5cGUpOgotICAgICAgICBuYW1lID0gdHlwZS5xdWFsaWZpZWRfbmFtZSgp
LnJlcGxhY2UoJy4nLCAnJykKLSAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9z
dHIobmFtZSwgdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4g
JyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJh
dGlvbihkZWNsYXJhdGlvbik6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gZGVjbGFyYXRpb24udHlw
ZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lCi0gICAgICAgIG5hbWUgPSAnJXMlcycgJSAoZG9t
YWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSkKLSAgICAgICAgbmFtZSA9IHJl
bW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVy
biAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgb2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJl
cihkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgZG9tYWluX25hbWUgPSBtZW1iZXIudHlw
ZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lCi0gICAgICAgIG5hbWUgPSAnJXMlcyVzJyAlIChk
b21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0KG1lbWJlci5t
ZW1iZXJfbmFtZSkpCi0gICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5h
bWUsIGRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgsIG5hbWUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfZW51
bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21t
YW5kX25hbWUsIHBhcmFtZXRlcik6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gZG9tYWluLmRvbWFp
bl9uYW1lCi0gICAgICAgIG5hbWUgPSAnJXMlcyVzJyAlIChkb21haW5fbmFtZSwgdWNmaXJzdChl
dmVudF9vcl9jb21tYW5kX25hbWUpLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
Ci0gICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUsIGRvbWFpbl9u
YW1lKQotICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgs
IG5hbWUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9u
b25fYW5vbnltb3VzX2VudW0oX3R5cGUpOgotICAgICAgICBkb21haW5fbmFtZSA9IF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUKLSAgICAgICAgbmFtZSA9IF90eXBlLnF1YWxpZmllZF9u
YW1lKCkucmVwbGFjZSgnLicsICcnKQotICAgICAgICBuYW1lID0gcmVtb3ZlX2R1cGxpY2F0ZV9m
cm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuICclcyVzJyAlIChPYmpD
R2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQotCi0gICAgIyBNaXNjZWxsYW5lb3VzIG5hbWUg
aGFuZGxpbmcuCi0gICAgCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB2YXJpYWJsZV9uYW1l
X3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gZG9tYWlu
LmRvbWFpbl9uYW1lCi0gICAgICAgIGlmIGRvbWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0RPTScpOgot
ICAgICAgICAgICAgcmV0dXJuICdkb20nICsgZG9tYWluX25hbWVbMzpdCi0gICAgICAgIGlmIGRv
bWFpbl9uYW1lLnN0YXJ0c3dpdGgoJ0NTUycpOgotICAgICAgICAgICAgcmV0dXJuICdjc3MnICsg
ZG9tYWluX25hbWVbMzpdCi0gICAgICAgIHJldHVybiBkb21haW5fbmFtZVs6MV0ubG93ZXIoKSAr
IGRvbWFpbl9uYW1lWzE6XQotCi0gICAgIyBUeXBlIGJhc2ljcy4KLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6Ci0g
ICAgICAgIGlmIHJhd19uYW1lIGluIFsnc3RyaW5nJywgJ2FycmF5J106Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2NvcHknCi0gICAgICAgIGlmIHJhd19uYW1lIGluIFsnaW50ZWdlcicsICdudW1iZXIn
LCAnYm9vbGVhbiddOgotICAgICAgICAgICAgcmV0dXJuICdhc3NpZ24nCi0gICAgICAgIGlmIHJh
d19uYW1lIGluIFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgcmV0dXJuICdyZXRhaW4n
Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNf
dHlwZV9mb3JfcmF3X25hbWUocmF3X25hbWUpOgotICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3Ry
aW5nJzoKLSAgICAgICAgICAgIHJldHVybiAnTlNTdHJpbmcgKicKLSAgICAgICAgaWYgcmF3X25h
bWUgaXMgJ2FycmF5JzoKLSAgICAgICAgICAgIHJldHVybiAnTlNBcnJheSAqJwotICAgICAgICBp
ZiByYXdfbmFtZSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAgICByZXR1cm4gJ2ludCcKLSAgICAg
ICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6Ci0gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZScK
LSAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2Jvb2xlYW4nOgotICAgICAgICAgICAgcmV0dXJuICdC
T09MJwotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAg
ICAgIHJldHVybiAnJXMgKicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFTRQot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2Ns
YXNzX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6Ci0gICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJp
bmcnOgotICAgICAgICAgICAgcmV0dXJuICdOU1N0cmluZycKLSAgICAgICAgaWYgcmF3X25hbWUg
aXMgJ2FycmF5JzoKLSAgICAgICAgICAgIHJldHVybiAnTlNBcnJheScKLSAgICAgICAgaWYgcmF3
X25hbWUgaW4gWydpbnRlZ2VyJywgJ251bWJlcicsICdib29sZWFuJ106Ci0gICAgICAgICAgICBy
ZXR1cm4gJ05TTnVtYmVyJwotICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3Qn
XToKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLk9CSkNfSlNPTl9PQkpFQ1RfQkFT
RQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBGSVhNRTogQ2FuIHRoZXNlIHByb3RvY29s
X3R5cGUgZnVuY3Rpb25zIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgQysrIGdlbmVyYXRvcnMgZnVu
Y3Rpb25zPwotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcm90b2NvbF90eXBlX2Zvcl9y
YXdfbmFtZShyYXdfbmFtZSk6Ci0gICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJpbmcnOgotICAg
ICAgICAgICAgcmV0dXJuICdTdHJpbmcnCi0gICAgICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2Vy
JzoKLSAgICAgICAgICAgIHJldHVybiAnaW50JwotICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVt
YmVyJzoKLSAgICAgICAgICAgIHJldHVybiAnZG91YmxlJwotICAgICAgICBpZiByYXdfbmFtZSBp
cyAnYm9vbGVhbic6Ci0gICAgICAgICAgICByZXR1cm4gJ2Jvb2wnCi0gICAgICAgIGlmIHJhd19u
YW1lIGluIFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3JP
YmplY3QnCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IHByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90
eXBlCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAg
ICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl9yYXdfbmFtZShf
dHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
KToKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5
cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVz
OjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUo
KSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAg
ICAgc3ViX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUu
ZWxlbWVudF90eXBlKQotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTwlcz4nICUgc3ViX3R5cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShfdHlwZSk6Ci0gICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgX3R5cGUg
PSBfdHlwZS5hbGlhc2VkX3R5cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3Ry
aW5nJywgJ2FycmF5JywgJ2FueScsICdvYmplY3QnXQotICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiAo
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUK
LSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgb2JqY19jbGFzc19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAg
ICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3Jhd19uYW1lKF90
eXBlLnJhd19uYW1lKCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkp
OgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfcmF3X25h
bWUoX3R5cGUucHJpbWl0aXZlX3R5cGUucmF3X25hbWUoKSkKLSAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9y
Lm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUs
IEFycmF5VHlwZSkpOgotICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50
X21hcmtlcnMoT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRf
dHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLycgJSBzdWJfdHlwZQot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX2Fj
Y2Vzc29yX3R5cGVfZm9yX21lbWJlcihtZW1iZXIpOgotICAgICAgICByZXR1cm4gT2JqQ0dlbmVy
YXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlwZSkK
LQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19hY2Nlc3Nvcl90eXBlX2Zvcl9tZW1i
ZXJfaW50ZXJuYWwoX3R5cGUpOgotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNl
ZFR5cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCi0gICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICByZXR1
cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2FjY2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJh
d19uYW1lKCkpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAg
ICAgICAgICAgcmV0dXJuICdhc3NpZ24nCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3JldGFpbicKLSAgICAgICAgaWYgKGlz
aW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdjb3B5Jwot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3R5
cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgcmV0dXJuIE9iakNH
ZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xh
cmF0aW9uLCBtZW1iZXIpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfdHlwZV9m
b3JfbWVtYmVyX2ludGVybmFsKF90eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAg
aWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0
aXZlVHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zv
cl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIGlmIChfdHlwZS5pc19hbm9ueW1vdXMpOgotICAg
ICAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAgICAgIHJldHVy
biBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5
cGUpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAg
ICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAq
JwotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAg
ICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2NrX2NvbW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9i
amNfY2xhc3NfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKSkKLSAgICAgICAgICAgIHJldHVy
biAnTlNBcnJheS8qPCVzPiovIConICUgc3ViX3R5cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2
ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyLCByZXNwZWN0X29wdGlvbmFsPVRydWUpOgot
ICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW1faW50
ZXJuYWwocGFyYW1ldGVyLnR5cGUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJh
bWV0ZXIpCi0gICAgICAgIGlmIHJlc3BlY3Rfb3B0aW9uYWwgYW5kIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKLSAgICAgICAgICAgIGlmIG9iamNfdHlwZS5lbmRzd2l0aCgnKicpOgotICAgICAgICAg
ICAgICAgIHJldHVybiBvYmpjX3R5cGUgKyAnKicKLSAgICAgICAgICAgIHJldHVybiBvYmpjX3R5
cGUgKyAnIConCi0gICAgICAgIHJldHVybiBvYmpjX3R5cGUKLQotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgb2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbChfdHlwZSwgZG9tYWluLCBldmVu
dF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6Ci0gICAgICAgIGlmIChpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSkpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKLSAgICAg
ICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcmF3X25hbWUoX3R5cGUu
cmF3X25hbWUoKSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRl
cihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQotICAgICAgICAgICAg
cmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51
bShfdHlwZSkKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKLSAg
ICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkg
KyAnIConCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKLSAgICAg
ICAgICAgIHN1Yl90eXBlID0gc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0
b3Iub2JqY19jbGFzc19mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpKQotICAgICAgICAgICAg
cmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8gKicgJSBzdWJfdHlwZQotICAgICAgICByZXR1cm4gTm9u
ZQotCi0gICAgIyBPYmpDIDwtPiBQcm90b2NvbCBjb252ZXJzaW9uIGZvciBjb21tYW5kcyBhbmQg
ZXZlbnRzLgotICAgICMgICAtIGNvbnZlcnQgYSBjb21tYW5kIGNhbGwgcGFyYW1ldGVyIHJlY2Vp
dmVkIGZyb20gUHJvdG9jb2wgdG8gT2JqQyBmb3IgaGFuZGxlcgotICAgICMgICAtIGNvbnZlcnQg
YSBjb21tYW5kIHJldHVybiBwYXJhbWV0ZXIgaW4gY2FsbGJhY2sgYmxvY2sgZnJvbSBPYmpDIHRv
IFByb3RvY29sIHRvIHNlbmQKLSAgICAjICAgLSBjb252ZXJ0IGFuIGV2ZW50IHBhcmFtZXRlciBm
cm9tIE9iakMgQVBJIHRvIFByb3RvY29sIHRvIHNlbmQKLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgb2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUodmFyX3R5
cGUsIHZhcl9uYW1lKToKLSAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5LmNhdGVn
b3J5X2Zvcl90eXBlKHZhcl90eXBlKQotICAgICAgICBpZiBjYXRlZ29yeSBpbiBbT2JqQ1R5cGVD
YXRlZ29yeS5TaW1wbGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nXToKLSAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UodmFyX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICByZXR1cm4g
J3RvUHJvdG9jb2xTdHJpbmcoJXMpJyAlIHZhcl9uYW1lCi0gICAgICAgICAgICByZXR1cm4gdmFy
X25hbWUKLSAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3Q6Ci0g
ICAgICAgICAgICByZXR1cm4gJ1slcyB0b0luc3BlY3Rvck9iamVjdF0nICUgdmFyX25hbWUKLSAg
ICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKLSAgICAgICAgICAg
IHByb3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUodmFy
X3R5cGUuZWxlbWVudF90eXBlKQotICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0
b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgICAg
ICBpZiBwcm90b2NvbF90eXBlID09ICdJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5QXJyYXkoJXMp
JyAlIHZhcl9uYW1lCi0gICAgICAgICAgICBpZiBwcm90b2NvbF90eXBlIGlzICdTdHJpbmcnIGFu
ZCBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNw
ZWN0b3JTdHJpbmdBcnJheSglcyknICUgdmFyX25hbWUKLSAgICAgICAgICAgIGlmIHByb3RvY29s
X3R5cGUgaXMgJ2ludCcgYW5kIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2luc3BlY3RvckludGVnZXJBcnJheSglcyknICUgdmFyX25hbWUKLSAgICAg
ICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZScgYW5kIG9iamNfY2xhc3MgaXMgJ05T
TnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckRvdWJsZUFycmF5KCVz
KScgJSB2YXJfbmFtZQotICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JPYmplY3RBcnJheSgl
cyknICUgdmFyX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgb2JqY19wcm90b2Nv
bF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uLCBtZW1iZXIp
OgotICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAg
ICAgICBpZiBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1f
bmFtZV9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpLCBuYW1l
KQotICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2Jq
Q0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKG1lbWJlci50
eXBlKSwgbmFtZSkKLSAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9p
bXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUobWVtYmVyLnR5cGUsIG5hbWUpCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9y
X3BhcmFtZXRlcihuYW1lLCBkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVy
KToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAg
IHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2Jq
Y19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29y
X2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgbmFtZSkKLSAgICAgICAgICAgIHJldHVybiAnZnJv
bVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVf
Zm9yX25vbl9hbm9ueW1vdXNfZW51bShwYXJhbWV0ZXIudHlwZSksIG5hbWUpCi0gICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3Zh
cmlhYmxlKHBhcmFtZXRlci50eXBlLCBuYW1lKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZSh2YXJfdHlwZSwg
dmFyX25hbWUpOgotICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnkuY2F0ZWdvcnlf
Zm9yX3R5cGUodmFyX3R5cGUpCi0gICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpDVHlwZUNhdGVn
b3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgotICAgICAgICAgICAgcmV0dXJu
IHZhcl9uYW1lCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0
OgotICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3Jf
dHlwZSh2YXJfdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnW1tbJXMgYWxsb2NdIGluaXRXaXRo
SW5zcGVjdG9yT2JqZWN0OiVzXSBhdXRvcmVsZWFzZV0nICUgKG9iamNfY2xhc3MsIHZhcl9uYW1l
KQotICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgotICAgICAg
ICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfdHlwZSh2YXJf
dHlwZS5lbGVtZW50X3R5cGUpCi0gICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmlu
Zyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdvYmpjU3RyaW5nQXJyYXkoJXMpJyAlIHZhcl9u
YW1lCi0gICAgICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6ICAjIEZJWE1FOiBJ
bnRlZ2VyIG9yIERvdWJsZT8KLSAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNJbnRlZ2VyQXJy
YXkoJXMpJyAlIHZhcl9uYW1lCi0gICAgICAgICAgICByZXR1cm4gJ29iamNBcnJheTwlcz4oJXMp
JyAlIChvYmpjX2NsYXNzLCB2YXJfbmFtZSkKLQotICAgICMgT2JqQyA8LT4gSlNPTiBvYmplY3Qg
Y29udmVyc2lvbiBmb3IgdHlwZXMgZ2V0dGVycy9zZXR0ZXJzLgotICAgICMgICAtIGNvbnZlcnQg
YSBtZW1iZXIgc2V0dGVyIGZyb20gT2JqQyBBUEkgdG8gSlNPTiBvYmplY3Qgc2V0dGVyCi0gICAg
IyAgIC0gY29udmVydCBhIG1lbWJlciBnZXR0ZXIgZnJvbSBKU09OIG9iamVjdCB0byBPYmpDIEFQ
SQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBvYmpjX3RvX3Byb3RvY29sX2V4cHJlc3Np
b25fZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyLCBzdWJfZXhwcmVzc2lvbik6Ci0gICAg
ICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShtZW1iZXIu
dHlwZSkKLSAgICAgICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBP
YmpDVHlwZUNhdGVnb3J5LlN0cmluZ106Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJl
ci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICd0b1Byb3RvY29sU3Ry
aW5nKCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAgICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNz
aW9uCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuT2JqZWN0OgotICAg
ICAgICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9i
akNUeXBlQ2F0ZWdvcnkuQXJyYXk6Ci0gICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVy
YXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKG1lbWJlci50eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAg
ICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2luc3BlY3RvclN0cmluZ0FycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAgICAgICAg
ICAgaWYgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOgotICAgICAgICAgICAgICAgIHByb3RvY29s
X3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyLnR5cGUu
ZWxlbWVudF90eXBlKQotICAgICAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJs
ZSc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yRG91YmxlQXJyYXkoJXMp
JyAlIHN1Yl9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JJbnRl
Z2VyQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCi0gICAgICAgICAgICByZXR1cm4gJ2luc3Bl
Y3Rvck9iamVjdEFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBwcm90b2NvbF90b19vYmpjX2V4cHJlc3Npb25fZm9yX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyLCBzdWJfZXhwcmVzc2lvbik6Ci0gICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5
cGVDYXRlZ29yeS5jYXRlZ29yeV9mb3JfdHlwZShtZW1iZXIudHlwZSkKLSAgICAgICAgaWYgY2F0
ZWdvcnkgaW4gW09iakNUeXBlQ2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmlu
Z106Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICAgICAgaWYgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24s
IG1lbWJlciksIHN1Yl9leHByZXNzaW9uKQotICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVBy
b3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9y
X25vbl9hbm9ueW1vdXNfZW51bShtZW1iZXIudHlwZSksIHN1Yl9leHByZXNzaW9uKQotICAgICAg
ICAgICAgcmV0dXJuIHN1Yl9leHByZXNzaW9uCi0gICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNU
eXBlQ2F0ZWdvcnkuT2JqZWN0OgotICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICAgICAg
cmV0dXJuICcoJXMpJXMnICUgKG9iamNfdHlwZSwgc3ViX2V4cHJlc3Npb24pCi0gICAgICAgIGlm
IGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6Ci0gICAgICAgICAgICBwcm90b2Nv
bF90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlci50eXBl
LmVsZW1lbnRfdHlwZSkKLSAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpDR2VuZXJhdG9yLm9i
amNfY2xhc3NfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQotICAgICAgICAgICAg
aWYgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgotICAgICAgICAgICAgICAgIHJldHVybiAnb2Jq
Y1N0cmluZ0FycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lvbgotICAgICAgICAgICAgaWYgb2JqY19j
bGFzcyBpcyAnTlNOdW1iZXInOgotICAgICAgICAgICAgICAgIHByb3RvY29sX3R5cGUgPSBPYmpD
R2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBl
KQotICAgICAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ2RvdWJsZSc6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAnb2JqY0RvdWJsZUFycmF5KCVzKScgJSBzdWJfZXhwcmVzc2lv
bgotICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY0ludGVnZXJBcnJheSglcyknICUgc3ViX2V4
cHJlc3Npb24KLSAgICAgICAgICAgIHJldHVybiAnb2JqY0FycmF5PCVzPiglcyknICUgKG9iamNf
Y2xhc3MsIHN1Yl9leHByZXNzaW9uKQotCi0gICAgIyBKU09OIG9iamVjdCBzZXR0ZXIvZ2V0dGVy
IHNlbGVjdG9ycyBmb3IgdHlwZXMuCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9iamNf
c2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBy
ZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5h
bChtZW1iZXIudHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcikKLQotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgb2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUsIGRl
Y2xhcmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNl
ZFR5cGUpKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCi0gICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6Ci0gICAgICAgICAgICByYXdf
bmFtZSA9IF90eXBlLnJhd19uYW1lKCkKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdib29s
ZWFuJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldEJvb2wnCi0gICAgICAgICAgICBpZiBy
YXdfbmFtZSBpcyAnaW50ZWdlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2Vy
JwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdzZXREb3VibGUnCi0gICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnc3RyaW5nJzoK
LSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFN0cmluZycKLSAgICAgICAgICAgIGlmIHJhd19u
YW1lIGluIFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0T2Jq
ZWN0JwotICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2FycmF5JzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJ3NldEluc3BlY3RvckFycmF5JwotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6Ci0gICAgICAgICAgICByZXR1
cm4gJ3NldFN0cmluZycKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUp
KToKLSAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JwotICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEluc3BlY3RvckFy
cmF5JwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBv
YmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAg
ICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50
ZXJuYWwobWVtYmVyLnR5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIG9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2ludGVybmFsKF90eXBl
LCBkZWNsYXJhdGlvbiwgbWVtYmVyKToKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFs
aWFzZWRUeXBlKSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQotICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgotICAgICAgICAgICAg
cmF3X25hbWUgPSBfdHlwZS5yYXdfbmFtZSgpCi0gICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAn
Ym9vbGVhbic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdib29sRm9yS2V5JwotICAgICAgICAg
ICAgaWYgcmF3X25hbWUgaXMgJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnaW50
ZWdlckZvcktleScKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdudW1iZXInOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnZG91YmxlRm9yS2V5JwotICAgICAgICAgICAgaWYgcmF3X25hbWUg
aXMgJ3N0cmluZyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzdHJpbmdGb3JLZXknCi0gICAg
ICAgICAgICBpZiByYXdfbmFtZSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJ29iamVjdEZvcktleScKLSAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdhcnJh
eSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JBcnJheUZvcktleScKLSAgICAg
ICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdzdHJpbmdGb3JLZXknCi0gICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ29iamVjdEZv
cktleScKLSAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgotICAgICAg
ICAgICAgcmV0dXJuICdpbnNwZWN0b3JBcnJheUZvcktleScKLSAgICAgICAgcmV0dXJuIE5vbmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCA4YmJkMGZmNTU1MGE5ZWQzMjdkMDYyYmUxZjQ4Njk5OGFkZmE5ZmQzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9j
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAs
MCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0j
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3RyaW5n
Ci1pbXBvcnQgcmUKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRl
X29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCi0KLWxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIE9iamVjdGl2ZUNCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIE9iakNHZW5l
cmF0b3IuT0JKQ19QUkVGSVgKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgot
ICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpKQotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAg
ICAgICAgaGVhZGVycyA9IFsKLSAgICAgICAgICAgICc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+JywKLSAgICAgICAgICAgICc8d3RmL1JldGFp
blB0ci5oPicsCi0gICAgICAgIF0KLQotICAgICAgICBoZWFkZXJfYXJncyA9IHsKLSAgICAgICAg
ICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9m
aWxlbmFtZSgpKSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRl
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCi0gICAgICAgICAgICAnZm9yd2Fy
ZERlY2xhcmF0aW9ucyc6IHNlbGYuX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMo
KSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5PYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dl
bmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCi0g
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNw
YXRjaGVySGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0g
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
b2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToKLSAgICAgICAgbGluZXMgPSBbJ0Bwcm90
b2NvbCAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRv
bWFpbi5kb21haW5fbmFtZSkgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
KV0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVf
b2JqY19mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKLSAg
ICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0BjbGFzcyAlcyVzRG9tYWluSGFuZGxlcjsnICUgKE9iakNHZW5l
cmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNv
bW1hbmRzOgotICAgICAgICAgICAgcmV0dXJuICcnCi0KLSAgICAgICAgY29tbWFuZF9kZWNsYXJh
dGlvbnMgPSBbXQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Ci0gICAg
ICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb2JqY19o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQotCi0gICAgICAgIGhhbmRs
ZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9k
ZWNsYXJhdGlvbnMpLAotICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBPYmpDR2VuZXJhdG9yLk9C
SkNfUFJFRklYLAotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0JhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25l
LCAqKmhhbmRsZXJfYXJncykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNs
YXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCi0gICAgICAgIGZvciBfcGFyYW1l
dGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoJyVzIGluXyVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9m
b3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY29tbWFuZE5hbWUn
OiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5q
b2luKHBhcmFtZXRlcnMpLAotICAgICAgICB9Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZp
cnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpIG92ZXJyaWRlOycgJSBj
b21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmplY3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpl
Y3RpdmVfY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDMyM2VkNjBhMWUyMDM0OTU5MjZmMDYxMzk0OWM4NGQyM2M0Mzcx
ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyAvZGV2L251bGwK
QEAgLTEsMTc2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQg
KGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwot
aW1wb3J0IHN0cmluZwotaW1wb3J0IHJlCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQot
ZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfYyBpbXBvcnQgT2JqQ1R5cGVDYXRlZ29yeSwgT2JqQ0dl
bmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCi0KLWxvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWNsYXNzIE9iamVjdGl2ZUNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMubW0nICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWlu
X2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAg
ICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKLSAgICAgICAgICAgICciJXNJbnRlcm5hbC5oIicg
JSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJyIlc0VudW1Db252ZXJz
aW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAg
JzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAotICAgICAgICAg
ICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAotICAgICAgICBdCi0KLSAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVz
QmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAg
ICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAlcycgJSBo
ZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rp
b25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5k
bGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4sIGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAg
IHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxl
cl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5v
dCBkb21haW4uY29tbWFuZHM6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21t
YW5kczoKLSAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCkp
Ci0KLSAgICAgICAgcmV0dXJuICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKLQotICAg
IGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBk
b21haW4sIGNvbW1hbmQpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMg
PSBbJ2xvbmcgY2FsbElkJ10KLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxf
cGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAo
R2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihw
YXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgIGNvbW1hbmRf
YXJncyA9IHsKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAot
ICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAg
ICAgICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICdz
dWNjZXNzQ2FsbGJhY2snOiBzZWxmLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5k
KGRvbWFpbiwgY29tbWFuZCksCi0gICAgICAgICAgICAnY29udmVyc2lvbnMnOiBzZWxmLl9nZW5l
cmF0ZV9jb252ZXJzaW9uc19mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpLAotICAgICAgICAg
ICAgJ2ludm9jYXRpb24nOiBzZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKGRv
bWFpbiwgY29tbWFuZCksCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipjb21tYW5kX2FyZ3MpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2Nr
X2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAgICAgIGxpbmVzID0gW10K
LQotICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgc3Vj
Y2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
Y29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBP
YmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRf
bmFtZSwgcGFyYW1ldGVyKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5
cGVfYW5kX25hbWUob2JqY190eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNz
X2Jsb2NrX3BhcmFtZXRlcnMpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsnKQotCi0gICAgICAgIGlmIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsnKQotCi0gICAgICAgICAgICByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0
ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dl
bmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVycykKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWly
ZWRfcG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dl
bmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFy
X25hbWUpKQotCi0gICAgICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0
ZXIobGFtYmRhIHBhcmFtZXRlcjogcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpDR2VuZXJh
dG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpLCBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzKQotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9w
b2ludGVyX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJh
dG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFy
X25hbWUpKQotCi0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhvZCA9IEdlbmVyYXRvci5r
ZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQotICAgICAgICAgICAgICAg
IHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24g
PSAnKiVzJyAlIHZhcl9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1l
Ci0gICAgICAgICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBPYmpDR2VuZXJhdG9yLm9iamNf
cHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCB2
YXJfZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT4lcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBpZiAo
JXMpJyAlIHZhcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7JyAlIChrZXll
ZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9u
KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHRPYmplY3QucmVsZWFzZSgpLCBTdHJpbmcoKSk7
JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpLCBTdHJpbmcoKSk7JykKLQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCi0g
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2NvbnZl
cnNpb25zX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAgICAgIGxpbmVz
ID0gW10KLSAgICAgICAgaWYgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxf
cGFyYW1ldGVyczoKLSAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18l
cycgJSBpbl9wYXJhbV9uYW1lCi0gICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2VuZXJhdG9y
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyLCBGYWxzZSkKLSAgICAgICAgICAgIGluX3BhcmFtX29wdGlvbmFsX3NhZmVfbmFtZSA9ICcq
JXMnICUgaW5fcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBpbl9wYXJh
bV9uYW1lCi0gICAgICAgICAgICBpbXBvcnRfZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2Jq
Y19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKGluX3BhcmFtX29wdGlv
bmFsX3NhZmVfbmFtZSwgZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQot
ICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzOycgJSAoam9pbl90eXBlX2FuZF9uYW1lKG9iamNf
dHlwZSwgb2JqY19pbl9wYXJhbV9uYW1lKSwgaW1wb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlczsnICUgam9pbl90
eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgb2JqY19pbl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIGluX3BhcmFtX25hbWUpCi0gICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJXM7JyAlIChvYmpjX2luX3BhcmFt
X25hbWUsIGltcG9ydF9leHByZXNzaW9uKSkKLQotICAgICAgICBpZiBsaW5lczoKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQot
ICAgIGRlZiBfZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNv
bW1hbmQpOgotICAgICAgICBwYWlycyA9IFtdCi0gICAgICAgIHBhaXJzLmFwcGVuZCgnV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCi0gICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCi0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVz
JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9u
YW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQotICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4cHJlc3Npb24gPSAnKCVzID8gJiVz
IDogbmlsKScgJSAoaW5fcGFyYW1fbmFtZSwgb2JqY19pbl9wYXJhbV9uYW1lKQotICAgICAgICAg
ICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
b3B0aW9uYWxfZXhwcmVzc2lvbikpCi0gICAgICAgIHJldHVybiAnICAgIFttX2RlbGVnYXRlICVz
JXNdOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29u
ZmlndXJhdGlvbl9oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRmYWY5
N2ZmMjA5OTZmMTI3MjM5ZmE2YTRmNjAxMTJmYmViMzFmMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9oZWFk
ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1w
bGF0ZQotCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1m
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ0NvbmZpZ3VyYXRpb25IZWFk
ZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiAnJXNDb25maWd1cmF0aW9uLmgnICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAot
Ci0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgaGVhZGVycyA9IFsKLSAg
ICAgICAgICAgICciJXMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAg
XQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xu
Jy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAotICAg
ICAgICB9Ci0KLSAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNo
b3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkp
Ci0gICAgICAgIHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCi0KLSAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rpb25z
ID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNHZW5lcmljSGVh
ZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW50ZXJmYWNlX2Zvcl9k
b21haW5zKGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLk9iakNHZW5lcmljSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbnRlcmZhY2VfZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlu
cyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNl
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0JykKLSAgICAgICAgZm9yIGRvbWFp
biBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3By
b3BlcnRpZXNfZm9yX2RvbWFpbihkb21haW4pKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQn
KQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9w
cm9wZXJ0aWVzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgcHJvcGVydHlfYXJn
cyA9IHsKLSAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJ
WCwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAg
ICAgICAgJ3ZhcmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9w
cmVmaXhfZm9yX2RvbWFpbihkb21haW4pLAotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBb
XQotICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRv
bWFpbik6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakND
b25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVydHlf
YXJncykpCi0gICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihk
b21haW4pOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpD
Q29uZmlndXJhdGlvbkV2ZW50UHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0eV9h
cmdzKSkKLSAgICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29uZmlndXJhdGlvbl9p
bXBsZW1lbnRhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTY4OTk0YzRj
MmRlZDc1NTE4Nzc5YjljYzZjZWIwNWYwN2UxY2JhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb25maWd1cmF0aW9uX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52
IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBt
ZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0
b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKLQotCi1jbGFzcyBPYmplY3RpdmVDQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFt
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0NvbmZpZ3VyYXRpb24ubW0nICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAg
ICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCi0gICAgICAgICAgICAnIiVzSW50ZXJuYWwuaCInICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICciJXNCYWNrZW5kRGlzcGF0
Y2hlcnMuaCInICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICc8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4nLAotICAgICAgICAgICAg
JzxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4nLAotICAg
ICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4nLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzQ29uZmlndXJhdGlvbi5oIicgJSBPYmpD
R2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzog
J1xuJy5qb2luKFsnI2ltcG9ydCAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlf
aGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBP
YmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRl
cihzZWxmLm1vZGVsKCkpCi0gICAgICAgIHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0
b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1v
ZGVsKCkpCi0KLSAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0g
ICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
Lk9iakNJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9u
X2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5zKGRvbWFpbnMpKQotICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4o
c2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b25fZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24gUldJUHJvdG9jb2xDb25maWd1cmF0aW9u
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsnKQotICAgICAgICBs
aW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfaXZhcnMoZG9tYWlucykpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnfScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCctIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXInKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmID0gW3N1cGVyIGluaXRdOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGlmICghc2VsZiknKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcmV0dXJuIG5pbDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY29u
dHJvbGxlcik7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAg
bGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2RlYWxsb2MoZG9tYWlucykpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKLSAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAg
ICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgot
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRl
cl9mb3JfZG9tYWluKGRvbWFpbikpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQot
ICAgICAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFp
bik6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rp
c3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4oZG9tYWluKSkKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2l2YXJzKHNlbGYsIGRvbWFp
bnMpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoK
LSAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIo
ZG9tYWluKToKLSAgICAgICAgICAgICAgICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkhh
bmRsZXInICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkK
LSAgICAgICAgICAgICAgICBpdmFyX25hbWUgPSAnXyVzSGFuZGxlcicgJSBPYmpDR2VuZXJhdG9y
LnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKQotICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGlkPCVzPiAlczsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9u
YW1lKSkKLSAgICAgICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRl
cihkb21haW4pOgotICAgICAgICAgICAgICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9tYWlu
RXZlbnREaXNwYXRjaGVyJyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9t
YWluX25hbWUpCi0gICAgICAgICAgICAgICAgaXZhcl9uYW1lID0gJ18lc0V2ZW50RGlzcGF0Y2hl
cicgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWlu
KQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIColczsnICUgKG9iamNfY2xh
c3NfbmFtZSwgaXZhcl9uYW1lKSkKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2RlYWxsb2Moc2VsZiwgZG9tYWlucyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgbGluZXMuYXBwZW5kKCctICh2b2lkKWRlYWxsb2MnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
J3snKQotICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBpZiBkb21h
aW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6Ci0gICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18lc0hhbmRsZXIgcmVsZWFzZV07JyAlIE9iakNHZW5l
cmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pKQotICAgICAgICAg
ICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6Ci0gICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18lc0V2ZW50RGlzcGF0Y2hlciByZWxlYXNl
XTsnICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFp
bikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtzdXBlciBkZWFsbG9jXTsnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gbGluZXMKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9zZXR0ZXJfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBz
ZXR0ZXJfYXJncyA9IHsKLSAgICAgICAgICAgICdvYmpjUHJlZml4JzogT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwKLSAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgJ3ZhcmlhYmxlTmFtZVByZWZpeCc6IE9iakNHZW5lcmF0b3IudmFyaWFi
bGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pLAotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJ
bXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKnNldHRlcl9hcmdzKQotCi0gICAgZGVm
IF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKHNlbGYsIGRvbWFp
bik6Ci0gICAgICAgIGdldHRlcl9hcmdzID0gewotICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBP
YmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAndmFyaWFibGVOYW1lUHJlZml4JzogT2JqQ0dl
bmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbiksCi0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDQ29uZmlndXJhdGlvbkdl
dHRlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqZ2V0dGVyX2FyZ3MpCi0KLSAg
ICBkZWYgX3ZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAg
ICAgICAgZG9tYWluX25hbWUgPSBkb21haW4uZG9tYWluX25hbWUKLSAgICAgICAgaWYgZG9tYWlu
X25hbWUuc3RhcnRzd2l0aCgnRE9NJyk6Ci0gICAgICAgICAgICByZXR1cm4gJ2RvbScgKyBkb21h
aW5fbmFtZVszOl0KLSAgICAgICAgaWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnQ1NTJyk6Ci0g
ICAgICAgICAgICByZXR1cm4gJ2NzcycgKyBkb21haW5fbmFtZVszOl0KLSAgICAgICAgcmV0dXJu
IGRvbWFpbl9uYW1lWzoxXS5sb3dlcigpICsgZG9tYWluX25hbWVbMTpdCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmplY3RpdmVfY19jb252ZXJzaW9uX2hlbHBlcnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19jb252ZXJzaW9u
X2hlbHBlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGNmNzUyMWFkZDE5MTBj
NWFiMTU4ZTI1MjVlZjFmNWYxMTE5NGMxODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfY29udmVyc2lvbl9oZWxwZXJzLnB5CisrKyAv
ZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5
cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQg
bG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZy
b20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gZ2VuZXJh
dG9yIGltcG9ydCBHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBl
Ci0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQotCi0KLWRlZiBhZGRfbmV3bGlu
ZShsaW5lcyk6Ci0gICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKLSAgICAgICAgcmV0
dXJuCi0gICAgbGluZXMuYXBwZW5kKCcnKQotCi0KLWNsYXNzIE9iamVjdGl2ZUNDb252ZXJzaW9u
SGVscGVyc0dlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAg
ICAgICAgcmV0dXJuICclc0VudW1Db252ZXJzaW9uSGVscGVycy5oJyAlIE9iakNHZW5lcmF0b3Iu
T0JKQ19QUkVGSVgKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAg
ICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBl
c19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCi0KLSAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgotICAgICAgICBoZWFkZXJzID0g
WwotICAgICAgICAgICAgJyIlc0FycmF5Q29udmVyc2lvbkhlbHBlcnMuaCInICUgT2JqQ0dlbmVy
YXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewot
ICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2ltcG9ydCAnICsgaGVhZGVyIGZv
ciBoZWFkZXIgaW4gaGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAgICAgICAgZG9tYWlucyA9IHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNDb252ZXJzaW9uSGVscGVyc1ByZWx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbnZlcnNpb25IZWxwZXJzU3RhbmRhcmQpLnN1YnN0
aXR1dGUoTm9uZSkpCi0gICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVf
ZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpCi0gICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0NvbnZlcnNpb25IZWxwZXJzUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9p
bihzZWN0aW9ucykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9u
cyhzZWxmLCBkb21haW4pOgotICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAgICAgIyBUeXBlIGVu
dW1zIGFuZCBtZW1iZXIgZW51bXMuCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Y29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3Jf
bWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCi0KLSAgICAgICAgIyBBbm9ueW1v
dXMgY29tbWFuZCBlbnVtcy4KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRz
OgotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoK
LSAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQotICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlmIChp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlz
X2Fub255bW91cyk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAg
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUs
IHBhcmFtZXRlcikpCi0KLSAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMuCi0gICAgICAg
IGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNl
KHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91
cyk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkK
LQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNf
ZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKLSAg
ICAgICAgZW51bV92YWx1ZXMgPSBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCkKLSAgICAg
ICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9v
YmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmlu
ZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpv
aW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25f
Zm9yX21lbWJlcihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBv
YmpjX2VudW1fbmFtZSA9IE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91
c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICBlbnVtX3ZhbHVlcyA9
IG1lbWJlci50eXBlLmVudW1fdmFsdWVzKCkKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhv
YmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92
YWx1ZXMpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihzZWxmLCBkb21h
aW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKLSAgICAgICAgb2JqY19lbnVt
X25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9w
YXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAg
ICAgZW51bV92YWx1ZXMgPSBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpCi0gICAgICAgIGxp
bmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190
b19wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2Jq
Y19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxp
bmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKHNl
bGYsIG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6Ci0gICAgICAgIGxpbmVzID0gW10KLSAg
ICAgICAgbGluZXMuYXBwZW5kKCdpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoJXMgdmFs
dWUpJyAlIG9iamNfZW51bV9uYW1lKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBzd2l0Y2godmFsdWUpIHsnKQotICAgICAgICBmb3IgZW51bV92
YWx1ZSBpbiBlbnVtX3ZhbHVlczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGNhc2Ug
JXMlczonICUgKG9iamNfZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51
bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiJXMiKTsnICUgZW51bV92YWx1ZSkKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgfScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2Nv
bF9zdHJpbmcoc2VsZiwgb2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKToKLSAgICAgICAgbGlu
ZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJ2lubGluZSAlcyBmcm9tUHJvdG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKScgJSBv
YmpjX2VudW1fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgZm9yIGVu
dW1fdmFsdWUgaW4gZW51bV92YWx1ZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBp
ZiAodmFsdWUgPT0gIiVzIiknICUgZW51bV92YWx1ZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICByZXR1cm4gJXMlczsnICUgKG9iamNfZW51bV9uYW1lLCBHZW5lcmF0b3Iuc3R5
bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHJldHVybiAlcyVzOycgJSAob2JqY19lbnVtX25hbWUsIEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWVzWzBdKSkpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpl
Y3RpdmVfY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZl
X2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggNTY3MmRiN2ZlNmM5YjI1MGIxOTczMGYwZjYxM2UwODRkZTZiNjM4Ni4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVf
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMTUwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0j
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1w
b3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0KLWZyb20gZ2VuZXJhdGVf
b2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IKLWZyb20gZ2VuZXJhdG9yIGltcG9ydCBH
ZW5lcmF0b3IsIHVjZmlyc3QKLWZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKLQotCi1jbGFzcyBPYmplY3RpdmVDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVG
SVgKLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4g
ZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRj
aGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShz
ZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIHNlY29uZGFy
eV9oZWFkZXJzID0gWwotICAgICAgICAgICAgJyIlc0VudW1Db252ZXJzaW9uSGVscGVycy5oIicg
JSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAotICAgICAgICAgICAgJzxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAotICAgICAgICBdCi0KLSAgICAgICAgaGVhZGVyX2Fy
Z3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzSW50ZXJuYWwuaCInICUg
T2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwKLSAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRl
cyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25k
YXJ5X2hlYWRlcnNdKSwKLSAgICAgICAgfQotCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYu
X2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zLCBkb21haW5zKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpDSW1wbGVtZW50YXRp
b25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9ucyhzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9t
YWluLmV2ZW50czoKLSAgICAgICAgICAgIHJldHVybiAnJwotCi0gICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXInICUgKE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgsIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMu
YXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXMnICUgb2JqY19uYW1lKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCctIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgc2VsZiA9IFtzdXBlciBpbml0XTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBpZiAoIXNlbGYpJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybiBu
aWw7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNvbnRyb2xsZXIpOycpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gc2VsZjsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGZvciBldmVudCBpbiBk
b21haW4uZXZlbnRzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2
ZW50KGRvbWFpbiwgZXZlbnQpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9ldmVudChzZWxmLCBkb21haW4sIGV2ZW50KToKLSAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfc2ln
bmF0dXJlKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hh
bm5lbCA9IF9jb250cm9sbGVyLT5mcm9udGVuZENoYW5uZWwoKTsnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAoIWZyb250ZW5kQ2hhbm5lbCknKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcmV0dXJuOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAgICBy
ZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBmaWx0ZXIobGFtYmRhIHBhcmFtZXRlcjogbm90
IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9p
bnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKLSAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUg
KHZhcl9uYW1lLCB2YXJfbmFtZSkpCi0KLSAgICAgICAgb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0
ZXJzID0gZmlsdGVyKGxhbWJkYSBwYXJhbWV0ZXI6IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQg
T2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKSwg
ZXZlbnQuZXZlbnRfcGFyYW1ldGVycykKLSAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25h
bF9wb2ludGVyX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0
b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQot
Ci0gICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyBvciBvcHRpb25hbF9wb2lu
dGVyX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFs
KCIlcy4lcyIpKTsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZXZlbnQuZXZlbnRfbmFtZSkpCi0g
ICAgICAgIGlmIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBsaW5lcy5leHRl
bmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoZG9tYWluLCBldmVudCkpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfZXZlbnRfc2lnbmF0dXJlKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgotICAgICAgICBpZiBu
b3QgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHJldHVybiAnLSAodm9pZCkl
cycgJSBldmVudC5ldmVudF9uYW1lCi0gICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1fbmFt
ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcl
czooJXMpJXMnICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJh
bShkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQotICAg
ICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCi0gICAgICAgIHJldHVybiAnLSAodm9p
ZCklc1dpdGglcycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQotCi0gICAg
ZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4sIGV2ZW50KToK
LSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycp
Ci0gICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKLSAgICAg
ICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3Jf
dHlwZShwYXJhbWV0ZXIudHlwZSkKLSAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBzYWZlX3Zhcl9uYW1lID0gJygqJXMpJyAlIHZhcl9u
YW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCi0gICAgICAgICAgICBl
eHBvcnRfZXhwcmVzc2lvbiA9IE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9leHBvcnRfZXhw
cmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNhZmVfdmFyX25hbWUpCi0gICAg
ICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7
JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9l
eHByZXNzaW9uKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaWYgKCVzKScgJSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcyhBU0NJSUxpdGVy
YWwoIiVzIiksICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7
JykKLSAgICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY19oZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmplY3RpdmVfY19oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IGRiY2U1NWY4ZjkzYzRhMmU1YzAwM2EwZTU3MDRkODlhNzMxZTM3NmMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyLnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwot
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0j
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IHN0cmluZwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi0K
LWZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2MgaW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlw
ZV9hbmRfbmFtZQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUKLQotbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKLSAg
ICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgotICAgICAgICByZXR1cm4KLSAgICBsaW5l
cy5hcHBlbmQoJycpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ0hlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAg
ICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQotCi0g
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclcy5oJyAlIE9i
akNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
Ci0gICAgICAgIGhlYWRlcnMgPSBzZXQoWwotICAgICAgICAgICAgJzxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+JywKLSAgICAgICAgXSkKLQotICAgICAgICBoZWFkZXJfYXJn
cyA9IHsKLSAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhl
YWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAotICAgICAgICB9Ci0KLSAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCi0gICAgICAgIHR5cGVfZG9t
YWlucyA9IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNf
ZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFpbnMpCi0gICAgICAgIGNvbW1hbmRfZG9tYWlucyA9
IGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5k
bGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQotICAgICAgICBldmVudF9kb21haW5z
ID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNw
YXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQotCi0gICAgICAgICMgRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0b3I6IFJlZHVjZSB1bm5l
Y2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90b2NvbCBJbnRlcmZhY2Vz
Ci0gICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5cGVzIGZvciBhbGwgdHlw
ZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgotICAgICAgICAjIEpTQyBk
b21haW5zIChEZWJ1Z2dlciwgUnVudGltZSkgdGhpcyBwcm9kdWNlcyBleHRyYSB1bnVzZWQgdHlw
ZXMuIFdlIG9ubHkgbmVlZCB0bwotICAgICAgICAjIGdlbmVyYXRlIHRoZXNlIHR5cGVzIGlmIHRo
ZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIGNvbW1hbmRfZG9tYWlucyBvciBldmVudF9kb21haW5z
LgotCi0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLk9iakNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykpKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihmaWx0ZXIoTm9uZSwgbWFwKHNlbGYuX2dlbmVy
YXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4n
LmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlcywgdHlwZV9kb21haW5z
KSkpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1h
cChzZWxmLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scywgY29tbWFuZF9kb21haW5zKSkpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oZmlsdGVyKE5vbmUsIG1hcChzZWxm
Ll9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzLCBldmVudF9kb21haW5zKSkpKQotICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9iakNIZWFkZXJQb3N0bHVkZSkuc3Vi
c3RpdHV0ZShOb25lKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0g
ICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW4pOgotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnM6Ci0gICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBl
LCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICAgICAgb2JqY19uYW1lID0gT2JqQ0dlbmVyYXRv
ci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BjbGFzcyAlczsnICUgb2JqY19uYW1lKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgot
ICAgICAgICBsaW5lcyA9IFtdCi0KLSAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51
bXMuCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6
Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToK
LSAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRv
bWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBm
b3IgbWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCi0KLSAg
ICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4g
ZG9tYWluLmNvbW1hbmRzOgotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAg
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIp
KQotCi0gICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgotICAgICAgICBmb3IgZXZlbnQg
aW4gZG9tYWluLmV2ZW50czoKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZl
bnRfcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKLQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV90eXBlcyhzZWxmLCBkb21haW4pOgotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgICMgVHlwZSBpbnRlcmZhY2VzLgotICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgotICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UoZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKLSAgICAgICAgb2Jq
Y19lbnVtX25hbWUgPSBPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNf
ZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVy
YXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKSkK
LQotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihzZWxmLCBkb21h
aW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9IE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyKQotICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2Vu
dW1fbmFtZSwgbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKSkKLQotICAgIGRlZiBfZ2VuZXJhdGVf
YW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBkb21haW4sIGV2ZW50X29yX2NvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSBPYmpDR2VuZXJh
dG9yLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBl
dmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2dl
bmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCkp
Ci0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW0oc2VsZiwgZW51bV9uYW1lLCBlbnVtX3ZhbHVlcyk6
Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCd0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCAlcykgeycgJSBlbnVtX25hbWUpCi0gICAgICAgIGZvciBlbnVtX3ZhbHVl
IGluIGVudW1fdmFsdWVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMlcywnICUg
KGVudW1fbmFtZSwgR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92
YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKLSAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9pbnRlcmZhY2Uoc2VsZiwgZG9t
YWluLCBkZWNsYXJhdGlvbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgb2JqY19uYW1l
ID0gT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIDogJXMnICUgKG9iamNfbmFtZSwgT2Jq
Q0dlbmVyYXRvci5PQkpDX0pTT05fT0JKRUNUX0JBU0UpKQotICAgICAgICByZXF1aXJlZF9tZW1i
ZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycykKLSAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihs
YW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKLSAgICAgICAgaWYgcmVxdWlyZWRfbWVtYmVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhkb21haW4s
IGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKSkKLSAgICAgICAgZm9yIG1lbWJlciBpbiBy
ZXF1aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiByZXF1aXJlZCAq
LyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIp
KQotICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJy8qIG9wdGlvbmFsICovICcgKyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJv
cGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcp
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2lu
aXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24s
IHJlcXVpcmVkX21lbWJlcnMpOgotICAgICAgICBwYWlycyA9IFtdCi0gICAgICAgIGZvciBtZW1i
ZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKLSAgICAgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5l
cmF0b3Iub2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAg
ICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmll
cihtZW1iZXIubWVtYmVyX25hbWUpCi0gICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcykl
cycgJSAodmFyX25hbWUsIG9iamNfdHlwZSwgdmFyX25hbWUpKQotICAgICAgICBwYWlyc1swXSA9
IHVjZmlyc3QocGFpcnNbMF0pCi0gICAgICAgIHJldHVybiAnLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoJXM7JyAlICcgJy5qb2luKHBhaXJzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9tZW1iZXJfcHJv
cGVydHkoc2VsZiwgZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIGFjY2Vzc29yX3R5cGUg
PSBPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyKG1lbWJlcikKLSAg
ICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcihkZWNs
YXJhdGlvbiwgbWVtYmVyKQotICAgICAgICByZXR1cm4gJ0Bwcm9wZXJ0eSAobm9uYXRvbWljLCAl
cykgJXM7JyAlIChhY2Nlc3Nvcl90eXBlLCBqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBP
YmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1iZXJf
bmFtZSkpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scyhzZWxmLCBkb21h
aW4pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRvbWFpbi5jb21tYW5kczoKLSAg
ICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicgJSAoT2JqQ0dlbmVyYXRv
ci5PQkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdAcHJvdG9jb2wgJXMgPE5TT2JqZWN0PicgJSBvYmpjX25hbWUpCi0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0ByZXF1aXJlZCcpCi0gICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21h
aW4uY29tbWFuZHM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKGRvbWFpbiwgY29tbWFuZCkpCi0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0g
ICAgZGVmIF9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChzZWxmLCBkb21haW4sIGNv
bW1hbmQpOgotICAgICAgICBwYWlycyA9IFtdCi0gICAgICAgIHBhaXJzLmFwcGVuZCgnRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2snKQotICAgICAg
ICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazooJXMpc3VjY2Vzc0NhbGxiYWNrJyAlIHNl
bGYuX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCkpCi0gICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBw
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBwYWlycy5h
cHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVf
Zm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFt
X25hbWUpKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNv
bW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQotCi0gICAgZGVmIF9jYWxsYmFja19ibG9ja19m
b3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgotICAgICAgICBwYWlycyA9IFtdCi0g
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAg
ICAgICAgIHBhaXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUoT2JqQ0dlbmVyYXRvci5vYmpj
X3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciks
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgIHJldHVybiAndm9pZCheKSglcykn
ICUgJywgJy5qb2luKHBhaXJzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2Vz
KHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgZG9tYWluLmV2
ZW50czoKLSAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVy
JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBkb21haW4uZG9tYWluX25hbWUpCi0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgOiBOU09iamVjdCcgJSBvYmpjX25h
bWUpCi0gICAgICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShk
b21haW4sIGV2ZW50KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9ldmVu
dF9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBldmVudCk6Ci0gICAgICAgIGlmIG5vdCBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcmV0dXJuICctICh2b2lkKSVzOycgJSBldmVu
dC5ldmVudF9uYW1lCi0gICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMn
ICUgKHBhcmFtX25hbWUsIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4s
IGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQotICAgICAgICBwYWly
c1swXSA9IHVjZmlyc3QocGFpcnNbMF0pCi0gICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGgl
czsnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amVjdGl2ZV9jX2ludGVybmFsX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamVjdGl2ZV9jX2ludGVybmFsX2hlYWRl
ci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmFkYzhjMmI2NjVhYjQ2ODliY2I1
ZDRkYmU5MDU2Y2MyNTA2NzY3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIucHkKKysrIC9kZXYvbnVsbApA
QCAtMSw3NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChj
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWlt
cG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRl
X29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2VuZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCi0KLQotY2xhc3MgT2JqZWN0aXZlQ1R5cGVzSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3Io
R2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRo
KToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNJ
bnRlcm5hbC5oJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgKLQotICAgIGRlZiBnZW5lcmF0
ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGhlYWRlcnMgPSBzZXQoWwotICAgICAgICAgICAgJyIl
cy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAgJyJSV0lQcm90
b2NvbEpTT05PYmplY3RJbnRlcm5hbC5oIicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPicsCi0gICAgICAgICAgICAnPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPicsCi0gICAgICAgIF0pCi0KLSAgICAgICAgaGVh
ZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKLSAgICAgICAgfQot
Ci0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBl
dmVudF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQotCi0gICAg
ICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLk9i
akNHZW5lcmljSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcblxuJy5qb2luKGZpbHRlcihOb25lLCBtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMsIGV2ZW50X2Rv
bWFpbnMpKSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2Jq
Q0dlbmVyaWNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
LSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcyhzZWxmLCBkb21haW4pOgotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRvbWFpbi5ldmVudHM6Ci0gICAgICAgICAgICBv
YmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicgJSAoT2JqQ0dlbmVyYXRvci5P
QkpDX1BSRUZJWCwgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdAaW50ZXJmYWNlICVzIChQcml2YXRlKScgJSBvYmpjX25hbWUpCi0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycpCi0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqZWN0aXZlX2NfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3Rp
dmVfY190eXBlc19pbXBsZW1lbnRhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggNjE2OWM2ZmYxYTgxOWJkMjMyYjNmYTRmNzJmYzYwN2Q3YWVjZWY0NS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmplY3RpdmVfY190eXBlc19pbXBs
ZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBh
cmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWZyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jIGltcG9ydCBPYmpDR2Vu
ZXJhdG9yCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci1mcm9tIGdl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMK
LWZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQotCi0KLWRlZiBhZGRfbmV3bGluZShsaW5lcyk6Ci0gICAgaWYgbGluZXMgYW5k
IGxpbmVzWy0xXSA9PSAnJzoKLSAgICAgICAgcmV0dXJuCi0gICAgbGluZXMuYXBwZW5kKCcnKQot
Ci0KLWNsYXNzIE9iamVjdGl2ZUNUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRv
cik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAg
ICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCi0KLSAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gJyVzVHlwZXMubW0n
ICUgT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWAotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKSkKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0g
ICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwotICAgICAgICAgICAgJyIlc0VudW1Db252ZXJz
aW9uSGVscGVycy5oIicgJSBPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLAotICAgICAgICAgICAg
JzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4nLAotICAgICAgICAgICAgJzx3dGYv
QXNzZXJ0aW9ucy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKLSAgICAg
ICAgXQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAgICAgICAgICAgJ3ByaW1hcnlJbmNs
dWRlJzogJyIlc0ludGVybmFsLmgiJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsCi0gICAg
ICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAlIGhl
YWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCi0gICAgICAgIH0KLQotICAg
ICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKLSAgICAgICAgc2VjdGlv
bnMgPSBbXQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuT2JqQ0ltcGxlbWVu
dGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKLSAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zLCBk
b21haW5zKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5PYmpD
SW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
LSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIGdlbmVyYXRl
X3R5cGVfaW1wbGVtZW50YXRpb25zKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAg
ICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToK
LSAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFy
YXRpb24pKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIGdlbmVy
YXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6Ci0gICAg
ICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXMn
ICUgT2JqQ0dlbmVyYXRvci5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkpCi0g
ICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJl
ci5pc19vcHRpb25hbCwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAgICAgICBpZiByZXF1
aXJlZF9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1i
ZXJzKGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpKQotICAgICAgICBmb3Ig
bWVtYmVyIGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zZXR0ZXJf
Zm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2dl
dHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9y
X3JlcXVpcmVkX21lbWJlcnMoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVt
YmVycyk6Ci0gICAgICAgIHBhaXJzID0gW10KLSAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJl
ZF9tZW1iZXJzOgotICAgICAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5
cGVfZm9yX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICAgICAgdmFyX25hbWUg
PSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5tZW1i
ZXJfbmFtZSkKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlICh2YXJfbmFt
ZSwgb2JqY190eXBlLCB2YXJfbmFtZSkpCi0gICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWly
c1swXSkKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aCVzOycgJSAnICcuam9pbihwYWlycykpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFzZWxmKScpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICByZXR1cm4gbmlsOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
LQotICAgICAgICByZXF1aXJlZF9wb2ludGVyX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJl
cjogT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKG1lbWJlci50eXBlKSwg
cmVxdWlyZWRfbWVtYmVycykKLSAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9tZW1iZXJzOgot
ICAgICAgICAgICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9wb2ludGVyX21lbWJlcnM6Ci0gICAg
ICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19p
ZGVudGlmaWVyKG1lbWJlci5tZW1iZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKCVzLCBAIiVzIik7
JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQot
Ci0gICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKLSAgICAgICAgICAgIHZh
cl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihtZW1i
ZXIubWVtYmVyX25hbWUpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzZWxmLiVzID0g
JXM7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQotCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVt
YmVyKToKLSAgICAgICAgb2JqY190eXBlID0gT2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21l
bWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0
b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIobWVtYmVyLm1lbWJlcl9uYW1lKQotICAg
ICAgICBzZXR0ZXJfbWV0aG9kID0gT2JqQ0dlbmVyYXRvci5vYmpjX3NldHRlcl9tZXRob2RfZm9y
X21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQotICAgICAgICBjb252ZXJzaW9uX2V4cHJlc3Np
b24gPSBPYmpDR2VuZXJhdG9yLm9iamNfdG9fcHJvdG9jb2xfZXhwcmVzc2lvbl9mb3JfbWVtYmVy
KGRlY2xhcmF0aW9uLCBtZW1iZXIsIHZhcl9uYW1lKQotICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnLSAodm9pZClzZXQlczooJXMpJXMnICUgKHVjZmlyc3QodmFyX25h
bWUpLCBvYmpjX3R5cGUsIHZhcl9uYW1lKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgW3N1cGVyICVzOiVzIGZvcktleTpAIiVzIl07JyAlIChz
ZXR0ZXJfbWV0aG9kLCBjb252ZXJzaW9uX2V4cHJlc3Npb24sIG1lbWJlci5tZW1iZXJfbmFtZSkp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKHNlbGYsIGRvbWFpbiwg
ZGVjbGFyYXRpb24sIG1lbWJlcik6Ci0gICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAgdmFyX25h
bWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVyKG1lbWJlci5t
ZW1iZXJfbmFtZSkKLSAgICAgICAgZ2V0dGVyX21ldGhvZCA9IE9iakNHZW5lcmF0b3Iub2JqY19n
ZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcikKLSAgICAgICAgYmFz
aWNfZXhwcmVzc2lvbiA9ICdbc3VwZXIgJXM6QCIlcyJdJyAlIChnZXR0ZXJfbWV0aG9kLCBtZW1i
ZXIubWVtYmVyX25hbWUpCi0gICAgICAgIGNvbnZlcnNpb25fZXhwcmVzc2lvbiA9IE9iakNHZW5l
cmF0b3IucHJvdG9jb2xfdG9fb2JqY19leHByZXNzaW9uX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24s
IG1lbWJlciwgYmFzaWNfZXhwcmVzc2lvbikKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBs
aW5lcy5hcHBlbmQoJy0gKCVzKSVzJyAlIChvYmpjX3R5cGUsIHZhcl9uYW1lKSkKLSAgICAgICAg
bGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuICVzOycg
JSBjb252ZXJzaW9uX2V4cHJlc3Npb24pCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDQ3YjQzODIzYjMxNjEyMjUwMWYzMGVmZGEwNmYzN2RiODE4ZmZmMGIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzQwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52
IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBt
ZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0jIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgc3RyaW5nCi1mcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAotZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUs
IFByaW1pdGl2ZVR5cGUsIEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEZyYW1ld29ya3MKLQotbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCi0KLQotY2xhc3MgUHJvdG9jb2xUeXBlc0hl
YWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQotCi0gICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKLQotICAgIGRlZiBnZW5lcmF0
ZV9vdXRwdXQoc2VsZik6Ci0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKQotICAgICAgICBzZWxmLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0
aW9ucyhkb21haW5zKQotCi0gICAgICAgIGhlYWRlcnMgPSBzZXQoWwotICAgICAgICAgICAgJzxp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPicsCi0gICAgICAgICAgICAnPHd0Zi9B
c3NlcnRpb25zLmg+JywKLSAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nCi0gICAgICAg
IF0pCi0KLSAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotCi0gICAgICAgIGhlYWRlcl9hcmdzID0gewotICAg
ICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0
cHV0X2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2lu
Y2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAotICAgICAg
ICAgICAgJ3R5cGVkZWZzJzogJycsCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm5fdHlwZSA9
ICdTdHJpbmcnCi0gICAgICAgIHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvID0gW3JldHVy
bl90eXBlXQotICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAg
ICByZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNyb1s6MF0gPSBbZXhwb3J0X21hY3JvXQotCi0g
ICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
LkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZCgnbmFtZXNwYWNlIFByb3RvY29sIHsnKQotICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoZG9tYWlucykp
Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmcyhkb21haW5z
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCclcyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7JyAlICcgJy5qb2luKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbCi0gICAgICAgICAgICAndGVtcGxhdGU8dHlw
ZW5hbWUgVD4gJXMgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpJyAlIHJldHVybl90
eXBlLAotICAgICAgICAgICAgJ3snLAotICAgICAgICAgICAgJyAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsnLAotICAgICAgICAgICAg
J30nXSkpCi0KLSAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9i
dWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmls
dGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkK
LSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRp
b25zX2Zvcl9iaW5kaW5nX3RyYWl0cygpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ30gLy8g
bmFtZXNwYWNlIFByb3RvY29sJykKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKLSAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQotCi0gICAgIyBQcml2YXRl
IG1ldGhvZHMuCi0KLSAgICAjIEZJWE1FOiBtb3ZlIGJ1aWxkZXJzIG91dCBvZiBjbGFzc2VzLCB1
bmNvbW1lbnQgZm9yd2FyZCBkZWNsYXJhdGlvbgotCi0gICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJk
X2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW5zKToKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotCi0g
ICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGRlY2xhcmF0aW9uX3R5
cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnNdCi0g
ICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCi0gICAgICAgICAgICBlbnVt
X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
LCBkZWNsYXJhdGlvbl90eXBlcykKLSAgICAgICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsg
bGVuKGVudW1fdHlwZXMpID09IDA6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAg
ICAgICAgZG9tYWluX2xpbmVzID0gW10KLSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLQotICAgICAgICAgICAgb2Jq
ZWN0X3R5cGVfbmFtZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gb2JqZWN0X3R5
cGVzXQotICAgICAgICAgICAgZW51bV90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9y
IF90eXBlIGluIGVudW1fdHlwZXNdCi0KLSAgICAgICAgICAgICMgRm9yd2FyZC1kZWNsYXJlIGFs
bCBjbGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJyZWFrIGlmIHJlYXJyYW5nZWQu
Ci0gICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgbmFtZSBmb3Ig
bmFtZSBpbiBzb3J0ZWQob2JqZWN0X3R5cGVfbmFtZXMpKQotICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgbmFtZSBmb3IgbmFtZSBpbiBzb3J0ZWQoZW51
bV90eXBlX25hbWVzKSkKLSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMn
ICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVz
KSkpCi0KLSAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJu
ICcnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIiIiLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi0lcwotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotIiIiICUgJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzKHNlbGYsIGRv
bWFpbnMpOgotICAgICAgICBzZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmc19m
b3JfZG9tYWluLCBkb21haW5zKQotICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgdGV4
dDogbGVuKHRleHQpID4gMCwgc2VjdGlvbnMpCi0KLSAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9
PSAwOgotICAgICAgICAgICAgcmV0dXJuICcnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gIiIiLy8gVHlwZWRlZnMuCi0lcwotLy8gRW5kIG9mIHR5cGVkZWZzLiIiIiAlICdcblxu
Jy5qb2luKHNlY3Rpb25zKQotCi0gICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWlu
KHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIo
bGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSksIGRvbWFpbi50
eXBlX2RlY2xhcmF0aW9ucykKLSAgICAgICAgaWYgbGVuKHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMp
ID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICBzZWN0aW9ucyA9IFtdCi0g
ICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBwcmltaXRpdmVfZGVjbGFyYXRpb25zOgotICAgICAg
ICAgICAgcHJpbWl0aXZlX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKGRlY2xhcmF0aW9uLnR5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICAgICAgdHlwZWRlZl9s
aW5lcyA9IFtdCi0gICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4g
MDoKLSAgICAgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZGVj
bGFyYXRpb24uZGVzY3JpcHRpb24pCi0gICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgn
dHlwZWRlZiAlcyAlczsnICUgKHByaW1pdGl2ZV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWUp
KQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkK
LQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVz
IHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sICdcbicuam9pbihsaW5lcykpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJz
X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgc2VjdGlvbnMgPSBbXQotCi0gICAg
ICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKLSAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6
Ci0gICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfZW51bV9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgIGVsaWYg
aXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2Rl
Y2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbikpCi0KLSAgICAgICAgc2VjdGlvbnMg
PSBmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQotICAg
ICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUg
ZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rp
b25zKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAnXG4nLmpvaW4obGluZXMpKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0
X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6Ci0gICAgICAgIGlm
IGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKLSAgICAgICAgICAgIHJl
dHVybiAnJwotCi0gICAgICAgIGVudW1fbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBp
c2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255
bW91cywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIHJlcXVpcmVkX21l
bWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBm
aWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykKLSAgICAgICAgb2JqZWN0X25hbWUgPSB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbmFtZQotCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFy
YXRpb24uZGVzY3JpcHRpb24pID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMg
Ki8nICUgdHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKLSAgICAgICAgYmFzZV9jbGFzcyA9
ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKLSAgICAgICAgaWYgbm90IEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAgICAg
YmFzZV9jbGFzcyA9IGJhc2VfY2xhc3MgKyAnQmFzZScKLSAgICAgICAgbGluZXMuYXBwZW5kKCdj
bGFzcyAlcyA6IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgncHVibGljOicpCi0gICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBl
bnVtX21lbWJlcnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lIFwnJXNcJyB3aGlsZSBnZW5lcmF0aW5nICVzLicgJSAoZW51bV9tZW1i
ZXIubWVtYmVyX25hbWUsIG9iamVjdF9uYW1lKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihlbnVtX21lbWJl
cikpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2Vu
dW0odHlwZV9kZWNsYXJhdGlvbikpCi0KLSAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZSA9IFtd
Ci0gICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogUmVmUHRyPCVzPiBy
ZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3RfbmFtZSkpCi0gICAg
ICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKLSAgICAgICAgICAgIGNvbnN0cnVj
dG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogICAgIC5zZXQlcyguLi4pJyAlIHVjZmlyc3QobWVt
YmVyLm1lbWJlcl9uYW1lKSkKLQotICAgICAgICBidWlsZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAnb2JqZWN0VHlwZSc6IG9iamVjdF9uYW1lLAotICAgICAgICAgICAgJ2NvbnN0cnVjdG9yRXhh
bXBsZSc6ICdcbicuam9pbihjb25zdHJ1Y3Rvcl9leGFtcGxlKSArICc7JywKLSAgICAgICAgfQot
Ci0gICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuUHJvdG9jb2xPYmplY3RC
dWlsZGVyRGVjbGFyYXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqYnVpbGRlcl9hcmdz
KSkKLSAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJl
cih0eXBlX21lbWJlciwgZG9tYWluKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5Qcm90b2NvbE9iamVjdEJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqYnVpbGRlcl9hcmdzKSkKLSAgICAgICAgZm9yIG1lbWJlciBpbiBvcHRpb25h
bF9tZW1iZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3VuY2hl
Y2tlZF9zZXR0ZXJfZm9yX21lbWJlcihtZW1iZXIsIGRvbWFpbikpCi0KLSAgICAgICAgaWYgR2Vu
ZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAv
LyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5lcmF0ZWQgYXMgb3Blbi4nKQotICAgICAgICAg
ICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgotICAg
ICAgICAgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnZXhwb3J0X21hY3JvJywgTm9uZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAlcyBzdGF0aWMgY29uc3QgY2hhciogJXM7JyAlIChleHBvcnRfbWFjcm8sIHVjZmlyc3QodHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKLQotICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQot
Ci0gICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24oc2VsZiwgZW51
bV9kZWNsYXJhdGlvbik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5k
KCcvKiAlcyAqLycgJSBlbnVtX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQotICAgICAgICBsaW5l
cy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9kZWNsYXJh
dGlvbi50eXBlX25hbWUsIGVudW1fZGVjbGFyYXRpb24udHlwZSkpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3Vz
X2VudW1fbWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToKLSAgICAgICAgZGVmIGFwcGx5X2luZGVu
dGF0aW9uKGxpbmUpOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCgnIycsICcvKics
ICcqLycsICcvLycpKSBvciBsZW4obGluZSkgaXMgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
bGluZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyAgICAnICsg
bGluZQotCi0gICAgICAgIGluZGVudGVkX2xpbmVzID0gbWFwKGFwcGx5X2luZGVudGF0aW9uLCBz
ZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21lbWJlci5tZW1iZXJfbmFt
ZSwgZW51bV9tZW1iZXIudHlwZSkpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oaW5kZW50ZWRf
bGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKHNlbGYsIGVu
dW1fbmFtZSwgZW51bV90eXBlKToKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBlbnVtX25h
bWUgPSB1Y2ZpcnN0KGVudW1fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdlbnVtIGNsYXNz
ICVzIHsnICUgZW51bV9uYW1lKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3R5cGUu
ZW51bV92YWx1ZXMoKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzID0gJXMsJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2Vs
Zi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnfTsgLy8gZW51bSBjbGFzcyAlcycgJSBlbnVtX25hbWUpCi0gICAgICAgIHJldHVybiBs
aW5lcyAgIyBUaGUgY2FsbGVyIG1heSB3YW50IHRvIGFkanVzdCBpbmRlbnRhdGlvbiwgc28gZG9u
J3Qgam9pbiB0aGVzZSBsaW5lcy4KLQotICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9l
bnVtKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19v
cHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCi0gICAgICAgIGVudW1fdmFs
dWVzID0gW10KLQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIHsnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLCcpCi0gICAgICAgIGZvciBpIGlu
IHJhbmdlKGxlbihyZXF1aXJlZF9tZW1iZXJzKSk6Ci0gICAgICAgICAgICBlbnVtX3ZhbHVlID0g
IiVzU2V0IiAlIHVjZmlyc3QocmVxdWlyZWRfbWVtYmVyc1tpXS5tZW1iZXJfbmFtZSkKLSAgICAg
ICAgICAgIGVudW1fdmFsdWVzLmFwcGVuZChlbnVtX3ZhbHVlKQotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgICVzID0gMSA8PCAlZCwnICUgKGVudW1fdmFsdWUsIGkpKQotICAgICAg
ICBpZiBsZW4oZW51bV92YWx1ZXMpID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoJXMpJyAlICcgfCAnLmpvaW4oZW51bV92YWx1ZXMpKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEFsbEZpZWxkc1Nl
dCA9IDAnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2Vu
ZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWlu
KToKLSAgICAgICAgc2V0dGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNm
aXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBH
ZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKLSAg
ICAgICAgICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAgICAn
cGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlw
ZV9tZW1iZXIpCi0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2
YWx1ZSknICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgJShjYW1lbE5hbWUpc1NldCksIHByb3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0KTsnICUg
c2V0dGVyX2FyZ3MpCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0
LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBz
ZXR0ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiks
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTwlKGNhbWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJfYXJncykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIH0nKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1i
ZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6Ci0gICAgICAgIHNldHRlcl9hcmdzID0gewot
ICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
LAotICAgICAgICAgICAgJ2tleWVkU2V0JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9y
X3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQotICAgICAgICB9Ci0KLSAgICAg
ICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSkn
ICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHsnKQotICAgICAgICBp
ZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVND
SUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAl
IHNldHRlcl9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJh
dGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKHNlbGYpOgotICAgICAgICAjIEEgbGlzdCBvZiAoYnVp
bGRlcl90eXBlLCBuZWVkc19ydW50aW1lX2Nhc3QpCi0gICAgICAgIHR5cGVfYXJndW1lbnRzID0g
W10KLQotICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgot
ICAgICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNs
OiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCBkb21haW4udHlw
ZV9kZWNsYXJhdGlvbnMpCi0KLSAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRl
Y2xhcmF0aW9uc190b19nZW5lcmF0ZToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIg
aW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9z
dHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwgRmFs
c2UpKQotCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBl
bmQoKEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZSh0eXBlX2RlY2xhcmF0
aW9uLnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFy
YXRpb24udHlwZSkpKQotCi0gICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KLSAg
ICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KLSAgICAgICAgZXhwb3J0
X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBO
b25lKQotICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBz
dHJ1Y3Rfa2V5d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykKLSAgICAgICAgICAgICNmdW5jdGlv
bl9rZXl3b3Jkc1sxOjFdID0gW2V4cG9ydF9tYWNyb10KLQotICAgICAgICBsaW5lcyA9IFtdCi0g
ICAgICAgIGZvciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgndGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihz
dHJ1Y3Rfa2V5d29yZHMpLCBhcmd1bWVudFswXSkpCi0gICAgICAgICAgICBpZiBhcmd1bWVudFsx
XToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBQYXNzUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsn
ICUgYXJndW1lbnRbMF0pCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJ
U0FCTEVEJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlv
bl9rZXl3b3JkcykpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVEJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggZDgzYmExMjRiODQ4ZmE4ZmJiZjNjZjEyYjVjZWY3NDI3YThkNmVl
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBzdHJpbmcKLWZy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotCi1mcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci1mcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRl
bXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBBbGlhc2VkVHlwZSwgQXJy
YXlUeXBlLCBFbnVtVHlwZSwgT2JqZWN0VHlwZQotCi1sb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKLQotCi1jbGFzcyBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
R2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRo
KToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCkKLQotICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAiSW5z
cGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCIKLQotICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2Vs
Zik6Ci0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAg
ICBzZWxmLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyhkb21haW5z
KQotCi0gICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPidd
Ci0KLSAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUn
OiAnIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIicsCi0gICAgICAgICAgICAnc2Vjb25kYXJ5
SW5jbHVkZXMnOiAiXG4iLmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBp
biBzZWNvbmRhcnlfaGVhZGVyc10pLAotICAgICAgICB9Ci0KLSAgICAgICAgc2VjdGlvbnMgPSBb
XQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Q
cmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ25hbWVzcGFjZSBQcm90b2NvbCB7JykKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2VudW1fbWFwcGluZygpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcygpKQotICAgICAgICBidWlsZGVyX3NlY3Rp
b25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFpbnMpCi0g
ICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9u
KSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ30gLy8g
bmFtZXNwYWNlIFByb3RvY29sJykKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRl
bXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVh
ZGVyX2FyZ3MpKQotCi0gICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKLQotICAg
ICMgUHJpdmF0ZSBtZXRob2RzLgotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoc2Vs
Zik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsnKQotICAgICAgICBsaW5l
cy5leHRlbmQoWycgICAgIiVzIiwnICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBzZWxm
LmFzc2lnbmVkX2VudW1fdmFsdWVzKCldKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5l
cmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAgICAgICAgICBm
b3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBmaWx0ZXIobGFtYmRhIGRlY2w6IEdlbmVyYXRvci50eXBl
X2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpOgot
ICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQodHlwZV9kZWNsYXJhdGlv
bi50eXBlX21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgot
ICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywg
J1Byb3RvY29sJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxk
X25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKLQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6Ci0gICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgZGVjbGFyYXRpb25zX3Rv
X2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNz
ZXJ0aW9ucyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCi0KLSAgICAgICAg
Zm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgotICAgICAg
ICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgot
ICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUp
OgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNz
ZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkKLQotICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgot
ICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25f
Zm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgICAg
ICBpZiBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkK
LQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCi0KLSAgICBkZWYgX2dlbmVy
YXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNs
YXJhdGlvbik6Ci0gICAgICAgIGFyZ3MgPSB7Ci0gICAgICAgICAgICAnb2JqZWN0VHlwZSc6IEdl
bmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24u
dHlwZSkKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLlByb3Rv
Y29sT2JqZWN0UnVudGltZUNhc3QpLnN1YnN0aXR1dGUoTm9uZSwgKiphcmdzKQotCi0gICAgZGVm
IF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBvYmplY3Rf
ZGVjbGFyYXRpb24pOgotICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMpCi0gICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjog
bWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQotICAg
ICAgICBzaG91bGRfY291bnRfcHJvcGVydGllcyA9IG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Bl
bl9maWVsZHMob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpCi0gICAgICAgIGxpbmVzID0gW10KLQot
ICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgKEdlbmVyYXRvci5wcm90
b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkpKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoIiIiewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVj
dDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOyIiIikKLSAgICAg
ICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Ci0gICAgICAgICAgICBhcmdz
ID0gewotICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25h
bWUsCi0gICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKLSAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+
ZmluZChBU0NJSUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOwotICAgICAgICBBU1NFUlQoJSht
ZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICUoYXNzZXJ0TWV0aG9k
KXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9IiIiICUgYXJncykKLQot
ICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGludCBmb3VuZFByb3BlcnRp
ZXNDb3VudCA9ICVzOycgJSBsZW4ocmVxdWlyZWRfbWVtYmVycykpCi0KLSAgICAgICAgZm9yIHR5
cGVfbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6Ci0gICAgICAgICAgICBhcmdzID0gewotICAg
ICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCi0gICAg
ICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IEdlbmVyYXRvci5hc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKLSAgICAgICAgSW5zcGVj
dG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJ
SUxpdGVyYWwoIiUobWVtYmVyTmFtZSlzIikpOwotICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQ
b3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1l
bWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOyIiIiAlIGFyZ3MpCi0KLSAgICAgICAgICAgIGlm
IHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsnKQotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIH0nKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0K
LSAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpJykK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9w
ZXJ0aWVzIGluIG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHNlbGYsIGVu
dW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIEdlbmVy
YXRvci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgU3RyaW5nIHJlc3VsdDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykKLQotICAgICAgICBhc3Nl
cnRfY29uZGl0aW9uID0gJyB8fCAnLmpvaW4oWydyZXN1bHQgPT0gIiVzIicgJSBlbnVtX3ZhbHVl
IGZvciBlbnVtX3ZhbHVlIGluIGVudW1fbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVCglcyk7JyAlIGFzc2VydF9jb25kaXRpb24pCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8v
ICFBU1NFUlRfRElTQUJMRUQnKQotCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOGQ0YTVkYWU3MDI1NmFhYzY4OTdiYjMxNjNkNWNh
NmVmYmVjZjY1Zi4uNDQ0NTBmY2Q0NWE4MDRiYzUyZmNjMzUxN2MzZWZjMGVkYmE1MGEyMCAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtMzgsMTUgKzM4LDYgQEAgbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCiBkZWYgdWNmaXJzdChzdHIpOgogICAgIHJldHVybiBzdHJbOjFd
LnVwcGVyKCkgKyBzdHJbMTpdCiAKLV9QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQID0gewotICAg
ICdib29sZWFuJzogJ2Jvb2wnLAotICAgICdpbnRlZ2VyJzogJ2ludCcsCi0gICAgJ251bWJlcic6
ICdkb3VibGUnLAotICAgICdzdHJpbmcnOiAnU3RyaW5nJywKLSAgICAnb2JqZWN0JzogJ0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKLSAgICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUnCi19Ci0KIF9BTFdBWVNfVVBQRVJDQVNFRF9FTlVNX1ZBTFVFX1NVQlNUUklOR1MgPSBz
ZXQoWydBUEknLCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUicsICdYTUwnXSkKIAogIyBUaGVz
ZSBvYmplY3RzIGFyZSBidWlsdCBtYW51YWxseSBieSBjcmVhdGluZyBhbmQgc2V0dGluZyBJbnNw
ZWN0b3JWYWx1ZXMuCkBAIC0yMzEsMjQ5ICsyMjIsNiBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAg
ICAgIHJldHVybiByZS5zdWIocmUuY29tcGlsZShyZWdleCwgcmUuSUdOT1JFQ0FTRSksIHJlcGxh
Y2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcykpCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0Jwot
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0
dXJuICdnZXRBcnJheScKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlw
ZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdpbnRlZ2VyJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ2dldEludGVnZXInCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJh
d19uYW1lKCkgaXMgJ251bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXREb3VibGUn
Ci0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ2FueSc6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdnZXRWYWx1ZScKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJh
dG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gR2Vu
ZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3R5
cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAg
ICAgIHJldHVybiAnc2V0T2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJh
eVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFt
ZSgpIGlzICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldEludGVnZXInCi0g
ICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaXMgJ251bWJlcic6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdzZXREb3VibGUnCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1l
KCkgaXMgJ2FueSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdChfdHlwZS5y
YXdfbmFtZSgpKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0g
ICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3R5
cGUuYWxpYXNlZF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6
Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUo
X3R5cGUucHJpbWl0aXZlX3R5cGUpCi0KLSAgICAjIEdlbmVyYXRlIHR5cGUgcmVwcmVzZW50YXRp
b25zIGZvciB2YXJpb3VzIHNpdHVhdGlvbnMuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBw
cm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVtYmVycykgPT0gMDoKLSAgICAg
ICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUpKToKLSAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5n
X2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
cHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3Rf
ZGVjbGFyYXRpb24pOgotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICBy
ZXR1cm4gJzo6Jy5qb2luKFtHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUo
b2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
KV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnByb3RvY29s
X3R5cGVfc3RyaW5nX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0gICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5
cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2ZS4KLQot
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlw
ZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCi0K
LSAgICAgICAgc2lnaWwgPSAnKicgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJyYnCi0g
ICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGggZGVm
aW5lZCBwcm9wZXJ0aWVzLgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdvYmplY3QnOgotICAgICAgICAgICAgcmV0
dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JyArIHNpZ2lsCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PicgKyBzaWdpbAotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNw
cF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFt
ZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
Y3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCi0KLSAgICAgICAgcmV0dXJuICJ1bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1l
dGVyX3R5cGUiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9j
aGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUs
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIobWVtYmVy
KToKLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25h
bWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJfbmFtZSwgRmFsc2UpCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlw
ZV9uYW1lLCBpc19vcHRpb25hbCk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJh
eVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjwlcz4n
ICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVy
X3R5cGUgPSBHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCi0g
ICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKiBjb25zdCcgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNl
ZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAg
ICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90
eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0ICVzJicgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zv
cl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgaW4gWydvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JwotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JwotICAgICAgICAgICAgZWxpZiBpc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFt
ZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255
bW91czoKLSAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1l
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJ
bnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWlu
X25hbWUsIF90eXBlLnJhd19uYW1lKCkpCi0KLSAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVudW1fdHlwZV9uYW1lCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMnICUgZW51bV90eXBlX25hbWUKLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFy
YW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKLQotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlw
ZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0
dXJuICdSZWZQdHI8JXM+JicgJSBHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5
cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgot
ICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PCVzPioiICUg
Y3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcyon
ICUgY3BwX25hbWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIHJldHVybiAn
SW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzKicgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJv
dG9jb2w6OiVzOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBl
LnJhd19uYW1lKCkpCi0KLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBmb3JtYWwg
b3V0IHBhcmFtZXRlciB0eXBlLiIpCi0KLSAgICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xpZ2h0
bHkgZGlmZmVyZW50IGZyb20gb3V0IHBhcmFtZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmllZC4K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5bmNf
cGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKLSAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJp
bWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUGFzc1Jl
ZlB0cjwlcz4nICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBl
KQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAg
ICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1l
Ci0gICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywg
J251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYn
ICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNw
cF9uYW1lCi0KLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBmb3JtYWwgYXN5bmMg
cGFyYW1ldGVyIHR5cGUuIikKLQotICAgICMgSW4tcGFyYW1ldGVycyBkb24ndCB1c2UgYnVpbGRl
ciB0eXBlcywgYmVjYXVzZSB0aGV5IGNvdWxkIGJlIHBhc3NlZAotICAgICMgIm9wZW4gdHlwZXMi
IHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0cnVjdGVkIG91dCBvZiBJbnNwZWN0b3JPYmplY3RzLgot
Ci0gICAgIyBGSVhNRTogT25seSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFjdHVhbGx5IG9wZW4gdHlw
ZXMgc2hvdWxkIG5lZWQgbm9uLWJ1aWxkZXIgcGFyYW1ldGVyIHR5cGVzLgotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0
ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0gICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZh
bGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiIK
LSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJl
dHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IgotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gR2Vu
ZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlm
IF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBh
bmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmluZycsICdp
bnRlZ2VyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB0eXBlX3N0
cmluZ19mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9
IHBhcmFtZXRlci50eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUs
IE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBHZW5lcmF0
b3IucHJvdG9jb2xfdHlwZV9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdl
bmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDwlcz4iICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAg
ICByZXR1cm4gJyVzJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDwlcz4iICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJ0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAoX3R5
cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3Bl
Y3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgX3R5cGUucmF3X25hbWUoKSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYXNzZXJ0
aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlv
bik6Ci0KLSAgICAgICAgZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgotICAg
ICAgICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUnICUgR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQot
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgQWxpYXNlZFR5cGUpOgot
ICAgICAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIu
dHlwZS5hbGlhc2VkX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
JyAlIEdlbmVyYXRvci5wcm90b2NvbF90eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKLQotICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4g
X1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJhd19uYW1lKCkpCi0KLSAgICBA
c3RhdGljbWV0aG9kCiAgICAgZGVmIGpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBlKF90eXBlKToK
ICAgICAgICAgX3R5cGUgPSBfdHlwZQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6CkBAIC00OTAsMTIgKzIzOCwzIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAg
ICAgICAgICByZXR1cm4gJ251bWJlcicKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIF90eXBlLnF1YWxpZmllZF9uYW1lKCkKLQotICAgICMgRGVjaWRlIHdoZXRoZXIg
Y2VydGFpbiBoZWxwZXJzIGFyZSBuZWNlc3NhcnkgaW4gYSBzaXR1YXRpb24uCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKF90eXBl
KToKLSAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29w
eV9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlw
ZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0
aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBt
b2RlIDEwMDY0NAppbmRleCBmM2QxZjI5YmNmYTA1OTQ2OGQwZDZjYTRlOWJjNWQ2Y2MxZmVlOWI0
Li5mMmUzMzBhNzI4OTI2ODk2YjZhMmY4ZTE2MjQ4ZGZmYTM4MWY4OGI4Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtNTksMzc0ICs1OSwzIEBAIGNsYXNzIEdlbmVy
YXRvclRlbXBsYXRlczoKIAogLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tICR7aW5wdXRGaWxlbmFtZX0KIC8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkiIiIpCi0KLSAgICBDcHBIZWFkZXJQcmVsdWRlID0gKAot
ICAgICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KLSNkZWZpbmUgJHtoZWFkZXJHdWFy
ZFN0cmluZ30KLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSR7aW5jbHVkZXN9Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0ke3R5cGVkZWZzfSIiIikKLQotICAgIENwcEhlYWRlclBvc3Rs
dWRlID0gKAotICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKLQotI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9
KSIiIikKLQotICAgIENwcEltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKLSAgICAiIiIjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAke3ByaW1hcnlJbmNsdWRlfQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLQotJHtzZWNvbmRhcnlJbmNsdWRlc30KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
IiIiKQotCi0gICAgQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKLSAgICAiIiJ9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0iIiIpCi0K
LSAgICBBbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUgPSAoCi0gICAgIiIiI2lmbmRl
ZiAke2hlYWRlckd1YXJkU3RyaW5nfQotI2RlZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSR7aW5jbHVkZXN9
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOyB9Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotIiIiKQotCi0gICAgQWx0ZXJuYXRlRGlz
cGF0Y2hlcnNIZWFkZXJQb3N0bHVkZSA9ICgKLSAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Ci0jZW5kaWYgLy8gIWRlZmluZWQoJHtoZWFkZXJHdWFyZFN0cmluZ30pIiIiKQotCi0gICAgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFy
YXRpb24gPSAoCi0gICAgIiIiY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSR7Y29tbWFuZERlY2xhcmF0aW9uc30KLX07IiIi
KQotCi0gICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24g
PSAoCi0gICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSR7Y29tbWFuZERlY2xhcmF0aW9u
c30KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5JbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OyIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKAotICAgICIiIiR7Y2xhc3NBbmRFeHBv
cnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3Zl
cnJpZGU7Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9Ci1wcml2YXRlOgotICAgIEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IG1fYWdlbnQ7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgot
ICAgIEFsdGVybmF0ZUluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogbV9h
bHRlcm5hdGVEaXNwYXRjaGVyOwotI2VuZGlmCi19OyIiIikKLQotICAgIEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCi0gICAgIiIiICAgICR7Y2xhc3NB
bmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICAke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFt
ZXRlcnN9KTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFy
YW1ldGVyc30pID0gMDsiIiIpCi0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
U21hbGxTd2l0Y2ggPSAoCi0gICAgIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCi17Ci0gICAgUmVmPEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSR7ZGlz
cGF0Y2hDYXNlc30KLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcXCcnLCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9k
LCAiJyB3YXMgbm90IGZvdW5kIikpOwotfSIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25MYXJnZVN3aXRjaCA9ICgKLSIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQotewotICAgIFJlZjxJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwot
Ci0gICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj4gRGlzcGF0Y2hNYXA7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKERpc3Bh
dGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwotICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lOwotICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKLSAg
ICAgICAgfSBjb21tYW5kc1tdID0gewotJHtkaXNwYXRjaENhc2VzfQotICAgICAgICB9OwotICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7Ci0gICAgfQot
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRj
aE1hcC5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdc
XCcnLCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElk
LCAqbWVzc2FnZS5nZXQoKSk7Ci19IiIiKQotCi0gICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yID0gKAotICAgICIiIlBhc3NSZWZQdHI8SW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1J
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgICwgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
KG51bGxwdHIpCi0jZW5kaWYKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIHRoaXMpOwot
fSIiIikKLQotICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFu
ZEFyZ3VtZW50cyA9ICgKLSIiIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIikpOwotICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwotJHtpblBhcmFtZXRlckRlY2xhcmF0aW9uc30KLSAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwnJXNcJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfSIpOwotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0iIiIpCi0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kID0gKAotIiIiSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05h
bWV9Ojoke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4gYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KLQot
dm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2Nh
bGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Zm9ybWFsUGFyYW1ldGVyc30pCi17Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotJHtvdXRQYXJhbWV0ZXJBc3NpZ25tZW50c30KLSAgICBzZW5kSWZBY3RpdmUoanNvbk1l
c3NhZ2UsIEVycm9yU3RyaW5nKCkpOwotfSIiIikKLQotICAgIEZyb250ZW5kRGlzcGF0Y2hlckRv
bWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKLSIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30g
SW5zcGVjdG9yJHtkb21haW5OYW1lfUZyb250ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
SW5zcGVjdG9yJHtkb21haW5OYW1lfUZyb250ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQotJHtldmVudERlY2xhcmF0aW9u
c30KLXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKLX07IiIiKQotCi0gICAgUHJvdG9jb2xPYmplY3RCdWlsZGVyRGVjbGFy
YXRpb25QcmVsdWRlID0gKAotIiIiICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBC
dWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKiR7b2JqZWN0VHlwZX0qL0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzICR7b2JqZWN0VHlwZX07Ci0gICAgcHVibGljOiIiIikKLQotICAgIFBy
b3RvY29sT2JqZWN0QnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUgPSAoCi0iIiIKLSAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPCR7b2JqZWN0VHlwZX0+JiAoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09
IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JHtvYmplY3RUeXBlfT4qPigm
bV9yZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGFzc1JlZlB0cjwke29iamVjdFR5cGV9
PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjwke29iamVj
dFR5cGV9PigqdGhpcykucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0g
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotJHtjb25zdHJ1Y3RvckV4YW1wbGV9Ci0gICAg
ICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0gICAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpT
dHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7IiIiKQotCi0gICAgUHJvdG9jb2xPYmplY3RSdW50
aW1lQ2FzdCA9ICgKLSIiIlBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwk
e29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiB2YWx1ZSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0
KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwotI2VuZGlmICAvLyAhQVNTRVJU
X0RJU0FCTEVECi0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKLX0KLSIiIikKLQot
ICAgIE9iakNIZWFkZXJQcmVsdWRlID0gKAotICAgICIiIiNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0ke2luY2x1ZGVzfQotIiIiKQotCi0gICAgT2JqQ0hlYWRlclBvc3RsdWRl
ID0gKAotICAgICIiIiIiIikKLQotICAgIE9iakNDb252ZXJzaW9uSGVscGVyc1ByZWx1ZGUgPSAo
Ci0gICAgIiIiJHtpbmNsdWRlc30KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQotCi0gICAg
T2JqQ0NvbnZlcnNpb25IZWxwZXJzUG9zdGx1ZGUgPSAoCi0gICAgIiIifSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0iIiIpCi0KLSAgICBPYmpDR2VuZXJpY0hlYWRlclByZWx1ZGUgPSAoCi0gICAg
IiIiJHtpbmNsdWRlc30iIiIpCi0KLSAgICBPYmpDR2VuZXJpY0hlYWRlclBvc3RsdWRlID0gKAot
ICAgICIiIiIiIikKLQotICAgIE9iakNDb252ZXJzaW9uSGVscGVyc1N0YW5kYXJkID0gKAotICAg
ICIiInRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJv
dG9jb2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsiIiIpCi0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJQcmVsdWRlID0gKAotICAgICIiIiR7aW5jbHVkZXN9Ci0KLSR7Zm9yd2FyZERlY2xh
cmF0aW9uc30KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0iIiIpCi0KLSAgICBPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJQb3N0bHVkZSA9ICgKLSAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSIiIikKLQotICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJl
bHVkZSA9ICgKLSAgICAiIiIjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgJHtwcmltYXJ5SW5j
bHVkZX0KLQotJHtzZWNvbmRhcnlJbmNsdWRlc30KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7IiIi
KQotCi0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgK
LSAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSIiIikKLQotICAgIE9iakNJbXBsZW1l
bnRhdGlvblByZWx1ZGUgPSAoCi0gICAgIiIiI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICR7
cHJpbWFyeUluY2x1ZGV9Ci0KLSR7c2Vjb25kYXJ5SW5jbHVkZXN9Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7IiIiKQotCi0gICAgT2JqQ0ltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCi0g
ICAgIiIiIiIiKQotCi0gICAgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ckludGVyZmFjZURlY2xhcmF0aW9uID0gKAotICAgICIiImNsYXNzIEFsdGVybmF0ZUluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0ke2NvbW1hbmREZWNs
YXJhdGlvbnN9Ci19OyIiIikKLQotICAgIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFp
bkhhbmRsZXJPYmpDRGVjbGFyYXRpb24gPSAoCi0gICAgIiIiY2xhc3MgT2JqQ0luc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIE9iakNJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoaWQ8JHtvYmpjUHJlZml4fSR7
ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVy
OyB9Ci0ke2NvbW1hbmREZWNsYXJhdGlvbnN9Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDwk
e29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsi
IiIpCi0KLSAgICBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVt
ZW50YXRpb24gPSAoCi0gICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQotewotICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBl
cnJvcik7Ci0gICAgfTsKLQotJHtzdWNjZXNzQ2FsbGJhY2t9Ci0ke2NvbnZlcnNpb25zfQotJHtp
bnZvY2F0aW9ufQotfQotIiIiKQotCi0gICAgT2JqQ0NvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVy
dHkgPSAoCi0gICAgIiIiQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldCR7
ZG9tYWluTmFtZX1IYW5kbGVyOikgaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5I
YW5kbGVyPiAke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOyIiIikKLQotICAgIE9iakNDb25m
aWd1cmF0aW9uRXZlbnRQcm9wZXJ0eSA9ICgKLSAgICAiIiJAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpICR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVy
ICoke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXI7IiIiKQotCi0gICAgT2JqQ0Nv
bmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbiA9ICgKLSAgICAiIiItICh2
b2lkKXNldCR7ZG9tYWluTmFtZX1IYW5kbGVyOihpZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1l
fURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfJHt2YXJpYWJs
ZU5hbWVQcmVmaXh9SGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW18ke3ZhcmlhYmxl
TmFtZVByZWZpeH1IYW5kbGVyIHJlbGVhc2VdOwotICAgIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1I
YW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91
bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIiR7ZG9tYWluTmFtZX0iKSwgV1RGOjptb3ZlKGFsdGVy
bmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEY6
Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWlu
TmFtZX1Eb21haW5IYW5kbGVyPikke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyCi17Ci0gICAg
cmV0dXJuIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOwotfSIiIikKLQotICAgIE9iakND
b25maWd1cmF0aW9uR2V0dGVySW1wbGVtZW50YXRpb24gPSAoCi0gICAgIiIiLSAoJHtvYmpjUHJl
Zml4fSR7ZG9tYWluTmFtZX1Eb21haW5FdmVudERpc3BhdGNoZXIgKikke3ZhcmlhYmxlTmFtZVBy
ZWZpeH1FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV8ke3ZhcmlhYmxlTmFtZVByZWZpeH1F
dmVudERpc3BhdGNoZXIpCi0gICAgICAgIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3Bh
dGNoZXIgPSBbWyR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfJHt2
YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyOwotfSIiIikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJh
dG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
b2JqY19nZW5lcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhhOWE5ZmJhNjQxNDAxYjhkODcxNDkwZGM1
MGY3MTUzMTk5YmJlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsNTE1
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKKworbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIGpvaW5fdHlwZV9hbmRfbmFtZSh0
eXBlX3N0ciwgbmFtZV9zdHIpOgorICAgIGlmIHR5cGVfc3RyLmVuZHN3aXRoKCcqJyk6CisgICAg
ICAgIHJldHVybiB0eXBlX3N0ciArIG5hbWVfc3RyCisgICAgcmV0dXJuIHR5cGVfc3RyICsgJyAn
ICsgbmFtZV9zdHIKKworCitkZWYgc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKHN0cik6Cisg
ICAgcmV0dXJuIHN0ci5yZXBsYWNlKCcvKicsICcnKS5yZXBsYWNlKCcqLycsICcnKQorCisKK2Rl
ZiByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKHN0ciwgcG9zc2libGVfZHVwbGljYXRlKToKKyAg
ICByZXR1cm4gc3RyLnJlcGxhY2UocG9zc2libGVfZHVwbGljYXRlICsgcG9zc2libGVfZHVwbGlj
YXRlLCBwb3NzaWJsZV9kdXBsaWNhdGUpCisKKworX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQ
ID0geworICAgICd0aGlzJzogJ3RoaXNPYmplY3QnLCAgIyBEZWJ1Z2dlci5DYWxsRnJhbWUudGhp
cworICAgICdkZXNjcmlwdGlvbic6ICdzdHJpbmdSZXByZXNlbnRhdGlvbicsICAjIFJ1bnRpbWUu
UmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uCisgICAgJ2lkJzogJ2lkZW50aWZpZXInLCAgIyBQYWdl
LkZyYW1lLmlkLCBSdW50aW1lLkV4ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbi5pZCwgRGVidWdn
ZXIuQnJlYWtwb2ludEFjdGlvbi5pZAorfQorCitfT0JKQ19JREVOVElGSUVSX1JFVkVSU0VfUkVO
QU1FX01BUCA9IGRpY3QoKHYsIGspIGZvciBrLCB2IGluIF9PQkpDX0lERU5USUZJRVJfUkVOQU1F
X01BUC5pdGVyaXRlbXMoKSkKKworCitjbGFzcyBPYmpDVHlwZUNhdGVnb3J5OgorICAgIFNpbXBs
ZSA9IDAKKyAgICBTdHJpbmcgPSAxCisgICAgT2JqZWN0ID0gMgorICAgIEFycmF5ID0gMworCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYXRlZ29yeV9mb3JfdHlwZShfdHlwZSk6CisgICAg
ICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICBp
ZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdzdHJpbmcnOgorICAgICAgICAgICAgICAgIHJldHVybiBP
YmpDVHlwZUNhdGVnb3J5LlN0cmluZworICAgICAgICAgICAgaWYgIF90eXBlLnJhd19uYW1lKCkg
aW4gWydvYmplY3QnLCAnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0
ZWdvcnkuT2JqZWN0CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdhcnJheSc6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXkKKyAgICAgICAg
ICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LlNpbXBsZQorICAgICAgICBpZiAoaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBlQ2F0ZWdv
cnkuT2JqZWN0CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAg
ICAgICAgICAgIHJldHVybiBPYmpDVHlwZUNhdGVnb3J5LkFycmF5CisgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNUeXBl
Q2F0ZWdvcnkuY2F0ZWdvcnlfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiBPYmpD
VHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAg
ICAgICByZXR1cm4gTm9uZQorCisKKworIyBUaGlzIGNsYXNzIGNvbnRhaW5zIGV4dHJhIHN0YXRp
YyBtZXRob2RzIHVzZWQgZm9yIGdlbmVyYXRpb24sIGJ1dCBkb2VzCisjIG5vdCBwYXJ0aWNpcGF0
ZSBpbiBhbnkgaW5oZXJpdGFuY2UgaGllcmFyY2h5LiBGaWxlIGdlbmVyYXRvcnMgc2hvdWxkCisj
IGV4dGVuZCB0aGUgZ2VuZXJpYyAiR2VuZXJhdG9yIiBjbGFzcyBpbnN0ZWFkLgorY2xhc3MgT2Jq
Q0dlbmVyYXRvcjoKKyAgICBPQkpDX1BSRUZJWCA9ICdSV0lQcm90b2NvbCcKKyAgICBPQkpDX0pT
T05fT0JKRUNUX0JBU0UgPSAnJXNKU09OT2JqZWN0JyAlIE9CSkNfUFJFRklYCisKKyAgICAjIEFk
anVzdCBpZGVudGlmaWVyIG5hbWVzIHRoYXQgY29sbGlkZSB3aXRoIE9iakMga2V5d29yZHMuCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVy
KG5hbWUpOgorICAgICAgICByZXR1cm4gX09CSkNfSURFTlRJRklFUl9SRU5BTUVfTUFQLmdldChu
YW1lLCBuYW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2lkZW50aWZpZXJf
dG9faWRlbnRpZmllcihuYW1lKToKKyAgICAgICAgcmV0dXJuIF9PQkpDX0lERU5USUZJRVJfUkVW
RVJTRV9SRU5BTUVfTUFQLmdldChuYW1lLCBuYW1lKQorCisgICAgIyBHZW5lcmF0ZSBPYmpDIHR5
cGVzLCBjb21tYW5kIGhhbmRsZXJzLCBhbmQgZXZlbnQgZGlzcGF0Y2hlcnMgZm9yIGEgc3Vic2V0
IG9mIGRvbWFpbnMuCisKKyAgICBET01BSU5TX1RPX0dFTkVSQVRFID0gWydDU1MnLCAnRE9NJywg
J0RPTVN0b3JhZ2UnLCAnTmV0d29yaycsICdQYWdlJ10KKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIobW9kZWwpOgorICAgICAg
ICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlcyhkb21haW4pOgorICAgICAgICAgICAg
aWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9N
QUlOU19UT19HRU5FUkFURSkKKyAgICAgICAgICAgIHdoaXRlbGlzdC51cGRhdGUoc2V0KFsnQ29u
c29sZScsICdEZWJ1Z2dlcicsICdSdW50aW1lJ10pKQorICAgICAgICAgICAgcmV0dXJuIGRvbWFp
bi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKKyAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0
ZV9kb21haW5fdHlwZXMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKG1vZGVsKToKKyAgICAgICAgZGVmIHNo
b3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyKGRvbWFpbik6CisgICAgICAgICAg
ICBpZiBtb2RlbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5E
T01BSU5TX1RPX0dFTkVSQVRFKQorICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFt
ZSBpbiB3aGl0ZWxpc3QKKyAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29t
bWFuZF9oYW5kbGVyCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9nZW5lcmF0
ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIobW9kZWwpOgorICAgICAgICBkZWYgc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyKGRvbWFpbik6CisgICAgICAgICAg
ICBpZiBtb2RlbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5E
T01BSU5TX1RPX0dFTkVSQVRFKQorICAgICAgICAgICAgd2hpdGVsaXN0LmFkZCgnQ29uc29sZScp
CisgICAgICAgICAgICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGluIHdoaXRlbGlzdAorICAg
ICAgICByZXR1cm4gc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyCisKKyAg
ICAjIE9iakMgZW51bSBhbmQgdHlwZSBuYW1lcy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgb2JqY19uYW1lX2Zvcl90eXBlKHR5cGUpOgorICAgICAgICBuYW1lID0gdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpLnJlcGxhY2UoJy4nLCAnJykKKyAgICAgICAgbmFtZSA9IHJlbW92ZV9kdXBsaWNh
dGVfZnJvbV9zdHIobmFtZSwgdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lKQorICAgICAg
ICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51
bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZGVjbGFy
YXRpb24udHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lCisgICAgICAgIG5hbWUgPSAnJXMl
cycgJSAoZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSkKKyAgICAgICAg
bmFtZSA9IHJlbW92ZV9kdXBsaWNhdGVfZnJvbV9zdHIobmFtZSwgZG9tYWluX25hbWUpCisgICAg
ICAgIHJldHVybiAnJXMlcycgJSAoT2JqQ0dlbmVyYXRvci5PQkpDX1BSRUZJWCwgbmFtZSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19l
bnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBt
ZW1iZXIudHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lCisgICAgICAgIG5hbWUgPSAnJXMl
cyVzJyAlIChkb21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0
KG1lbWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zy
b21fc3RyKG5hbWUsIGRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNH
ZW5lcmF0b3IuT0JKQ19QUkVGSVgsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IG9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVu
dF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6CisgICAgICAgIGRvbWFpbl9uYW1lID0gZG9t
YWluLmRvbWFpbl9uYW1lCisgICAgICAgIG5hbWUgPSAnJXMlcyVzJyAlIChkb21haW5fbmFtZSwg
dWNmaXJzdChldmVudF9vcl9jb21tYW5kX25hbWUpLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgIG5hbWUgPSByZW1vdmVfZHVwbGljYXRlX2Zyb21fc3RyKG5hbWUs
IGRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gJyVzJXMnICUgKE9iakNHZW5lcmF0b3IuT0JK
Q19QUkVGSVgsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfZW51bV9u
YW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5cGUpOgorICAgICAgICBkb21haW5fbmFtZSA9
IF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUKKyAgICAgICAgbmFtZSA9IF90eXBlLnF1
YWxpZmllZF9uYW1lKCkucmVwbGFjZSgnLicsICcnKQorICAgICAgICBuYW1lID0gcmVtb3ZlX2R1
cGxpY2F0ZV9mcm9tX3N0cihuYW1lLCBkb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuICclcyVz
JyAlIChPYmpDR2VuZXJhdG9yLk9CSkNfUFJFRklYLCBuYW1lKQorCisgICAgIyBNaXNjZWxsYW5l
b3VzIG5hbWUgaGFuZGxpbmcuCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHZhcmlhYmxl
X25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgZG9tYWluX25hbWUgPSBk
b21haW4uZG9tYWluX25hbWUKKyAgICAgICAgaWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnRE9N
Jyk6CisgICAgICAgICAgICByZXR1cm4gJ2RvbScgKyBkb21haW5fbmFtZVszOl0KKyAgICAgICAg
aWYgZG9tYWluX25hbWUuc3RhcnRzd2l0aCgnQ1NTJyk6CisgICAgICAgICAgICByZXR1cm4gJ2Nz
cycgKyBkb21haW5fbmFtZVszOl0KKyAgICAgICAgcmV0dXJuIGRvbWFpbl9uYW1lWzoxXS5sb3dl
cigpICsgZG9tYWluX25hbWVbMTpdCisKKyAgICAjIFR5cGUgYmFzaWNzLgorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBvYmpjX2FjY2Vzc29yX3R5cGVfZm9yX3Jhd19uYW1lKHJhd19uYW1l
KToKKyAgICAgICAgaWYgcmF3X25hbWUgaW4gWydzdHJpbmcnLCAnYXJyYXknXToKKyAgICAgICAg
ICAgIHJldHVybiAnY29weScKKyAgICAgICAgaWYgcmF3X25hbWUgaW4gWydpbnRlZ2VyJywgJ251
bWJlcicsICdib29sZWFuJ106CisgICAgICAgICAgICByZXR1cm4gJ2Fzc2lnbicKKyAgICAgICAg
aWYgcmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4gJ3Jl
dGFpbicKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
b2JqY190eXBlX2Zvcl9yYXdfbmFtZShyYXdfbmFtZSk6CisgICAgICAgIGlmIHJhd19uYW1lIGlz
ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdOU1N0cmluZyAqJworICAgICAgICBpZiBy
YXdfbmFtZSBpcyAnYXJyYXknOgorICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5IConCisgICAg
ICAgIGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgIHJldHVybiAnaW50Jwor
ICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVtYmVyJzoKKyAgICAgICAgICAgIHJldHVybiAnZG91
YmxlJworICAgICAgICBpZiByYXdfbmFtZSBpcyAnYm9vbGVhbic6CisgICAgICAgICAgICByZXR1
cm4gJ0JPT0wnCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29iamVjdCddOgorICAg
ICAgICAgICAgcmV0dXJuICclcyAqJyAlIE9iakNHZW5lcmF0b3IuT0JKQ19KU09OX09CSkVDVF9C
QVNFCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfY2xhc3NfZm9yX3Jhd19uYW1lKHJhd19uYW1lKToKKyAgICAgICAgaWYgcmF3X25hbWUgaXMg
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ05TU3RyaW5nJworICAgICAgICBpZiByYXdf
bmFtZSBpcyAnYXJyYXknOgorICAgICAgICAgICAgcmV0dXJuICdOU0FycmF5JworICAgICAgICBp
ZiByYXdfbmFtZSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXToKKyAgICAgICAg
ICAgIHJldHVybiAnTlNOdW1iZXInCisgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29i
amVjdCddOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3IuT0JKQ19KU09OX09CSkVD
VF9CQVNFCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIEZJWE1FOiBDYW4gdGhlc2UgcHJv
dG9jb2xfdHlwZSBmdW5jdGlvbnMgYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiBDKysgZ2VuZXJhdG9y
cyBmdW5jdGlvbnM/CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb3RvY29sX3R5cGVf
Zm9yX3Jhd19uYW1lKHJhd19uYW1lKToKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ3N0cmluZyc6
CisgICAgICAgICAgICByZXR1cm4gJ1N0cmluZycKKyAgICAgICAgaWYgcmF3X25hbWUgaXMgJ2lu
dGVnZXInOgorICAgICAgICAgICAgcmV0dXJuICdpbnQnCisgICAgICAgIGlmIHJhd19uYW1lIGlz
ICdudW1iZXInOgorICAgICAgICAgICAgcmV0dXJuICdkb3VibGUnCisgICAgICAgIGlmIHJhd19u
YW1lIGlzICdib29sZWFuJzoKKyAgICAgICAgICAgIHJldHVybiAnYm9vbCcKKyAgICAgICAgaWYg
cmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4gJ0luc3Bl
Y3Rvck9iamVjdCcKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToK
KyAgICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3Jhd19u
YW1lKF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9m
b3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2Nv
bDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdf
bmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAg
ICAgICAgICBzdWJfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PCVzPicgJSBzdWJfdHlwZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBpc190eXBlX29iamNfcG9pbnRlcl90eXBlKF90eXBlKToKKyAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIF90eXBlLnJhd19uYW1lKCkgaW4g
WydzdHJpbmcnLCAnYXJyYXknLCAnYW55JywgJ29iamVjdCddCisgICAgICAgIGlmIChpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
IGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBvYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgKGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkp
OgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19jbGFzc19mb3JfcmF3X25h
bWUoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl9y
YXdfbmFtZShfdHlwZS5wcmltaXRpdmVfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNp
bnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5l
cmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShf
dHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICBzdWJfdHlwZSA9IHN0cmlwX2Jsb2NrX2Nv
bW1lbnRfbWFya2VycyhPYmpDR2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUoX3R5cGUuZWxl
bWVudF90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiAnTlNBcnJheS8qPCVzPiovJyAlIHN1Yl90
eXBlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyKG1lbWJlcik6CisgICAgICAgIHJldHVybiBPYmpD
R2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfbWVtYmVyX2ludGVybmFsKG1lbWJlci50
eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX2FjY2Vzc29yX3R5cGVfZm9y
X21lbWJlcl9pbnRlcm5hbChfdHlwZSk6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAg
IHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfYWNjZXNzb3JfdHlwZV9mb3JfcmF3X25hbWUoX3R5
cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6
CisgICAgICAgICAgICByZXR1cm4gJ2Fzc2lnbicKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5
cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAncmV0YWluJworICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ2Nv
cHknCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9i
amNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4g
T2JqQ0dlbmVyYXRvci5vYmpjX3R5cGVfZm9yX21lbWJlcl9pbnRlcm5hbChtZW1iZXIudHlwZSwg
ZGVjbGFyYXRpb24sIG1lbWJlcikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY190
eXBlX2Zvcl9tZW1iZXJfaW50ZXJuYWwoX3R5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAg
ICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3R5
cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIChpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgaWYgKF90eXBlLmlzX2Fub255bW91cyk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9y
X2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJhdGlvbiwgbWVtYmVyKQorICAgICAgICAgICAg
cmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51
bShfdHlwZSkKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAg
ICAgICAgICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkg
KyAnIConCisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAg
ICAgICAgIHN1Yl90eXBlID0gc3RyaXBfYmxvY2tfY29tbWVudF9tYXJrZXJzKE9iakNHZW5lcmF0
b3Iub2JqY19jbGFzc19mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpKQorICAgICAgICAgICAg
cmV0dXJuICdOU0FycmF5Lyo8JXM+Ki8gKicgJSBzdWJfdHlwZQorICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFp
biwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIHJlc3BlY3Rfb3B0aW9uYWw9VHJ1
ZSk6CisgICAgICAgIG9iamNfdHlwZSA9IE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9wYXJh
bV9pbnRlcm5hbChwYXJhbWV0ZXIudHlwZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUs
IHBhcmFtZXRlcikKKyAgICAgICAgaWYgcmVzcGVjdF9vcHRpb25hbCBhbmQgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICAgICAgaWYgb2JqY190eXBlLmVuZHN3aXRoKCcqJyk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG9iamNfdHlwZSArICcqJworICAgICAgICAgICAgcmV0dXJuIG9i
amNfdHlwZSArICcgKicKKyAgICAgICAgcmV0dXJuIG9iamNfdHlwZQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBvYmpjX3R5cGVfZm9yX3BhcmFtX2ludGVybmFsKF90eXBlLCBkb21haW4s
IGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKKyAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgor
ICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY190eXBlX2Zvcl9yYXdfbmFtZShf
dHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
KToKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFy
YW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCisgICAgICAg
ICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91
c19lbnVtKF90eXBlKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkp
OgorICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19uYW1lX2Zvcl90eXBlKF90
eXBlKSArICcgKicKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkpOgor
ICAgICAgICAgICAgc3ViX3R5cGUgPSBzdHJpcF9ibG9ja19jb21tZW50X21hcmtlcnMoT2JqQ0dl
bmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gJ05TQXJyYXkvKjwlcz4qLyAqJyAlIHN1Yl90eXBlCisgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAjIE9iakMgPC0+IFByb3RvY29sIGNvbnZlcnNpb24gZm9yIGNvbW1hbmRz
IGFuZCBldmVudHMuCisgICAgIyAgIC0gY29udmVydCBhIGNvbW1hbmQgY2FsbCBwYXJhbWV0ZXIg
cmVjZWl2ZWQgZnJvbSBQcm90b2NvbCB0byBPYmpDIGZvciBoYW5kbGVyCisgICAgIyAgIC0gY29u
dmVydCBhIGNvbW1hbmQgcmV0dXJuIHBhcmFtZXRlciBpbiBjYWxsYmFjayBibG9jayBmcm9tIE9i
akMgdG8gUHJvdG9jb2wgdG8gc2VuZAorICAgICMgICAtIGNvbnZlcnQgYW4gZXZlbnQgcGFyYW1l
dGVyIGZyb20gT2JqQyBBUEkgdG8gUHJvdG9jb2wgdG8gc2VuZAorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBvYmpjX3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZSh2
YXJfdHlwZSwgdmFyX25hbWUpOgorICAgICAgICBjYXRlZ29yeSA9IE9iakNUeXBlQ2F0ZWdvcnku
Y2F0ZWdvcnlfZm9yX3R5cGUodmFyX3R5cGUpCisgICAgICAgIGlmIGNhdGVnb3J5IGluIFtPYmpD
VHlwZUNhdGVnb3J5LlNpbXBsZSwgT2JqQ1R5cGVDYXRlZ29yeS5TdHJpbmddOgorICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZSh2YXJfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHJl
dHVybiAndG9Qcm90b2NvbFN0cmluZyglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIHJldHVy
biB2YXJfbmFtZQorICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5Lk9iamVj
dDoKKyAgICAgICAgICAgIHJldHVybiAnWyVzIHRvSW5zcGVjdG9yT2JqZWN0XScgJSB2YXJfbmFt
ZQorICAgICAgICBpZiBjYXRlZ29yeSBpcyBPYmpDVHlwZUNhdGVnb3J5LkFycmF5OgorICAgICAg
ICAgICAgcHJvdG9jb2xfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZSh2YXJfdHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dl
bmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBlKHZhcl90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAg
ICAgICAgIGlmIHByb3RvY29sX3R5cGUgPT0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4nOgorICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yU3RyaW5nQXJyYXlBcnJh
eSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIGlmIHByb3RvY29sX3R5cGUgaXMgJ1N0cmlu
ZycgYW5kIG9iamNfY2xhc3MgaXMgJ05TU3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
J2luc3BlY3RvclN0cmluZ0FycmF5KCVzKScgJSB2YXJfbmFtZQorICAgICAgICAgICAgaWYgcHJv
dG9jb2xfdHlwZSBpcyAnaW50JyBhbmQgb2JqY19jbGFzcyBpcyAnTlNOdW1iZXInOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9ySW50ZWdlckFycmF5KCVzKScgJSB2YXJfbmFtZQor
ICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAnZG91YmxlJyBhbmQgb2JqY19jbGFzcyBp
cyAnTlNOdW1iZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnaW5zcGVjdG9yRG91YmxlQXJy
YXkoJXMpJyAlIHZhcl9uYW1lCisgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rvck9iamVjdEFy
cmF5KCVzKScgJSB2YXJfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBvYmpjX3By
b3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9tZW1iZXIobmFtZSwgZGVjbGFyYXRpb24sIG1l
bWJlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgIGlmIG1lbWJlci50eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChPYmpDR2VuZXJhdG9yLm9iamNf
ZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlciks
IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAl
IChPYmpDR2VuZXJhdG9yLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0obWVt
YmVyLnR5cGUpLCBuYW1lKQorICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShtZW1iZXIudHlwZSwgbmFtZSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lv
bl9mb3JfcGFyYW1ldGVyKG5hbWUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJh
bWV0ZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRv
ci5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZl
bnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBuYW1lKQorICAgICAgICAgICAgcmV0dXJu
ICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1f
bmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKHBhcmFtZXRlci50eXBlKSwgbmFtZSkKKyAgICAg
ICAgcmV0dXJuIE9iakNHZW5lcmF0b3Iub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9m
b3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIG5hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIG9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHZhcl90
eXBlLCB2YXJfbmFtZSk6CisgICAgICAgIGNhdGVnb3J5ID0gT2JqQ1R5cGVDYXRlZ29yeS5jYXRl
Z29yeV9mb3JfdHlwZSh2YXJfdHlwZSkKKyAgICAgICAgaWYgY2F0ZWdvcnkgaW4gW09iakNUeXBl
Q2F0ZWdvcnkuU2ltcGxlLCBPYmpDVHlwZUNhdGVnb3J5LlN0cmluZ106CisgICAgICAgICAgICBy
ZXR1cm4gdmFyX25hbWUKKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5P
YmplY3Q6CisgICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNz
X2Zvcl90eXBlKHZhcl90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdbW1slcyBhbGxvY10gaW5p
dFdpdGhJbnNwZWN0b3JPYmplY3Q6JXNdIGF1dG9yZWxlYXNlXScgJSAob2JqY19jbGFzcywgdmFy
X25hbWUpCisgICAgICAgIGlmIGNhdGVnb3J5IGlzIE9iakNUeXBlQ2F0ZWdvcnkuQXJyYXk6Cisg
ICAgICAgICAgICBvYmpjX2NsYXNzID0gT2JqQ0dlbmVyYXRvci5vYmpjX2NsYXNzX2Zvcl90eXBl
KHZhcl90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05T
U3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamNTdHJpbmdBcnJheSglcyknICUg
dmFyX25hbWUKKyAgICAgICAgICAgIGlmIG9iamNfY2xhc3MgaXMgJ05TTnVtYmVyJzogICMgRklY
TUU6IEludGVnZXIgb3IgRG91YmxlPworICAgICAgICAgICAgICAgIHJldHVybiAnb2JqY0ludGVn
ZXJBcnJheSglcyknICUgdmFyX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnb2JqY0FycmF5PCVz
PiglcyknICUgKG9iamNfY2xhc3MsIHZhcl9uYW1lKQorCisgICAgIyBPYmpDIDwtPiBKU09OIG9i
amVjdCBjb252ZXJzaW9uIGZvciB0eXBlcyBnZXR0ZXJzL3NldHRlcnMuCisgICAgIyAgIC0gY29u
dmVydCBhIG1lbWJlciBzZXR0ZXIgZnJvbSBPYmpDIEFQSSB0byBKU09OIG9iamVjdCBzZXR0ZXIK
KyAgICAjICAgLSBjb252ZXJ0IGEgbWVtYmVyIGdldHRlciBmcm9tIEpTT04gb2JqZWN0IHRvIE9i
akMgQVBJCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG9iamNfdG9fcHJvdG9jb2xfZXhw
cmVzc2lvbl9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIsIHN1Yl9leHByZXNzaW9uKToK
KyAgICAgICAgY2F0ZWdvcnkgPSBPYmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKG1l
bWJlci50eXBlKQorICAgICAgICBpZiBjYXRlZ29yeSBpbiBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1w
bGUsIE9iakNUeXBlQ2F0ZWdvcnkuU3RyaW5nXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
bWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3RvUHJvdG9j
b2xTdHJpbmcoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAgICAgICAgICByZXR1cm4gc3ViX2V4
cHJlc3Npb24KKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5PYmplY3Q6
CisgICAgICAgICAgICByZXR1cm4gc3ViX2V4cHJlc3Npb24KKyAgICAgICAgaWYgY2F0ZWdvcnkg
aXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKKyAgICAgICAgICAgIG9iamNfY2xhc3MgPSBPYmpD
R2VuZXJhdG9yLm9iamNfY2xhc3NfZm9yX3R5cGUobWVtYmVyLnR5cGUuZWxlbWVudF90eXBlKQor
ICAgICAgICAgICAgaWYgb2JqY19jbGFzcyBpcyAnTlNTdHJpbmcnOgorICAgICAgICAgICAgICAg
IHJldHVybiAnaW5zcGVjdG9yU3RyaW5nQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAg
ICAgICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU051bWJlcic6CisgICAgICAgICAgICAgICAgcHJv
dG9jb2xfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXIu
dHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAn
ZG91YmxlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNwZWN0b3JEb3VibGVBcnJh
eSglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3Rv
ckludGVnZXJBcnJheSglcyknICUgc3ViX2V4cHJlc3Npb24KKyAgICAgICAgICAgIHJldHVybiAn
aW5zcGVjdG9yT2JqZWN0QXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIHByb3RvY29sX3RvX29iamNfZXhwcmVzc2lvbl9mb3JfbWVtYmVyKGRl
Y2xhcmF0aW9uLCBtZW1iZXIsIHN1Yl9leHByZXNzaW9uKToKKyAgICAgICAgY2F0ZWdvcnkgPSBP
YmpDVHlwZUNhdGVnb3J5LmNhdGVnb3J5X2Zvcl90eXBlKG1lbWJlci50eXBlKQorICAgICAgICBp
ZiBjYXRlZ29yeSBpbiBbT2JqQ1R5cGVDYXRlZ29yeS5TaW1wbGUsIE9iakNUeXBlQ2F0ZWdvcnku
U3RyaW5nXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKKyAgICAgICAgICAgICAgICBpZiBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKE9iakNH
ZW5lcmF0b3Iub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihkZWNsYXJh
dGlvbiwgbWVtYmVyKSwgc3ViX2V4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuICdm
cm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoT2JqQ0dlbmVyYXRvci5vYmpjX2VudW1fbmFt
ZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKG1lbWJlci50eXBlKSwgc3ViX2V4cHJlc3Npb24pCisg
ICAgICAgICAgICByZXR1cm4gc3ViX2V4cHJlc3Npb24KKyAgICAgICAgaWYgY2F0ZWdvcnkgaXMg
T2JqQ1R5cGVDYXRlZ29yeS5PYmplY3Q6CisgICAgICAgICAgICBvYmpjX3R5cGUgPSBPYmpDR2Vu
ZXJhdG9yLm9iamNfdHlwZV9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpCisgICAgICAg
ICAgICByZXR1cm4gJyglcyklcycgJSAob2JqY190eXBlLCBzdWJfZXhwcmVzc2lvbikKKyAgICAg
ICAgaWYgY2F0ZWdvcnkgaXMgT2JqQ1R5cGVDYXRlZ29yeS5BcnJheToKKyAgICAgICAgICAgIHBy
b3RvY29sX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVy
LnR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgb2JqY19jbGFzcyA9IE9iakNHZW5lcmF0
b3Iub2JqY19jbGFzc19mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAg
ICAgICBpZiBvYmpjX2NsYXNzIGlzICdOU1N0cmluZyc6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdvYmpjU3RyaW5nQXJyYXkoJXMpJyAlIHN1Yl9leHByZXNzaW9uCisgICAgICAgICAgICBpZiBv
YmpjX2NsYXNzIGlzICdOU051bWJlcic6CisgICAgICAgICAgICAgICAgcHJvdG9jb2xfdHlwZSA9
IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXIudHlwZS5lbGVtZW50
X3R5cGUpCisgICAgICAgICAgICAgICAgaWYgcHJvdG9jb2xfdHlwZSBpcyAnZG91YmxlJzoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICdvYmpjRG91YmxlQXJyYXkoJXMpJyAlIHN1Yl9leHBy
ZXNzaW9uCisgICAgICAgICAgICAgICAgcmV0dXJuICdvYmpjSW50ZWdlckFycmF5KCVzKScgJSBz
dWJfZXhwcmVzc2lvbgorICAgICAgICAgICAgcmV0dXJuICdvYmpjQXJyYXk8JXM+KCVzKScgJSAo
b2JqY19jbGFzcywgc3ViX2V4cHJlc3Npb24pCisKKyAgICAjIEpTT04gb2JqZWN0IHNldHRlci9n
ZXR0ZXIgc2VsZWN0b3JzIGZvciB0eXBlcy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
b2JqY19zZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXIoZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAg
ICAgIHJldHVybiBPYmpDR2VuZXJhdG9yLm9iamNfc2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyX2lu
dGVybmFsKG1lbWJlci50eXBlLCBkZWNsYXJhdGlvbiwgbWVtYmVyKQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBvYmpjX3NldHRlcl9tZXRob2RfZm9yX21lbWJlcl9pbnRlcm5hbChfdHlw
ZSwgZGVjbGFyYXRpb24sIG1lbWJlcik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpKToKKyAgICAgICAgICAg
IHJhd19uYW1lID0gX3R5cGUucmF3X25hbWUoKQorICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMg
J2Jvb2xlYW4nOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0Qm9vbCcKKyAgICAgICAgICAg
IGlmIHJhd19uYW1lIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldElu
dGVnZXInCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnbnVtYmVyJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ3NldERvdWJsZScKKyAgICAgICAgICAgIGlmIHJhd19uYW1lIGlzICdzdHJp
bmcnOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0U3RyaW5nJworICAgICAgICAgICAgaWYg
cmF3X25hbWUgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdz
ZXRPYmplY3QnCisgICAgICAgICAgICBpZiByYXdfbmFtZSBpcyAnYXJyYXknOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnc2V0SW5zcGVjdG9yQXJyYXknCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAg
IHJldHVybiAnc2V0U3RyaW5nJworICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRPYmplY3QnCisgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnc2V0SW5zcGVj
dG9yQXJyYXknCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIG9iamNfZ2V0dGVyX21ldGhvZF9mb3JfbWVtYmVyKGRlY2xhcmF0aW9uLCBtZW1iZXIpOgor
ICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5vYmpjX2dldHRlcl9tZXRob2RfZm9yX21lbWJl
cl9pbnRlcm5hbChtZW1iZXIudHlwZSwgZGVjbGFyYXRpb24sIG1lbWJlcikKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgb2JqY19nZXR0ZXJfbWV0aG9kX2Zvcl9tZW1iZXJfaW50ZXJuYWwo
X3R5cGUsIGRlY2xhcmF0aW9uLCBtZW1iZXIpOgorICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBl
CisgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CisgICAgICAg
ICAgICByYXdfbmFtZSA9IF90eXBlLnJhd19uYW1lKCkKKyAgICAgICAgICAgIGlmIHJhd19uYW1l
IGlzICdib29sZWFuJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2Jvb2xGb3JLZXknCisgICAg
ICAgICAgICBpZiByYXdfbmFtZSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdpbnRlZ2VyRm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMgJ251bWJlcic6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICdkb3VibGVGb3JLZXknCisgICAgICAgICAgICBpZiByYXdf
bmFtZSBpcyAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3N0cmluZ0ZvcktleScK
KyAgICAgICAgICAgIGlmIHJhd19uYW1lIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnb2JqZWN0Rm9yS2V5JworICAgICAgICAgICAgaWYgcmF3X25hbWUgaXMg
J2FycmF5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckFycmF5Rm9yS2V5Jwor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ3N0cmluZ0ZvcktleScKKyAgICAgICAgaWYg
KGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnb2Jq
ZWN0Rm9yS2V5JworICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6Cisg
ICAgICAgICAgICByZXR1cm4gJ2luc3BlY3RvckFycmF5Rm9yS2V5JworICAgICAgICByZXR1cm4g
Tm9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjEwZDNkN2E0YmE2ZTc2MmQyNTE0MTU2ZjEzZWYzMDFkODI2ZDU2MzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTAsMCArMSwxNTUgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIyBHZW5lcmF0b3IgdGVtcGxhdGVzLCB3aGljaCBjYW4gYmUgZmls
bGVkIHdpdGggc3RyaW5nLlRlbXBsYXRlLgorIyBGb2xsb3dpbmcgYXJlIGNsYXNzZXMgdGhhdCBm
aWxsIHRoZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgdHlwZWNoZWNrZWQgbW9kZWwuCisKK2NsYXNzIE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXM6CisKKyAgICBIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCiske2luY2x1ZGVzfQorIiIiKQorCisg
ICAgSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIiIiIiKQorCisgICAgQ29udmVyc2lvbkhlbHBl
cnNQcmVsdWRlID0gKAorICAgICIiIiR7aW5jbHVkZXN9CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eyIiIikKKworICAgIENvbnZlcnNpb25IZWxwZXJzUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisiIiIpCisKKyAgICBHZW5lcmljSGVhZGVyUHJlbHVkZSA9ICgK
KyAgICAiIiIke2luY2x1ZGVzfSIiIikKKworICAgIEdlbmVyaWNIZWFkZXJQb3N0bHVkZSA9ICgK
KyAgICAiIiIiIiIpCisKKyAgICBDb252ZXJzaW9uSGVscGVyc1N0YW5kYXJkID0gKAorICAgICIi
InRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9j
b2xTdHJpbmcoU3RyaW5nIHZhbHVlKTsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
clByZWx1ZGUgPSAoCisgICAgIiIiJHtpbmNsdWRlc30KKworJHtmb3J3YXJkRGVjbGFyYXRpb25z
fQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisiIiIp
CisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAi
IiIjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgJHtwcmltYXJ5SW5jbHVkZX0KKworJHtzZWNv
bmRhcnlJbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisgICAgQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIiIiKQorCisgICAgSW1wbGVtZW50YXRpb25QcmVsdWRlID0gKAorICAg
ICIiIiNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAke3ByaW1hcnlJbmNsdWRlfQorCiske3Nl
Y29uZGFyeUluY2x1ZGVzfQorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOyIiIikKKworICAg
IEltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCisgICAgIiIiIiIiKQorCisgICAgQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24gPSAoCisgICAg
IiIiY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXIoKSB7IH0KKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK307IiIiKQorCisgICAgQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xhcmF0aW9uID0gKAorICAgICIi
ImNsYXNzIE9iakNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9tYWluSGFuZGxlcj4gaGFuZGxlcikg
eyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJpdmF0
ZToKKyAgICBSZXRhaW5QdHI8aWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVySW1wbGVtZW50YXRpb24gPSAoCisgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRl
cnN9KQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgfTsKKworJHtzdWNjZXNzQ2FsbGJhY2t9Cisk
e2NvbnZlcnNpb25zfQorJHtpbnZvY2F0aW9ufQorfQorIiIiKQorCisgICAgQ29uZmlndXJhdGlv
bkNvbW1hbmRQcm9wZXJ0eSA9ICgKKyAgICAiIiJAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
LCBzZXR0ZXI9c2V0JHtkb21haW5OYW1lfUhhbmRsZXI6KSBpZDwke29iamNQcmVmaXh9JHtkb21h
aW5OYW1lfURvbWFpbkhhbmRsZXI+ICR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRsZXI7IiIiKQor
CisgICAgQ29uZmlndXJhdGlvbkV2ZW50UHJvcGVydHkgPSAoCisgICAgIiIiQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSAke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqJHt2YXJpYWJsZU5hbWVQcmVmaXh9RXZlbnREaXNwYXRjaGVyOyIiIikKKwor
ICAgIENvbmZpZ3VyYXRpb25Db21tYW5kUHJvcGVydHlJbXBsZW1lbnRhdGlvbiA9ICgKKyAgICAi
IiItICh2b2lkKXNldCR7ZG9tYWluTmFtZX1IYW5kbGVyOihpZDwke29iamNQcmVmaXh9JHtkb21h
aW5OYW1lfURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfJHt2
YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW18ke3Zh
cmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyIHJlbGVhc2VdOworICAgIF8ke3ZhcmlhYmxlTmFtZVBy
ZWZpeH1IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlz
cGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6
bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8SW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIiR7ZG9tYWluTmFtZX0iKSwgV1RGOjptb3Zl
KGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2Vu
dChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8JHtvYmpjUHJlZml4fSR7
ZG9tYWluTmFtZX1Eb21haW5IYW5kbGVyPikke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyCit7
CisgICAgcmV0dXJuIF8ke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOworfSIiIikKKworICAg
IENvbmZpZ3VyYXRpb25HZXR0ZXJJbXBsZW1lbnRhdGlvbiA9ICgKKyAgICAiIiItICgke29iamNQ
cmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKSR7dmFyaWFibGVOYW1l
UHJlZml4fUV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghXyR7dmFyaWFibGVOYW1lUHJlZml4
fUV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgXyR7dmFyaWFibGVOYW1lUHJlZml4fUV2ZW50RGlz
cGF0Y2hlciA9IFtbJHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21haW5FdmVudERpc3BhdGNo
ZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF8k
e3ZhcmlhYmxlTmFtZVByZWZpeH1FdmVudERpc3BhdGNoZXI7Cit9IiIiKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKaW5kZXggYjBj
NzJiMGI1OWEwNDZlOGQzM2I0NmE1NzlhNDdkNDAwMmIxNTZiZi4uOWQ5MzFjZmQ5MWY1N2JiOTRj
YjhhMTEyNWQ5ZmVkYWQ4YTUzYTY4MyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC0yNCw3ICsyNCw3IEBACiAjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKICMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0jIFRoaXMgc2Ny
aXB0IGdlbmVyYXRlcyBKUyBhbmQgQysrIGJpbmRpbmdzIGZvciB0aGUgaW5zcGVjdG9yIHByb3Rv
Y29sLgorIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgSlMsIE9iamVjdGl2ZSBDLCBhbmQgQysrIGJp
bmRpbmdzIGZvciB0aGUgaW5zcGVjdG9yIHByb3RvY29sLgogIyBHZW5lcmF0b3JzIGZvciBpbmRp
dmlkdWFsIGZpbGVzIGFyZSBsb2NhdGVkIGluIHRoZSBjb2RlZ2VuLyBkaXJlY3RvcnkuCiAKIGlt
cG9ydCBvcy5wYXRoCkBAIC00MCwzNyArNDAsMzkgQEAgdHJ5OgogZXhjZXB0IEltcG9ydEVycm9y
OgogICAgIGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KIAorbG9nZ2luZy5iYXNpY0NvbmZpZyhm
b3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikK
K2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCiB0cnk6CiAgICAgZnJvbSBjb2Rl
Z2VuIGltcG9ydCAqCiAKICMgV2hlbiBjb3B5aW5nIGdlbmVyYXRvciBmaWxlcyB0byBKYXZhU2Ny
aXB0Q29yZSdzIHByaXZhdGUgaGVhZGVycyBvbiBNYWMsCiAjIHRoZSBjb2RlZ2VuLyBtb2R1bGUg
ZGlyZWN0b3J5IGlzIGZsYXR0ZW5lZC4gU28sIGltcG9ydCBkaXJlY3RseS4KLWV4Y2VwdCBJbXBv
cnRFcnJvcjoKK2V4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAjIGxvZy5lcnJvcihlKSAjIFVu
Y29tbWVudCB0aGlzIHRvIGRlYnVnIGVhcmx5IGltcG9ydCBlcnJvcnMuCiAgICAgaW1wb3J0IG1v
ZGVscwogICAgIGZyb20gbW9kZWxzIGltcG9ydCAqCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0
ICoKLQotICAgIGZyb20gZ2VuZXJhdGVfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIgaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMgaW1wb3J0ICoK
LSAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKLSAg
ICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgotICAgIGZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoK
LSAgICBmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1w
b3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIgaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0
aXZlX2NfY29uZmlndXJhdGlvbl9oZWFkZXIgaW1wb3J0ICoKLSAgICBmcm9tIGdlbmVyYXRlX29i
amVjdGl2ZV9jX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24gaW1wb3J0ICoKLSAgICBmcm9t
IGdlbmVyYXRlX29iamVjdGl2ZV9jX2NvbnZlcnNpb25faGVscGVycyBpbXBvcnQgKgotICAgIGZy
b20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgotICAgIGZyb20gZ2VuZXJhdGVfb2JqZWN0aXZlX2NfaGVhZGVyIGltcG9ydCAq
Ci0gICAgZnJvbSBnZW5lcmF0ZV9vYmplY3RpdmVfY19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoK
LSAgICBmcm9tIGdlbmVyYXRlX29iamVjdGl2ZV9jX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9y
dCAqCi0gICAgZnJvbSBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIgaW1wb3J0ICoKLSAg
ICBmcm9tIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCi0K
LQotbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlz
JywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQorICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgKgorICAgIGZyb20gb2JqY19nZW5lcmF0
b3IgaW1wb3J0ICoKKworICAgIGZyb20gZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9jcHBfYmFja2VuZF9j
b21tYW5kcyBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2NwcF9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfY3BwX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2Nw
cF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAg
IGZyb20gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlciBpbXBvcnQgKgorICAgIGZy
b20gZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCisg
ICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycyBpbXBvcnQgKgorICAgIGZy
b20gZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9y
dCAqCisgICAgZnJvbSBnZW5lcmF0ZV9vYmpjX2hlYWRlciBpbXBvcnQgKgorICAgIGZyb20gZ2Vu
ZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKIAogCiAjIEEgd3JpdGVy
IHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4KQEAgLTEzMCwy
NCArMTMyLDI0IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgZ2VuZXJhdG9ycyA9IFtdCiAgICAgaXNfdGVz
dCA9IHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3QKICAgICBpZiBpc190ZXN0
IG9yIHByb3RvY29sLmZyYW1ld29yayBpcyBub3QgRnJhbWV3b3Jrcy5XZWJJbnNwZWN0b3I6Ci0g
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3Bw
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9u
X2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkp
CisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKICAg
ICBpZiBpc190ZXN0IG9yIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkluc3Bl
Y3RvcjoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0JhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9u
X2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0NvbmZpZ3Vy
YXRpb25IZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iamVjdGl2ZUNDb252ZXJzaW9u
SGVscGVyc0dlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ0Zyb250ZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDSGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChPYmplY3RpdmVDVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoT2JqZWN0aXZlQ1R5cGVzSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29u
ZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29udmVy
c2lvbkhlbHBlcnNHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdlbmVyYXRvcihw
cm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90
b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQogCiAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRz
ID0gW10KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>