<?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>183756</bug_id>
          
          <creation_ts>2018-03-19 16:40:42 -0700</creation_ts>
          <short_desc>Improve FunctionPtr and use it in the JIT CallRecord.</short_desc>
          <delta_ts>2018-03-20 11:11:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1407507</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-19 16:40:42 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407508</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-19 16:41:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/38641335&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407510</commentid>
    <comment_count>2</comment_count>
      <attachid>336084</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-19 16:46:05 -0700</bug_when>
    <thetext>Created attachment 336084
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407523</commentid>
    <comment_count>3</comment_count>
      <attachid>336084</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-19 18:04:55 -0700</bug_when>
    <thetext>Comment on attachment 336084
proposed patch.

Attachment 336084 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/7031415

New failing tests:
stress/arith-atanh-on-various-types.js.no-llint
stress/arith-log10-on-various-types.js.no-ftl
stress/arith-cosh-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-asinh-on-various-types.js.no-ftl
stress/arith-atanh-on-various-types.js.no-cjit-validate-phases
stress/arith-atanh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-ceil-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-fround-on-various-types.js.no-llint
stress/arith-sqrt-on-various-types.js.default
stress/arith-tan-on-various-types.js.no-ftl
stress/arith-sqrt-on-various-types.js.no-llint
stress/arith-acos-on-various-types.js.no-cjit-collect-continuously
stress/arith-atanh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-log2-on-various-types.js.no-cjit-collect-continuously
stress/arith-trunc-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cos-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-acosh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-asin-on-various-types.js.no-cjit-collect-continuously
stress/arith-log10-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acos-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cbrt-on-various-types.js.no-cjit-collect-continuously
stress/arith-clz32-on-various-types.js.no-ftl
stress/arith-log10-on-various-types.js.no-llint
stress/arith-negate-on-various-types.js.no-llint
stress/arith-log10-on-various-types.js.default
stress/arith-sqrt-on-various-types.js.no-cjit-collect-continuously
stress/arith-sin-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-no-ftl
stress/arith-asinh-on-various-types.js.no-cjit-collect-continuously
stress/arith-negate-on-various-types.js.no-cjit-validate-phases
stress/arith-cbrt-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-fround-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-tanh-on-various-types.js.default
stress/arith-atan-on-various-types.js.default
stress/arith-abs-on-various-types.js.no-cjit-validate-phases
stress/arith-log2-on-various-types.js.no-llint
stress/arith-sin-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-expm1-on-various-types.js.no-cjit-validate-phases
stress/arith-atan-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asin-on-various-types.js.default
stress/arith-floor-on-various-types.js.no-cjit-validate-phases
stress/arith-round-on-various-types.js.no-cjit-collect-continuously
stress/arith-cosh-on-various-types.js.no-ftl
stress/arith-abs-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-acos-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-floor-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-trunc-on-various-types.js.no-cjit-collect-continuously
stress/arith-ceil-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-sinh-on-various-types.js.no-ftl
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-dfg-eager-no-cjit
stress/arith-atan-on-various-types.js.no-cjit-collect-continuously
stress/arith-tanh-on-various-types.js.no-cjit-validate-phases
stress/arith-tan-on-various-types.js.no-llint
stress/arith-sin-on-various-types.js.no-cjit-validate-phases
stress/arith-expm1-on-various-types.js.no-llint
stress/arith-negate-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-trunc-on-various-types.js.no-llint
stress/arith-floor-on-various-types.js.no-ftl
stress/arith-atan-on-various-types.js.no-ftl
stress/arith-negate-on-various-types.js.no-ftl
stress/arith-atan-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-acos-on-various-types.js.no-llint
stress/arith-atanh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-acos-on-various-types.js.no-ftl
stress/arith-sinh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cos-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cos-on-various-types.js.no-cjit-validate-phases
stress/arith-expm1-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-expm1-on-various-types.js.no-ftl
stress/arith-cos-on-various-types.js.no-cjit-collect-continuously
stress/arith-asin-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-sinh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acos-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-ceil-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-sinh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-log2-on-various-types.js.ftl-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-ftl-eager-no-cjit
stress/arith-log2-on-various-types.js.no-cjit-validate-phases
stress/arith-log2-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-sqrt-on-various-types.js.no-ftl
stress/arith-expm1-on-various-types.js.default
stress/arith-cos-on-various-types.js.no-ftl
stress/arith-sqrt-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acosh-on-various-types.js.no-cjit-validate-phases
stress/arith-acosh-on-various-types.js.no-llint
stress/arith-clz32-on-various-types.js.no-cjit-validate-phases
stress/arith-abs-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asinh-on-various-types.js.ftl-no-cjit-no-inline-validate
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-no-llint
stress/arith-asin-on-various-types.js.no-llint
stress/arith-atanh-on-various-types.js.default
stress/arith-fround-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-ceil-on-various-types.js.no-cjit-validate-phases
stress/arith-trunc-on-various-types.js.default
stress/arith-asinh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-ceil-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.no-llint
stress/arith-cosh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-fround-on-various-types.js.no-cjit-collect-continuously
stress/arith-round-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-sqrt-on-various-types.js.no-cjit-validate-phases
stress/arith-acos-on-various-types.js.default
stress/arith-sin-on-various-types.js.no-ftl
stress/arith-asin-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-tanh-on-various-types.js.no-cjit-collect-continuously
stress/arith-log10-on-various-types.js.no-cjit-validate-phases
stress/arith-tanh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-floor-on-various-types.js.default
stress/arith-atan-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-expm1-on-various-types.js.no-cjit-collect-continuously
stress/arith-fround-on-various-types.js.no-cjit-validate-phases
stress/arith-ceil-on-various-types.js.default
stress/arith-cosh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-floor-on-various-types.js.no-llint
stress/arith-log-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-tan-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-clz32-on-various-types.js.default
stress/arith-clz32-on-various-types.js.no-llint
stress/arith-cosh-on-various-types.js.no-cjit-validate-phases
stress/arith-asin-on-various-types.js.no-cjit-validate-phases
stress/arith-cos-on-various-types.js.no-llint
stress/arith-tanh-on-various-types.js.no-llint
stress/arith-cbrt-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asinh-on-various-types.js.default
stress/arith-acosh-on-various-types.js.default
stress/arith-sin-on-various-types.js.no-cjit-collect-continuously
stress/arith-floor-on-various-types.js.no-cjit-collect-continuously
stress/arith-sinh-on-various-types.js.no-cjit-validate-phases
stress/arith-sinh-on-various-types.js.default
stress/arith-cbrt-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-acosh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cosh-on-various-types.js.no-cjit-collect-continuously
stress/arith-round-on-various-types.js.no-ftl
stress/arith-trunc-on-various-types.js.no-ftl
stress/arith-log10-on-various-types.js.no-cjit-collect-continuously
stress/arith-log10-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-expm1-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-tan-on-various-types.js.no-cjit-collect-continuously
stress/arith-fround-on-various-types.js.default
stress/arith-negate-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cos-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acosh-on-various-types.js.no-cjit-collect-continuously
stress/arith-cosh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-clz32-on-various-types.js.no-cjit-collect-continuously
stress/arith-acosh-on-various-types.js.no-ftl
stress/arith-abs-on-various-types.js.no-ftl
stress/arith-sinh-on-various-types.js.no-cjit-collect-continuously
stress/arith-floor-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-tan-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-cbrt-on-various-types.js.default
stress/arith-cbrt-on-various-types.js.no-llint
stress/arith-asinh-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.no-cjit-validate-phases
stress/arith-tan-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cosh-on-various-types.js.default
stress/arith-acosh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-ceil-on-various-types.js.no-ftl
stress/arith-log2-on-various-types.js.no-ftl
stress/arith-negate-on-various-types.js.no-cjit-collect-continuously
stress/arith-abs-on-various-types.js.no-cjit-collect-continuously
stress/arith-trunc-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-floor-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-fround-on-various-types.js.no-ftl
stress/arith-tanh-on-various-types.js.no-ftl
stress/arith-sinh-on-various-types.js.no-llint
stress/arith-sin-on-various-types.js.default
stress/arith-asinh-on-various-types.js.no-cjit-validate-phases
stress/arith-abs-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-round-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cbrt-on-various-types.js.no-cjit-validate-phases
stress/arith-asin-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-trunc-on-various-types.js.no-cjit-validate-phases
stress/arith-abs-on-various-types.js.no-llint
stress/arith-abs-on-various-types.js.default
stress/arith-ceil-on-various-types.js.no-cjit-collect-continuously
stress/arith-sin-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-atanh-on-various-types.js.no-cjit-collect-continuously
stress/arith-negate-on-various-types.js.default
stress/arith-acos-on-various-types.js.no-cjit-validate-phases
stress/arith-tan-on-various-types.js.default
stress/arith-clz32-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-log10-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-trunc-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-tanh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-log2-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-expm1-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-asinh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-sqrt-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-log2-on-various-types.js.default
stress/arith-log-on-various-types.js.no-cjit-validate-phases
stress/arith-clz32-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-atan-on-various-types.js.no-cjit-validate-phases
stress/arith-atan-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.default
stress/arith-clz32-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asin-on-various-types.js.no-ftl
stress/arith-cbrt-on-various-types.js.no-ftl
stress/arith-sqrt-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-tan-on-various-types.js.no-cjit-validate-phases
stress/arith-negate-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-cos-on-various-types.js.default
stress/arith-fround-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-atanh-on-various-types.js.no-ftl
stress/arith-sin-on-various-types.js.no-llint
stress/arith-tanh-on-various-types.js.ftl-no-cjit-no-inline-validate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407532</commentid>
    <comment_count>4</comment_count>
      <attachid>336091</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-19 18:17:30 -0700</bug_when>
    <thetext>Created attachment 336091
proposed patch w/ 32-bit build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407535</commentid>
    <comment_count>5</comment_count>
      <attachid>336091</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-19 18:32:19 -0700</bug_when>
    <thetext>Comment on attachment 336091
proposed patch w/ 32-bit build fix.

Something is weird.  The EWS is reporting failed tests.  I&apos;m taking this out of review to investigate first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407551</commentid>
    <comment_count>6</comment_count>
      <attachid>336091</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-19 19:30:58 -0700</bug_when>
    <thetext>Comment on attachment 336091
proposed patch w/ 32-bit build fix.

Attachment 336091 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/7032868

New failing tests:
stress/arith-atanh-on-various-types.js.no-llint
stress/arith-log10-on-various-types.js.no-ftl
stress/arith-cosh-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-asinh-on-various-types.js.no-ftl
stress/arith-atanh-on-various-types.js.no-cjit-validate-phases
stress/arith-atanh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-ceil-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-fround-on-various-types.js.no-llint
stress/arith-sqrt-on-various-types.js.default
stress/arith-tan-on-various-types.js.no-ftl
stress/arith-sqrt-on-various-types.js.no-llint
stress/arith-acos-on-various-types.js.no-cjit-collect-continuously
stress/arith-atanh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-log2-on-various-types.js.no-cjit-collect-continuously
stress/arith-trunc-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cos-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-acosh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-asin-on-various-types.js.no-cjit-collect-continuously
stress/arith-log10-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acos-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cbrt-on-various-types.js.no-cjit-collect-continuously
stress/arith-clz32-on-various-types.js.no-ftl
stress/arith-log10-on-various-types.js.no-llint
stress/arith-negate-on-various-types.js.no-llint
stress/arith-log10-on-various-types.js.default
stress/arith-sqrt-on-various-types.js.no-cjit-collect-continuously
stress/arith-sin-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-trunc-on-various-types.js.no-cjit-validate-phases
stress/arith-asinh-on-various-types.js.no-cjit-collect-continuously
stress/arith-negate-on-various-types.js.no-cjit-validate-phases
stress/arith-cbrt-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-fround-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-tanh-on-various-types.js.default
stress/arith-atan-on-various-types.js.default
stress/arith-abs-on-various-types.js.no-cjit-validate-phases
stress/arith-log2-on-various-types.js.no-llint
stress/arith-sin-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-expm1-on-various-types.js.no-cjit-validate-phases
stress/arith-atan-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asin-on-various-types.js.default
stress/arith-floor-on-various-types.js.no-cjit-validate-phases
stress/arith-round-on-various-types.js.no-cjit-collect-continuously
stress/arith-cosh-on-various-types.js.no-ftl
stress/arith-abs-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-acos-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-floor-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-trunc-on-various-types.js.no-cjit-collect-continuously
stress/arith-ceil-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-sinh-on-various-types.js.no-ftl
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-dfg-eager-no-cjit
stress/arith-atan-on-various-types.js.no-cjit-collect-continuously
stress/arith-tanh-on-various-types.js.no-cjit-validate-phases
stress/arith-tan-on-various-types.js.no-llint
stress/arith-sin-on-various-types.js.no-cjit-validate-phases
stress/arith-expm1-on-various-types.js.no-llint
stress/arith-negate-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-trunc-on-various-types.js.no-llint
stress/arith-floor-on-various-types.js.no-ftl
stress/arith-atan-on-various-types.js.no-ftl
stress/arith-negate-on-various-types.js.no-ftl
stress/arith-atan-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-acos-on-various-types.js.no-llint
stress/arith-atanh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-acos-on-various-types.js.no-ftl
stress/arith-sinh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cos-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cos-on-various-types.js.no-cjit-validate-phases
stress/arith-expm1-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-expm1-on-various-types.js.no-ftl
stress/arith-cos-on-various-types.js.no-cjit-collect-continuously
stress/arith-asin-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-sinh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acos-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-ceil-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-sinh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-log2-on-various-types.js.ftl-no-cjit-b3o1
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-ftl-eager-no-cjit
stress/arith-log2-on-various-types.js.no-cjit-validate-phases
stress/arith-log2-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-sqrt-on-various-types.js.no-ftl
stress/arith-expm1-on-various-types.js.default
stress/arith-cos-on-various-types.js.no-ftl
stress/arith-sqrt-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acosh-on-various-types.js.no-cjit-validate-phases
stress/arith-acosh-on-various-types.js.no-llint
stress/arith-clz32-on-various-types.js.no-cjit-validate-phases
stress/arith-abs-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asinh-on-various-types.js.ftl-no-cjit-no-inline-validate
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-no-llint
stress/arith-asin-on-various-types.js.no-llint
stress/arith-atanh-on-various-types.js.default
stress/arith-fround-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-ceil-on-various-types.js.no-cjit-validate-phases
stress/arith-trunc-on-various-types.js.default
stress/arith-asinh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-ceil-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.no-llint
stress/arith-cosh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-fround-on-various-types.js.no-cjit-collect-continuously
stress/arith-round-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-sqrt-on-various-types.js.no-cjit-validate-phases
stress/arith-acos-on-various-types.js.default
stress/arith-sin-on-various-types.js.no-ftl
stress/arith-asin-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-tanh-on-various-types.js.no-cjit-collect-continuously
stress/arith-log10-on-various-types.js.no-cjit-validate-phases
stress/arith-tanh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-floor-on-various-types.js.default
stress/arith-atan-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-expm1-on-various-types.js.no-cjit-collect-continuously
stress/arith-fround-on-various-types.js.no-cjit-validate-phases
stress/arith-ceil-on-various-types.js.default
stress/arith-cosh-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-floor-on-various-types.js.no-llint
stress/arith-log-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-tan-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-clz32-on-various-types.js.default
stress/arith-clz32-on-various-types.js.no-llint
stress/arith-cosh-on-various-types.js.no-cjit-validate-phases
stress/arith-asin-on-various-types.js.no-cjit-validate-phases
stress/arith-cos-on-various-types.js.no-llint
stress/arith-tanh-on-various-types.js.no-llint
stress/arith-cbrt-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asinh-on-various-types.js.default
stress/arith-acosh-on-various-types.js.default
stress/arith-sin-on-various-types.js.no-cjit-collect-continuously
stress/arith-floor-on-various-types.js.no-cjit-collect-continuously
stress/arith-sinh-on-various-types.js.no-cjit-validate-phases
stress/arith-sinh-on-various-types.js.default
stress/arith-cbrt-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-acosh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cosh-on-various-types.js.no-cjit-collect-continuously
stress/arith-round-on-various-types.js.no-ftl
stress/arith-trunc-on-various-types.js.no-ftl
stress/arith-log10-on-various-types.js.no-cjit-collect-continuously
stress/arith-log10-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-expm1-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-tan-on-various-types.js.no-cjit-collect-continuously
stress/arith-fround-on-various-types.js.default
stress/arith-negate-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cos-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-acosh-on-various-types.js.no-cjit-collect-continuously
stress/arith-cosh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-clz32-on-various-types.js.no-cjit-collect-continuously
stress/arith-acosh-on-various-types.js.no-ftl
stress/arith-abs-on-various-types.js.no-ftl
stress/arith-sinh-on-various-types.js.no-cjit-collect-continuously
stress/arith-floor-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-tan-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-cbrt-on-various-types.js.default
stress/arith-cbrt-on-various-types.js.no-llint
stress/arith-asinh-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.no-cjit-validate-phases
stress/arith-tan-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-cosh-on-various-types.js.default
stress/arith-acosh-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-ceil-on-various-types.js.no-ftl
stress/arith-log2-on-various-types.js.no-ftl
stress/arith-negate-on-various-types.js.no-cjit-collect-continuously
stress/arith-abs-on-various-types.js.no-cjit-collect-continuously
stress/arith-trunc-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-floor-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-fround-on-various-types.js.no-ftl
stress/arith-tanh-on-various-types.js.no-ftl
stress/arith-sinh-on-various-types.js.no-llint
stress/arith-sin-on-various-types.js.default
stress/arith-asinh-on-various-types.js.no-cjit-validate-phases
stress/arith-abs-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-round-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-cbrt-on-various-types.js.no-cjit-validate-phases
stress/arith-asin-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-abs-on-various-types.js.no-llint
stress/arith-abs-on-various-types.js.default
stress/arith-ceil-on-various-types.js.no-cjit-collect-continuously
stress/arith-sin-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-atanh-on-various-types.js.no-cjit-collect-continuously
stress/arith-negate-on-various-types.js.default
stress/arith-acos-on-various-types.js.no-cjit-validate-phases
stress/arith-tan-on-various-types.js.default
stress/arith-clz32-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-log10-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-trunc-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-tanh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-log2-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-expm1-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-asinh-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-sqrt-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-log2-on-various-types.js.default
stress/arith-log-on-various-types.js.no-cjit-validate-phases
stress/arith-clz32-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-atan-on-various-types.js.no-cjit-validate-phases
stress/arith-atan-on-various-types.js.no-llint
stress/arith-round-on-various-types.js.default
stress/arith-clz32-on-various-types.js.ftl-no-cjit-validate-sampling-profiler
stress/arith-asin-on-various-types.js.no-ftl
stress/arith-cbrt-on-various-types.js.no-ftl
stress/arith-sqrt-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-tan-on-various-types.js.no-cjit-validate-phases
stress/arith-negate-on-various-types.js.ftl-no-cjit-no-inline-validate
stress/arith-cos-on-various-types.js.default
stress/arith-fround-on-various-types.js.ftl-no-cjit-b3o1
stress/arith-atanh-on-various-types.js.no-ftl
stress/arith-sin-on-various-types.js.no-llint
stress/arith-tanh-on-various-types.js.ftl-no-cjit-no-inline-validate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407572</commentid>
    <comment_count>7</comment_count>
      <attachid>336091</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-19 21:25:18 -0700</bug_when>
    <thetext>Comment on attachment 336091
proposed patch w/ 32-bit build fix.

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

r=me modulo EWS.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:81
&gt; +    FunctionPtr(ReturnType(CDECL *value)(Arguments...), PtrTag tag = CFunctionPtrTag)

Does it matter that this is CDECL (and below, FASTCALL), as opposed to the default calling convention? It seems like you could have a different PtrTag for those.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:225
&gt; +        return MacroAssemblerCodePtr(retagCodePtr(executableAddress(), oldTag, newTag));

Are there any relationships that we want to enforce between tags? Like if there&apos;s a lattice of tags, we could have a debug assert here that the PtrTags are compatible (that function would come from the PtrTag header).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407599</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-19 22:44:47 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #7)
&gt; Comment on attachment 336091 [details]
&gt; proposed patch w/ 32-bit build fix.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336091&amp;action=review
&gt; 
&gt; r=me modulo EWS.
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:81
&gt; &gt; +    FunctionPtr(ReturnType(CDECL *value)(Arguments...), PtrTag tag = CFunctionPtrTag)
&gt; 
&gt; Does it matter that this is CDECL (and below, FASTCALL), as opposed to the
&gt; default calling convention? It seems like you could have a different PtrTag
&gt; for those.

For now, we don&apos;t need to differentiate them yet.

&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:225
&gt; &gt; +        return MacroAssemblerCodePtr(retagCodePtr(executableAddress(), oldTag, newTag));
&gt; 
&gt; Are there any relationships that we want to enforce between tags? Like if
&gt; there&apos;s a lattice of tags, we could have a debug assert here that the
&gt; PtrTags are compatible (that function would come from the PtrTag header).

No special relationships between tags yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407602</commentid>
    <comment_count>9</comment_count>
      <attachid>336105</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-19 22:49:59 -0700</bug_when>
    <thetext>Created attachment 336105
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407729</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-20 11:11:17 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r229767: &lt;http://trac.webkit.org/r229767&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336084</attachid>
            <date>2018-03-19 16:46:05 -0700</date>
            <delta_ts>2018-03-19 18:17:30 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-183756.patch</filename>
            <type>text/plain</type>
            <size>50010</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI5NzI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBA
QAorMjAxOC0wMy0xOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBGdW5jdGlvblB0ciBhbmQgdXNlIGl0IGluIHRoZSBKSVQgQ2FsbFJlY29yZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzc1NgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzg2NDEzMzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gRnVuY3Rpb25QdHIgaG9sZCBhIEMvQysrIGZ1bmN0
aW9uIHBvaW50ZXIgYnkgZGVmYXVsdC4gIENoYW5nZSBpdHMgZGVmYXVsdAorICAgICAgICAgICBQ
dHJUYWcgdG8gcmVmbGVjdCB0aGF0LgorICAgICAgICAyLiBEZWxldGUgdGhlIEZ1bmN0aW9uUHRy
Ojp2YWx1ZSgpIG1ldGhvZC4gIEl0IGlzIGVmZmVjdGl2ZWx5IGEgZHVwbGljYXRlIG9mCisgICAg
ICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzKCkuCisgICAgICAgIDMuIEZpeCB0aGUgRnVuY3Rpb25Q
dHIgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhcmJpdHJhcnkgcG9pbnRlcnMgdG8gYmUgYWJsZSB0
bworICAgICAgICAgICB0YWtlICJhbnkiIHBvaW50ZXIuICAiYW55IiBpbiB0aGlzIGNhc2UgbWVh
bnMgdGhhdCB0aGUgcG9pbnRlciBtYXkgbm90IGJlIHR5cGVkCisgICAgICAgICAgIGFzIGEgQy9D
KysgZnVuY3Rpb24gdG8gdGhlIEMrKyBjb21waWxlciAoZHVlIHRvIHVwc3RyZWFtIGNhc3Rpbmcg
b3IgdXNhZ2Ugb2YKKyAgICAgICAgICAgdm9pZCogYXMgYSBzdG9yYWdlIHR5cGUpLCBidXQgaXQg
aXMgc3RpbGwgZXhwZWN0ZWQgdG8gYmUgcG9pbnRpbmcgdG8gYSBDL0MrKworICAgICAgICAgICBm
dW5jdGlvbi4KKyAgICAgICAgNC4gQWRkZWQgYSBGdW5jdGlvblB0ciBjb25zdHJ1Y3RvciB0aGF0
IHRha2VzIGFub3RoZXIgRnVuY3Rpb25QdHIuICBUaGlzIGlzIGEKKyAgICAgICAgICAgY29udmVu
aWVuY2UgY29uc3RydWN0b3IgdGhhdCBsZXRzIHVzIHJldGFnIHRoZSB1bmRlcmx5aW5nIHBvaW50
ZXIuICBUaGUgb3RoZXIKKyAgICAgICAgICAgRnVuY3Rpb25QdHIgaXMgc3RpbGwgZXhwZWN0ZWQg
dG8gcG9pbnQgdG8gYSBDL0MrKyBmdW5jdGlvbi4KKworICAgICAgICA1LiBBZGRlZCBQdHJUYWcg
YXNzZXJ0aW9uIHBsYWNlaG9sZGVyIGZ1bmN0aW9ucyB0byBiZSBpbXBsZW1lbnRlZCBsYXRlci4K
KworICAgICAgICA2LiBDaGFuZ2UgdGhlIEpJVCBDYWxsUmVjb3JkIHRvIGVtYmVkIGEgRnVuY3Rp
b25QdHIgY2FsbGVlIGluc3RlYWQgb2YgYSB2b2lkKiB0bworICAgICAgICAgICBwb2ludGVyLiAg
VGhpcyBpbXByb3ZlcyB0eXBlIHNhZmV0eSwgYW5kIGFzc2lzdHMgaW4gZ2V0dGluZyBwb2ludGVy
IHRhZ2dpbmcKKyAgICAgICAgICAgcmlnaHQgbGF0ZXIuCisKKyAgICAgICAgNy4gQWRkZWQgdmVy
c2lvbnMgb2YgSklUIGNhbGxPcGVyYXRpb25zIG1ldGhvZHMgdGhhdCB3aWxsIHRha2UgYSBQdHJU
YWcuCisgICAgICAgICAgIFRoaXMgaXMgcHJlcGFyYXRpb24gZm9yIG1vcmUgbW9yZSBwb2ludGVy
IHRhZ2dpbmcgd29yayBsYXRlci4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bGlua0NhbGwpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6OmxpbmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpGdW5jdGlvblB0
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChKU0M6
OlJldHVybkFkZHJlc3NQdHI6OlJldHVybkFkZHJlc3NQdHIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OnJldGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpyZXRhZ2dlZENvZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvblB0cjo6dmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpsaW5r
Q2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0OjpjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2XzY0OjpsaW5rQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxs
Q29udGV4dDo6bWFrZUNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwuaDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6RlRMOjpsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpGVEw6OnNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmFwcGVuZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxX
aXRoU2xvd1BhdGhSZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9u
KToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklU
OjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6Y2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAgKiBq
aXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6SklU
OjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KToK
KyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICogaml0L1Nsb3dQYXRoQ2Fs
bC5oOgorICAgICAgICAoSlNDOjpKSVRTbG93UGF0aENhbGw6OkpJVFNsb3dQYXRoQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCk6CisgICAgICAgICogaml0L1RodW5r
R2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAg
ICAgICogcnVudGltZS9QdHJUYWcuaDoKKyAgICAgICAgKEpTQzo6bmV4dFB0clRhZ0lEKToKKyAg
ICAgICAgKEpTQzo6YXNzZXJ0SXNDRnVuY3Rpb25QdHIpOgorICAgICAgICAoSlNDOjphc3NlcnRJ
c051bGxPckNGdW5jdGlvblB0cik6CisgICAgICAgIChKU0M6OmFzc2VydElzTm90VGFnZ2VkKToK
KyAgICAgICAgKEpTQzo6YXNzZXJ0SXNUYWdnZWQpOgorICAgICAgICAoSlNDOjphc3NlcnRJc051
bGxPclRhZ2dlZCk6CisgICAgICAgIChKU0M6OmFzc2VydElzVGFnZ2VkV2l0aCk6CisgICAgICAg
IChKU0M6OmFzc2VydElzTnVsbE9yVGFnZ2VkV2l0aCk6CisgICAgICAgIChKU0M6OnVuaXF1ZVB0
clRhZ0lEKTogRGVsZXRlZC4KKwogMjAxOC0wMy0xOSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFub3RoZXIgcXVpY2sgZml4IGZvciBy
MjI5Njk5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTS5oCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MTQsOSArMTYxNCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCog
Y29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlm
IChjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKLSAgICAgICAgICAgIEFSTUFzc2VtYmxlcjo6
bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIEFSTUFzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgQVJNQXNzZW1i
bGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOworICAg
ICAgICAgICAgQVJNQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBib29s
IHNfaXNWRlBQcmVzZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTI4LDkgKzIxMjgsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAg
ICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAg
ICBBUk12N0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52
YWx1ZSgpKTsKKyAgICAgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxs
Lm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBBUk12N0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBm
dW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFSTXY3QXNzZW1ibGVyOjpsaW5rQ2FsbChj
b2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0K
IAogICAgIGJvb2wgbV9tYWtlSnVtcFBhdGNoYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2
aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsOSArNjUsMTAgQEAgcHVibGlj
OgogICAgIEZ1bmN0aW9uUHRyKCkgeyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgq
dmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBTbG93UGF0aFB0clRhZykKKyAgICBG
dW5jdGlvblB0cihSZXR1cm5UeXBlKCp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9
IENGdW5jdGlvblB0clRhZykKICAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4odmFsdWUsIHRhZykpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1
ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVl
KTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CkBA
IC03Nyw5ICs3OCwxMCBAQCBwdWJsaWM6CiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENB
TEwgJiYgIU9TKFdJTkRPV1MpCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShDREVDTCAq
dmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBTbG93UGF0aFB0clRhZykKKyAgICBG
dW5jdGlvblB0cihSZXR1cm5UeXBlKENERUNMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFn
IHRhZyA9IENGdW5jdGlvblB0clRhZykKICAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0
cjx2b2lkKj4odmFsdWUsIHRhZykpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0
cih2YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZCht
X3ZhbHVlKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAg
ICB9CkBAIC04OSwzOSArOTEsNDcgQEAgcHVibGljOgogI2lmIENPTVBJTEVSX1NVUFBPUlRTKEZB
U1RDQUxMX0NBTExJTkdfQ09OVkVOVElPTikKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVy
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBGdW5jdGlvblB0cihSZXR1cm5UeXBl
KEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9IFNsb3dQYXRoUHRy
VGFnKQorICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoRkFTVENBTEwgKnZhbHVlKShBcmd1bWVu
dHMuLi4pLCBQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFnKQogICAgICAgICA6IG1fdmFsdWUo
dGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKICAgICB7CisgICAgICAgIGFzc2Vy
dElzQ0Z1bmN0aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJ
c05vdFBvaXNvbmVkKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVS
KG1fdmFsdWUpOwogICAgIH0KIAogI2VuZGlmIC8vIENPTVBJTEVSX1NVUFBPUlRTKEZBU1RDQUxM
X0NBTExJTkdfQ09OVkVOVElPTikKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlw
ZT4KLSAgICBleHBsaWNpdCBGdW5jdGlvblB0cihGdW5jdGlvblR5cGUqIHZhbHVlLCBQdHJUYWcg
dGFnID0gU2xvd1BhdGhQdHJUYWcpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQdHJUeXBl
Pjo6dHlwZT46OnZhbHVlPj4KKyAgICBleHBsaWNpdCBGdW5jdGlvblB0cihQdHJUeXBlIHZhbHVl
LCBQdHJUYWcgdGFnKQogICAgICAgICAvLyBVc2luZyBhIEMtY3R5bGUgY2FzdCBoZXJlIHRvIGF2
b2lkIGNvbXBpbGVyIGVycm9yIG9uIFJWVEM6CiAgICAgICAgIC8vIEVycm9yOiAgIzY5NDogcmVp
bnRlcnByZXRfY2FzdCBjYW5ub3QgY2FzdCBhd2F5IGNvbnN0IG9yIG90aGVyIHR5cGUgcXVhbGlm
aWVycwogICAgICAgICAvLyAoSSBndWVzcyBvbiBSVlRDIGZ1bmN0aW9uIHBvaW50ZXJzIGhhdmUg
YSBkaWZmZXJlbnQgY29uc3RuZXNzIHRvIEdDQy9NU1ZDPykKLSAgICAgICAgOiBtX3ZhbHVlKHRh
Z0NvZGVQdHI8dm9pZCo+KHZhbHVlLCB0YWcpKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0
aW9uUHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKICAgICB7CisgICAgICAgIGFzc2VydElzQ0Z1bmN0
aW9uUHRyKHZhbHVlKTsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNv
bmVkKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUp
OwogICAgIH0KIAotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cik7Ci0KLSAgICB2b2lkKiB2YWx1ZSgpIGNvbnN0CisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIo
RnVuY3Rpb25QdHIgb3RoZXIsIFB0clRhZyB0YWcpCisgICAgICAgIDogbV92YWx1ZSh0YWdDRnVu
Y3Rpb25QdHI8dm9pZCo+KG90aGVyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRhZykpCiAgICAgewor
ICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihvdGhlci5leGVjdXRhYmxlQWRkcmVzcygpKTsK
ICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwot
ICAgICAgICByZXR1cm4gcmVtb3ZlQ29kZVB0clRhZyhtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJU
X1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CisKKyAgICBleHBsaWNpdCBGdW5j
dGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOworCiAgICAgdm9pZCogZXhlY3V0YWJsZUFk
ZHJlc3MoKSBjb25zdAogICAgIHsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05v
dFBvaXNvbmVkKG1fdmFsdWUpOwogICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgICB9CiAKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9Cisg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQorCiBwcml2YXRl
OgogICAgIHZvaWQqIG1fdmFsdWUgeyBudWxscHRyIH07CiB9OwpAQCAtMTQ3LDcgKzE1Nyw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uKQotICAgICAgICA6IG1fdmFsdWUoZnVuY3Rpb24udmFsdWUoKSkKKyAgICAg
ICAgOiBtX3ZhbHVlKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpCiAgICAgewogICAgICAg
ICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAg
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CkBAIC0yMTAsNiArMjIwLDExIEBA
IHB1YmxpYzoKIAogICAgIFBvaXNvbmVkTWFzbVB0ciBwb2lzb25lZFB0cigpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXRhZ2dlZChQdHJU
YWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihyZXRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MoKSwgb2xk
VGFnLCBuZXdUYWcpKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gdm9pZCo+
CiAgICAgVCBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0CiAgICAgewpAQCAtMzUxLDcgKzM2Niw3
IEBAIHB1YmxpYzoKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXRhZ2dlZENvZGUoUHRy
VGFnIG9sZFRhZywgUHRyVGFnIG5ld1RhZykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0YWdDb2RlUHRyKG1fY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCBvbGRUYWcsIG5ld1RhZykpOworICAgICAgICByZXR1cm4gbV9jb2RlUHRyLnJldGFn
Z2VkKG9sZFRhZywgbmV3VGFnKTsKICAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CkBA
IC0zODAsNyArMzk1LDYgQEAgaW5saW5lIEZ1bmN0aW9uUHRyOjpGdW5jdGlvblB0cihNYWNyb0Fz
cwogICAgIDogbV92YWx1ZShwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkKIHsKICAgICBQb2lzb25l
ZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7Ci0gICAgQVNTRVJUX1ZBTElE
X0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJN
SVBTLmgJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNTIsOSArMzE1Miw5
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmIChjYWxsLmlzRmxh
Z1NldChDYWxsOjpUYWlsKSkKLSAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6OmxpbmtKdW1wKGNv
ZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBNSVBTQXNz
ZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5r
Q2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAg
TUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAyMjk3
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw5ICszNjksOSBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rp
b24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0gICAg
ICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rp
b24udmFsdWUoKSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNh
bGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBm
dW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua0NhbGwoY29k
ZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAjaWYgT1MoV0lORE9XUykKLSAg
ICBDYWxsIGNhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKCkKKyAgICBDYWxsIGNhbGxXaXRoU2xv
d1BhdGhSZXR1cm5UeXBlKFB0clRhZykKICAgICB7CiAgICAgICAgIC8vIE9uIFdpbjY0LCB3aGVu
IHRoZSByZXR1cm4gdHlwZSBpcyBsYXJnZXIgdGhhbiA4IGJ5dGVzLCB3ZSBuZWVkIHRvIGFsbG9j
YXRlIHNwYWNlIG9uIHRoZSBzdGFjayBmb3IgdGhlIHJldHVybiB2YWx1ZS4KICAgICAgICAgLy8g
T24gZW50cnksIHJjeCBzaG91bGQgY29udGFpbiBhIHBvaW50ZXIgdG8gdGhpcyBzdGFjayBzcGFj
ZS4gVGhlIG90aGVyIHBhcmFtZXRlcnMgYXJlIHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0LApAQCAtMTc3
LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgYWRkNjQoVHJ1c3RlZEltbTMyKDQgKiBzaXpl
b2YoaW50NjRfdCkpLCBYODZSZWdpc3RlcnM6OmVjeCk7CiAKICAgICAgICAgRGF0YUxhYmVsUHRy
IGxhYmVsID0gbW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoUmVn
aXN0ZXIoKSk7Ci0gICAgICAgIENhbGwgcmVzdWx0ID0gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKHNj
cmF0Y2hSZWdpc3RlcigpKSwgQ2FsbDo6TGlua2FibGUpOworICAgICAgICBDYWxsIHJlc3VsdCA9
IENhbGwobV9hc3NlbWJsZXIuY2FsbChzY3JhdGNoUmVnaXN0ZXIoKSwgdGFnKSwgQ2FsbDo6TGlu
a2FibGUpOwogCiAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMig4ICogc2l6ZW9mKGludDY0X3Qp
KSwgWDg2UmVnaXN0ZXJzOjplc3ApOwogCkBAIC0xOTUzLDExICsxOTUzLDExIEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlv
blB0ciBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6
TmVhcikpCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUsIGNhbGwu
bV9sYWJlbC5sYWJlbEF0T2Zmc2V0KC1SRVBBVENIX09GRlNFVF9DQUxMX1IxMSksIGZ1bmN0aW9u
LnZhbHVlKCkpOworICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBj
YWxsLm1fbGFiZWwubGFiZWxBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLCBmdW5j
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUs
IGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBYODZBc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua0NhbGwo
Y29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIFg4NkFz
c2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
Myw5ICs4NjMsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQog
I2VuZGlmCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwogCi0gICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0
LmNhbGwoTm9QdHJUYWcpOworICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklU
T3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vz
c0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIodGhpcy0+YXM8R2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSwgY2FsbFRhZykpOwogICAg
ICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0
ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKQpAQCAtMTAwNywxMSArMTAwOCwx
MiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAg
ICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KT4oYmFzZUdQUik7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgUHRyVGFnIGNh
bGxUYWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNh
bGwoY2FsbFRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHIob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIGNhbGxUYWcp
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9j
YXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CkBAIC0xMDE5LDExICsxMDIx
LDEyIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAg
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpPigKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgLyBzaXplb2Yo
SlNWYWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAg
ICAgICAgICAgICAgICAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKICAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rp
b25QdHIob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIGNhbGxUYWcpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2
aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE4LDkgKzExOCwxMSBAQCBTbG93UGF0aENhbGxL
ZXkgU2xvd1BhdGhDYWxsQ29udGV4dDo6a2V5CiAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSht
X3RodW5rU2F2ZVNldCwgY2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQp
OwogfQogCi1TbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwoVk0mIHZt
LCB2b2lkKiBjYWxsVGFyZ2V0KQorU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1h
a2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25QdHIgY2FsbFRhcmdldCkKIHsKLSAgICBTbG93UGF0aENh
bGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoTm9QdHJUYWcpLCBrZXlXaXRoVGFy
Z2V0KGNhbGxUYXJnZXQpKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcyA9IGNhbGxUYXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihleGVjdXRh
YmxlQWRkcmVzcyk7CisgICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbChtX2pp
dC5jYWxsKE5vUHRyVGFnKSwga2V5V2l0aFRhcmdldChleGVjdXRhYmxlQWRkcmVzcykpOwogCiAg
ICAgbV9qaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtyZXN1bHQsICZ2bV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuaAkocmV2aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gTk9URTogVGhlIGNhbGwgdGhhdCB0aGlzIHJldHVybnMgaXMgYWxyZWFk
eSBnb2luZyB0byBiZSBsaW5rZWQgYnkgdGhlIEpJVCB1c2luZyBhZGRMaW5rVGFzaygpLAogICAg
IC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHlvdSB0byBsaW5rIGl0IHlvdXJzZWxmLgotICAg
IFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbChWTSYsIHZvaWQqIGNhbGxUYXJnZXQpOworICAgIFNsb3dQ
YXRoQ2FsbCBtYWtlQ2FsbChWTSYsIEZ1bmN0aW9uUHRyIGNhbGxUYXJnZXQpOwogCiBwcml2YXRl
OgogICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNv
bnN0OwpAQCAtODQsNyArODQsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICB7
CiAgICAgICAgIFNsb3dQYXRoQ2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQs
IHNpemVvZi4uLihBcmd1bWVudFR5cGVzKSArIDEsIHJlc3VsdEdQUik7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czx2b2lkKEV4ZWNTdGF0ZSosIEFyZ3VtZW50VHlwZXMuLi4pPihhcmd1bWVu
dHMuLi4pOwotICAgICAgICBjYWxsID0gY29udGV4dC5tYWtlQ2FsbCh2bSwgZnVuY3Rpb24udmFs
dWUoKSk7CisgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKHZtLCBmdW5jdGlvbik7CiAg
ICAgfQogICAgIGlmIChleGNlcHRpb25UYXJnZXQpCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+
YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2sodm0pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE1ICsx
MjUsMTcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDA7CisgICAgUHRyVGFnIHRhZyA9
IHB0clRhZyhKSVRUaHVua1B0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgIHJldHVybiBnZW5l
cmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAotICAgICAgICB2bSwgRnVuY3Rpb25QdHIoY29t
cGlsZUZUTE9TUkV4aXQsIE5vUHRyVGFnKSwgIkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5r
IiwgZXh0cmFQb3BzVG9SZXN0b3JlLCBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcmVtZW50
OjpOZWVkZWQpOworICAgICAgICB2bSwgRnVuY3Rpb25QdHIoY29tcGlsZUZUTE9TUkV4aXQsIHRh
ZyksICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwg
RnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKTsKIH0KIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSog
dm0pCiB7CiAgICAgdW5zaWduZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMTsKKyAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgcmV0dXJu
IGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCi0gICAgICAgIHZtLCBGdW5jdGlvblB0
cihjb21waWxlRlRMTGF6eVNsb3dQYXRoLCBOb1B0clRhZyksICJGVEwgbGF6eSBzbG93IHBhdGgg
Z2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVz
dG1lbnRSZXF1aXJlbWVudDo6Tm90TmVlZGVkKTsKKyAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNv
bXBpbGVGVExMYXp5U2xvd1BhdGgsIHRhZyksICJGVEwgbGF6eSBzbG93IHBhdGggZ2VuZXJhdGlv
biB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1
aXJlbWVudDo6Tm90TmVlZGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVyQ2hl
Y2soQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyKQpAQCAtMTk3
LDcgKzE5OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAg
ICAKICAgICByZWdpc3RlckNsb2JiZXJDaGVjayhqaXQsIGtleS5hcmd1bWVudFJlZ2lzdGVycygp
KTsKICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE5vUHRy
VGFnKTsKKyAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgbmV4dFB0
clRhZ0lEKCkpOworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoY2Fs
bFRhZyk7CiAKICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwpAQCAtMjIzLDcg
KzIyNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAgICBq
aXQucmV0KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGtleS5jYWxsVGFy
Z2V0KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGtleS5jYWxs
VGFyZ2V0KCksIGNhbGxUYWcpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgTm9QdHJUYWcsICJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5n
KGtleSkuZGF0YSgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MDQsOCArODA0LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5r
KCkKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fY2FsbHMpIHsKLSAgICAgICAg
aWYgKHJlY29yZC50bykKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20s
IEZ1bmN0aW9uUHRyKHJlY29yZC50bywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICAgICAgaWYgKHJl
Y29yZC5jYWxsZWUpCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCBy
ZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dldEJ5SWRz
LnNpemUoKTsgaS0tOykKQEAgLTkxNyw3ICs5MTcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVFeGNlcHRpb25IYW5kbGVyCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlmCi0gICAgICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChTbG93UGF0aFB0clRhZyksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9u
SGFuZGxlckZyb21DYWxsZXJGcmFtZSwgU2xvd1BhdGhQdHJUYWcpLnZhbHVlKCkpKTsKKyAgICAg
ICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgp
KTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKHRhZyksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9u
SGFuZGxlckZyb21DYWxsZXJGcmFtZSwgdGFnKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSgpKTsKICAgICB9CiAKQEAgLTkzNiw3ICs5MzcsOCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIDEpOwogI2VuZGlm
Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChTbG93UGF0aFB0clRhZyks
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3Vw
RXhjZXB0aW9uSGFuZGxlciwgU2xvd1BhdGhQdHJUYWcpLnZhbHVlKCkpKTsKKyAgICAgICAgUHRy
VGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKHRhZyksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxl
ciwgdGFnKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE2ICs3
MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb207CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0OwotICAgICAgICB2b2lkKiB0bzsKKyAgICAgICAgRnVuY3Rpb25QdHIgY2FsbGVlOwogCiAg
ICAgICAgIENhbGxSZWNvcmQoKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBDYWxs
UmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
LCB2b2lkKiB0byA9IDApCisgICAgICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
ZnJvbSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyIGNhbGxlZSkKICAgICAg
ICAgICAgIDogZnJvbShmcm9tKQogICAgICAgICAgICAgLCBieXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCkKLSAgICAgICAgICAgICwgdG8odG8pCisgICAgICAgICAgICAsIGNhbGxlZShjYWxs
ZWUpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CkBAIC0yNjcsMTggKzI2NywxOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgICAg
ICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbChOb1B0clRh
Zyk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
bV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24udmFsdWUoKSkpOworICAgICAgICAgICAgQ2FsbCBm
dW5jdGlvbkNhbGwgPSBjYWxsKHRhZyk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVuY3Rp
b24sIHRhZykpKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgICAgIH0K
IAogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAgICAgIENhbGwgYXBwZW5kQ2Fs
bFdpdGhTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAg
ICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25Q
dHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhbGwgZnVu
Y3Rpb25DYWxsID0gY2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoKTsKLSAgICAgICAgICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBm
dW5jdGlvbi52YWx1ZSgpKSk7CisgICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxX
aXRoU2xvd1BhdGhSZXR1cm5UeXBlKHRhZyk7CisgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIoZnVu
Y3Rpb24sIHRhZykpKTsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgICAg
IH0KICNlbmRpZgpAQCAtNzA0LDYwICs3MDQsOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93Q2FzZXMsIGl0ZXIs
IG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cik7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7CiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82
NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0cik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0
aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyA9IE5vUHRyVGFnKTsKICNlbmRp
ZgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIpOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0ciwgaW50KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBGdW5jdGlvblB0ciwgaW50KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyLCBQ
dHJUYWcpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnLCBpbnQp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcs
IGludCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgorICAg
ICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBp
bnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJn
dW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOworICAgICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KG9wZXJhdGlvbiwgdGFnLCBy
ZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlv
blRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4K
ICAgICAgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRy
VGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgcmV0
dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCwgYXJncy4uLik7CisgICAg
ICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwot
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbiwgdGFnKTsKICAgICAgICAgfQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVy
YXRpb24sIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgc2V0dXBBcmd1bWVu
dHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgICAgICAgICAgUHRyVGFnIHRhZyA9
IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgdGFnLCBhcmdzLi4uKTsKICAgICAgICAg
fQogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9u
VHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgaW50
IHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3Vt
ZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJhdGlv
biwgdGFnLCByZXN1bHQpOworICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZf
dDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbD4KICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUob3BlcmF0aW9uLCByZXN1bHQpOworICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgdGFnLCByZXN1bHQsIGFyZ3MuLi4pOwogICAgICAg
ICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUu
Li4gQXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIEFy
Z3MuLi4gYXJncykKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBB
cmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24sIHRh
Zyk7CiAgICAgICAgICAgICBzZXR1cFJlc3VsdHMocmVzdWx0UmVncyk7CiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFy
Z3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b24sIHRhZywgYXJncy4uLik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0g
ICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKG9wZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbiwgdGFnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4uLiBhcmdzKQor
ICAgICAgICB7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24sIHRhZywgYXJncy4uLik7
CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbmlwcGV0R2VuZXJhdG9y
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShy
ZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsOSArNzA3LDkgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkg
ewogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdz
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAg
YWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC03
ODAsOSArNzgwLDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAg
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTgyMCwxMSArODIwLDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdz
LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC04ODYsMTEgKzg4Niwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWlj
Pihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBO
b1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDEzLCAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMjAsNyArMTIwLDggQEAgQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwg
SklUOjplbWl0TmFrZWRDYQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVPZmZzZXQgaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsK
LSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNl
dCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIGFzc2VydElzTnVsbE9yVGFn
Z2VkV2l0aChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ2FsbFB0clRhZyk7Cisg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQs
IEZ1bmN0aW9uUHRyKGZ1bmN0aW9uKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKQEAg
LTEyOCw3ICsxMjksOCBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZFRh
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBp
cyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENhbGwoKTsKLSAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIGFzc2VydElzTnVsbE9yVGFnZ2VkV2l0aChmdW5j
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ2FsbFB0clRhZyk7CisgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRy
KGZ1bmN0aW9uKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKQEAgLTE0OSwzNSArMTUx
LDM1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmEKICAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1l
KCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24p
OworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0
YWcpOwogICAgIGV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKICNpZiBP
UyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5
cGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0
dXJuVHlwZShjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnICB0YWcpCiB7CiAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGZ1bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5cGUoZnVuY3Rp
b24sIHRhZyk7CiAgICAgZXhjZXB0aW9uQ2hlY2soKTsKICAgICByZXR1cm4gY2FsbDsKIH0KICNl
bmRpZgogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxX
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlv
biwgUHRyVGFnIHRhZykKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsgLy8gVGhlIGNhbGxl
ZSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0b3BDYWxsRnJhbWUgdG8gdGhlaXIgY2FsbGVy
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcp
OwogICAgIGV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAgICAgcmV0dXJu
IGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
ciBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgaW50IGRzdCkKIHsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24sIHRhZyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAgLTE4Niw5ICsx
ODgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6CiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcs
IGludCBkc3QpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCB0YWcpOwogICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjI5NzEx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChJbnN0cnVjCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0
LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBOb1B0clRhZywgZHN0LCByZWdUMCwgcmVnVDEs
IGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpA
QCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3Ry
dWMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBJ
bnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0g
b3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0Rp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgTm9QdHJUYWcsIHJlZ1QwLCByZWdUMSwg
cmVnVDIsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBj
YWxsOwpAQCAtMTI5MSw4ICsxMjkxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWxXaXRoQ2FjaAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBi
eVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjYWxs
U2l0ZSA6IG1fY2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLnRvKQotICAgICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBGdW5jdGlvblB0cihjYWxsU2l0ZS50bywg
U2xvd1BhdGhQdHJUYWcpKTsKKyAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKKyAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKICAg
ICB9CiAgICAgZ2VuLmZpbmFsaXplKHBhdGNoQnVmZmVyKTsKIApAQCAtMTM0NSw4ICsxMzQ1LDgg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNl
dChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgaWYgKG5lZWRzTGlua0Zvcldy
aXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0gb3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2Fs
bHMubGFzdCgpLmZyb20sIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBTbG93UGF0aFB0
clRhZyk7CisgICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS5jYWxsZWUuZXhlY3V0YWJsZUFk
ZHJlc3MoKSA9PSBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsIFNsb3dQYXRoUHRyVGFnKSk7CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9u
LT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CkBAIC0xMzgxLDggKzEzODEsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoCiAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3MsIGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxl
cik7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9jYWxscykgewotICAgICAg
ICBpZiAoY2FsbFNpdGUudG8pCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRl
LmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRlLnRvLCBTbG93UGF0aFB0clRhZykpOworICAgICAg
ICBpZiAoY2FsbFNpdGUuY2FsbGVlKQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
U2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwogICAgIH0KICAgICBnZW4uZmluYWxpemUocGF0
Y2hCdWZmZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDIyOTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNjcsMTEgKzEwNjcsMTUgQEAgdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2Fs
bHMuc2l6ZSgpKTsKICAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxz
KSB7CisjaWYgQ1BVKEFSTV9USFVNQjIpCiAgICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNh
c2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBj
YWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKICAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQg
Ym90dG9tIGJpdCBidXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNv
cmF0ZWQgYm90dG9tIGJpdC4KICAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0
ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOwotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKAotICAgICAgICAgICAgY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0
cih0YWdDb2RlUHRyKGlzVGFpbENhbGwgPyBjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZGF0YUxvY2F0
aW9uKCkgOiBjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVu
dHJ5UHRyVGFnKSkpOworICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2FsbFRv
Q29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0
ci5jYWxsLCBGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIodGFyZ2V0KSkpOworI2Vs
c2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9u
UHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5yZXRhZ2dlZChDb2RlRW50cnlQdHJUYWcsIE5lYXJD
YWxsUHRyVGFnKSkpOworI2VuZGlmCiAgICAgfQogICAgIGlmIChpc1dlYkFzc2VtYmx5IHx8IEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCiAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bigpLmxhYmVsQXRPZmZzZXQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
bG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ns
b3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1Nsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDExICszNCwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSklUU2xvd1BhdGhDYWxsIHsKIHB1YmxpYzoKLSAgICBKSVRTbG93
UGF0aENhbGwoSklUKiBqaXQsIEluc3RydWN0aW9uKiBwYywgU2xvd1BhdGhGdW5jdGlvbiBzdHVi
KQorICAgIEpJVFNsb3dQYXRoQ2FsbChKSVQqIGppdCwgSW5zdHJ1Y3Rpb24qIHBjLCBTbG93UGF0
aEZ1bmN0aW9uIHNsb3dQYXRoRnVuY3Rpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAg
ICAsIG1fc3R1YihzdHViKQorICAgICAgICAsIG1fc2xvd1BhdGhGdW5jdGlvbihzbG93UGF0aEZ1
bmN0aW9uKQogICAgICAgICAsIG1fcGMocGMpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5j
dGlvblB0cihzbG93UGF0aEZ1bmN0aW9uKTsKICAgICB9CiAKICAgICBKSVQ6OkNhbGwgY2FsbCgp
CkBAIC02MSw4ICs2Miw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPm1vdmUoSklUOjpjYWxs
RnJhbWVSZWdpc3RlciwgSklUOjphcmd1bWVudEdQUjApOwogICAgICAgICBtX2ppdC0+bW92ZShK
SVQ6OlRydXN0ZWRJbW1QdHIobV9wYyksIEpJVDo6YXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAg
ICAgICBKSVQ6OkNhbGwgY2FsbCA9IG1faml0LT5jYWxsKE5vUHRyVGFnKTsKLSAgICAgICAgbV9q
aXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1fYnl0ZWNvZGVPZmZz
ZXQsIG1fc3R1Yi52YWx1ZSgpKSk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU2xvd1Bh
dGhQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgSklUOjpDYWxsIGNhbGwgPSBtX2pp
dC0+Y2FsbCh0YWcpOworICAgICAgICBtX2ppdC0+bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChj
YWxsLCBtX2ppdC0+bV9ieXRlY29kZU9mZnNldCwgRnVuY3Rpb25QdHIobV9zbG93UGF0aEZ1bmN0
aW9uLCB0YWcpKSk7CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAg
ICBtX2ppdC0+YWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTYpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtODIsNyArODQsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgSklUKiBtX2ppdDsKLSAgICBGdW5jdGlvblB0ciBtX3N0dWI7Cisg
ICAgU2xvd1BhdGhGdW5jdGlvbiBtX3Nsb3dQYXRoRnVuY3Rpb247CiAgICAgSW5zdHJ1Y3Rpb24q
IG1fcGM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw4ICs0MTUsOSBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAjZW5kaWYKICAgICBq
aXQubW92ZShKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTSW50ZXJmYWNlSklU
Ojphcmd1bWVudEdQUjApOwogI2VuZGlmCi0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRy
dXN0ZWRJbW1QdHIoRnVuY3Rpb25QdHIob3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24sIE5vUHRy
VGFnKS52YWx1ZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKLSAgICBqaXQuY2FsbChKU0lu
dGVyZmFjZUpJVDo6cmVnVDMsIE5vUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBqaXQubW92ZShKU0lu
dGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uVk1IYW5k
bGVFeGNlcHRpb24sIHRhZykpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMpOworICAgIGppdC5jYWxs
KEpTSW50ZXJmYWNlSklUOjpyZWdUMywgdGFnKTsKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxV
RTMyXzY0KQogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig4KSwg
SlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbGlmIE9TKFdJTkRPV1Mp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkocmV2aXNpb24gMjI5
NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDggQEAgZW51bSBQdHJUYWcgOiB1aW50cHRyX3QgewogICAgIENv
ZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLAogICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcs
CiAgICAgSklUQ29kZVB0clRhZywKKyAgICBKSVRPcGVyYXRpb25QdHJUYWcsCisgICAgSklUVGh1
bmtQdHJUYWcsCiAgICAgTmF0aXZlQ29kZVB0clRhZywKICAgICBTbG93UGF0aFB0clRhZywKIApA
QCAtNTIsOCArNTQsMTAgQEAgZW51bSBQdHJUYWcgOiB1aW50cHRyX3QgewogICAgIFlhcnJCYWNr
dHJhY2tQdHJUYWcsCiB9OwogCit1aW50cHRyX3QgbmV4dFB0clRhZ0lEKCk7CisKICNpZiAhVVNF
KFBPSU5URVJfUFJPRklMSU5HKQotaW5saW5lIHVpbnRwdHJfdCB1bmlxdWVQdHJUYWdJRCgpIHsg
cmV0dXJuIDA7IH0KK2lubGluZSB1aW50cHRyX3QgbmV4dFB0clRhZ0lEKCkgeyByZXR1cm4gMDsg
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBpbmxpbmUgY29uc3RleHByIFB0
clRhZyBwdHJUYWcoQXJndW1lbnRzJiYuLi4pIHsgcmV0dXJuIE5vUHRyVGFnOyB9CkBAIC05NCw2
ICs5OCwxNiBAQCBpbmxpbmUgVCB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgUHRyVHlwZSB1bnRhZ0NGdW5jdGlv
blB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJldHVybiBwdHI7IH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc0NGdW5jdGlvblB0cihQdHJUeXBlKSB7IH0KK3Rl
bXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIo
UHRyVHlwZSkgeyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNO
b3RUYWdnZWQoUHRyVHlwZSkgeyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFz
c2VydElzVGFnZ2VkKFB0clR5cGUpIHsgfQordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9p
ZCBhc3NlcnRJc051bGxPclRhZ2dlZChQdHJUeXBlKSB7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUg
UHRyVHlwZT4gdm9pZCBhc3NlcnRJc1RhZ2dlZFdpdGgoUHRyVHlwZSwgUHRyVGFnKSB7IH0KK3Rl
bXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoKFB0
clR5cGUsIFB0clRhZykgeyB9CisKICNlbmRpZiAvLyAhVVNFKFBPSU5URVJfUFJPRklMSU5HKQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>
<flag name="commit-queue"
          id="354622"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336091</attachid>
            <date>2018-03-19 18:17:30 -0700</date>
            <delta_ts>2018-03-19 22:49:59 -0700</delta_ts>
            <desc>proposed patch w/ 32-bit build fix.</desc>
            <filename>bug-183756.patch</filename>
            <type>text/plain</type>
            <size>51551</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI5NzI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxOC0wMy0xOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBGdW5jdGlvblB0ciBhbmQgdXNlIGl0IGluIHRoZSBKSVQgQ2FsbFJlY29yZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzc1NgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzg2NDEzMzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gRnVuY3Rpb25QdHIgaG9sZCBhIEMvQysrIGZ1bmN0
aW9uIHBvaW50ZXIgYnkgZGVmYXVsdC4gIENoYW5nZSBpdHMgZGVmYXVsdAorICAgICAgICAgICBQ
dHJUYWcgdG8gcmVmbGVjdCB0aGF0LgorCisgICAgICAgIDIuIERlbGV0ZSB0aGUgRnVuY3Rpb25Q
dHI6OnZhbHVlKCkgbWV0aG9kLiAgSXQgaXMgZWZmZWN0aXZlbHkgYSBkdXBsaWNhdGUgb2YKKyAg
ICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MoKS4KKworICAgICAgICAzLiBGaXggdGhlIEZ1bmN0
aW9uUHRyIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IHBvaW50ZXJzIHRvIGJlIGFi
bGUgdG8KKyAgICAgICAgICAgdGFrZSAiYW55IiBwb2ludGVyLiAgImFueSIgaW4gdGhpcyBjYXNl
IG1lYW5zIHRoYXQgdGhlIHBvaW50ZXIgbWF5IG5vdCBiZSB0eXBlZAorICAgICAgICAgICBhcyBh
IEMvQysrIGZ1bmN0aW9uIHRvIHRoZSBDKysgY29tcGlsZXIgKGR1ZSB0byB1cHN0cmVhbSBjYXN0
aW5nIG9yIHVzYWdlIG9mCisgICAgICAgICAgIHZvaWQqIGFzIGEgc3RvcmFnZSB0eXBlKSwgYnV0
IGl0IGlzIHN0aWxsIGV4cGVjdGVkIHRvIGJlIHBvaW50aW5nIHRvIGEgQy9DKysKKyAgICAgICAg
ICAgZnVuY3Rpb24uCisKKyAgICAgICAgNC4gQWRkZWQgYSBGdW5jdGlvblB0ciBjb25zdHJ1Y3Rv
ciB0aGF0IHRha2VzIGFub3RoZXIgRnVuY3Rpb25QdHIuICBUaGlzIGlzIGEKKyAgICAgICAgICAg
Y29udmVuaWVuY2UgY29uc3RydWN0b3IgdGhhdCBsZXRzIHVzIHJldGFnIHRoZSB1bmRlcmx5aW5n
IHBvaW50ZXIuICBUaGUgb3RoZXIKKyAgICAgICAgICAgRnVuY3Rpb25QdHIgaXMgc3RpbGwgZXhw
ZWN0ZWQgdG8gcG9pbnQgdG8gYSBDL0MrKyBmdW5jdGlvbi4KKworICAgICAgICA1LiBBZGRlZCBQ
dHJUYWcgYXNzZXJ0aW9uIHBsYWNlaG9sZGVyIGZ1bmN0aW9ucyB0byBiZSBpbXBsZW1lbnRlZCBs
YXRlci4KKworICAgICAgICA2LiBDaGFuZ2UgdGhlIEpJVCBDYWxsUmVjb3JkIHRvIGVtYmVkIGEg
RnVuY3Rpb25QdHIgY2FsbGVlIGluc3RlYWQgb2YgYSB2b2lkKiB0bworICAgICAgICAgICBwb2lu
dGVyLiAgVGhpcyBpbXByb3ZlcyB0eXBlIHNhZmV0eSwgYW5kIGFzc2lzdHMgaW4gZ2V0dGluZyBw
b2ludGVyIHRhZ2dpbmcKKyAgICAgICAgICAgcmlnaHQgbGF0ZXIuCisKKyAgICAgICAgNy4gQWRk
ZWQgdmVyc2lvbnMgb2YgSklUIGNhbGxPcGVyYXRpb25zIG1ldGhvZHMgdGhhdCB3aWxsIHRha2Ug
YSBQdHJUYWcuCisgICAgICAgICAgIFRoaXMgaXMgcHJlcGFyYXRpb24gZm9yIG1vcmUgbW9yZSBw
b2ludGVyIHRhZ2dpbmcgd29yayBsYXRlci4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bGlua0NhbGwp
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmxpbmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpGdW5j
dGlvblB0cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHRyOjpvcGVyYXRvciBib29sIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAg
IChKU0M6OlJldHVybkFkZHJlc3NQdHI6OlJldHVybkFkZHJlc3NQdHIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OnJldGFnZ2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpyZXRhZ2dlZENvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpGdW5jdGlvblB0cjo6dmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBT
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0OjpjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZSk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2XzY0OjpsaW5rQ2FsbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAg
ICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1Bh
dGhDYWxsQ29udGV4dDo6bWFrZUNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwu
aDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRM
VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OnNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVu
ZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6SklUOjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAg
ICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKiBq
aXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZENhbGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZFRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKToKKyAgICAgICAgKEpT
Qzo6SklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9y
cGhpY0NhbGwpOgorICAgICAgICAqIGppdC9TbG93UGF0aENhbGwuaDoKKyAgICAgICAgKEpTQzo6
SklUU2xvd1BhdGhDYWxsOjpKSVRTbG93UGF0aENhbGwpOgorICAgICAgICAoSlNDOjpKSVRTbG93
UGF0aENhbGw6OmNhbGwpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAg
ICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUHRyVGFn
Lmg6CisgICAgICAgIChKU0M6Om5leHRQdHJUYWdJRCk6CisgICAgICAgIChKU0M6OmFzc2VydElz
Q0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6YXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIp
OgorICAgICAgICAoSlNDOjphc3NlcnRJc05vdFRhZ2dlZCk6CisgICAgICAgIChKU0M6OmFzc2Vy
dElzVGFnZ2VkKToKKyAgICAgICAgKEpTQzo6YXNzZXJ0SXNOdWxsT3JUYWdnZWQpOgorICAgICAg
ICAoSlNDOjphc3NlcnRJc1RhZ2dlZFdpdGgpOgorICAgICAgICAoSlNDOjphc3NlcnRJc051bGxP
clRhZ2dlZFdpdGgpOgorICAgICAgICAoSlNDOjp1bmlxdWVQdHJUYWdJRCk6IERlbGV0ZWQuCisK
IDIwMTgtMDMtMTkgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCBhbm90aGVyIHF1aWNrIGZpeCBmb3IgcjIyOTY5OQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAko
cmV2aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE0LDkgKzE2MTQsOSBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6VGFpbCkpCi0gICAgICAgICAgICBBUk1Bc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwu
bV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBBUk1Bc3NlbWJsZXI6Omxp
bmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFSTUFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwg
Y2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFSTUFzc2VtYmxl
cjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzX2lzVkZQUHJlc2VudDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMjEyOCw5
ICsyMTI4LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2Rl
LCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgaWYgKGNh
bGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQotICAgICAgICAgICAgQVJNdjdBc3NlbWJsZXI6Omxp
bmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAg
ICBBUk12N0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgQVJNdjdBc3Nl
bWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7Cisg
ICAgICAgICAgICBBUk12N0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKICAgICBib29sIG1fbWFrZUp1
bXBQYXRjaGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDkgKzY1LDEwIEBAIHB1YmxpYzoKICAgICBGdW5jdGlvblB0cigp
IHsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoKnZhbHVlKShBcmd1bWVudHMuLi4p
LCBQdHJUYWcgdGFnID0gU2xvd1BhdGhQdHJUYWcpCisgICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlw
ZSgqdmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJUYWcpCiAg
ICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcpKQogICAg
IHsKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOwogICAgICAgICBQb2lzb25l
ZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9W
QUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQpAQCAtNzcsOSArNzgsMTAgQEAgcHVi
bGljOgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dTKQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoQ0RFQ0wgKnZhbHVlKShBcmd1bWVudHMuLi4p
LCBQdHJUYWcgdGFnID0gU2xvd1BhdGhQdHJUYWcpCisgICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlw
ZShDREVDTCAqdmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJU
YWcpCiAgICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcp
KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOwogICAgICAgICBQ
b2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIEFT
U0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQpAQCAtODksMzkgKzkxLDQ3
IEBAIHB1YmxpYzoKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZF
TlRJT04pCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBB
cmd1bWVudHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShGQVNUQ0FMTCAqdmFsdWUpKEFy
Z3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBTbG93UGF0aFB0clRhZykKKyAgICBGdW5jdGlvblB0
cihSZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9
IENGdW5jdGlvblB0clRhZykKICAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4odmFsdWUsIHRhZykpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1
ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVl
KTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAK
ICNlbmRpZiAvLyBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZFTlRJT04p
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci0gICAgZXhwbGljaXQgRnVu
Y3Rpb25QdHIoRnVuY3Rpb25UeXBlKiB2YWx1ZSwgUHRyVGFnIHRhZyA9IFNsb3dQYXRoUHRyVGFn
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX2Z1bmN0aW9u
PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8UHRyVHlwZT46OnR5cGU+Ojp2YWx1ZT4+Cisg
ICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoUHRyVHlwZSB2YWx1ZSwgUHRyVGFnIHRhZykKICAgICAg
ICAgLy8gVXNpbmcgYSBDLWN0eWxlIGNhc3QgaGVyZSB0byBhdm9pZCBjb21waWxlciBlcnJvciBv
biBSVlRDOgogICAgICAgICAvLyBFcnJvcjogICM2OTQ6IHJlaW50ZXJwcmV0X2Nhc3QgY2Fubm90
IGNhc3QgYXdheSBjb25zdCBvciBvdGhlciB0eXBlIHF1YWxpZmllcnMKICAgICAgICAgLy8gKEkg
Z3Vlc3Mgb24gUlZUQyBmdW5jdGlvbiBwb2ludGVycyBoYXZlIGEgZGlmZmVyZW50IGNvbnN0bmVz
cyB0byBHQ0MvTVNWQz8pCi0gICAgICAgIDogbV92YWx1ZSh0YWdDb2RlUHRyPHZvaWQqPih2YWx1
ZSwgdGFnKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4odmFsdWUs
IHRhZykpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7CiAgICAg
ICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKICAgICAg
ICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKLSAgICBleHBs
aWNpdCBGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwotCi0gICAgdm9pZCogdmFs
dWUoKSBjb25zdAorICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKEZ1bmN0aW9uUHRyIG90aGVyLCBQ
dHJUYWcgdGFnKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihvdGhl
ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0YWcpKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDRnVu
Y3Rpb25QdHIob3RoZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIFBvaXNvbmVkTWFz
bVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlbW92
ZUNvZGVQdHJUYWcobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIo
bV92YWx1ZSk7CiAgICAgfQorCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKTsKKwogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QKICAgICB7
CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsK
ICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkKiBtX3ZhbHVl
IHsgbnVsbHB0ciB9OwogfTsKQEAgLTE0Nyw3ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0ciBmdW5jdGlvbikKLSAgICAg
ICAgOiBtX3ZhbHVlKGZ1bmN0aW9uLnZhbHVlKCkpCisgICAgICAgIDogbV92YWx1ZShmdW5jdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKQogICAgIHsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjph
c3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9Q
T0lOVEVSKG1fdmFsdWUpOwpAQCAtMjEwLDYgKzIyMCwxMSBAQCBwdWJsaWM6CiAKICAgICBQb2lz
b25lZE1hc21QdHIgcG9pc29uZWRQdHIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRyVGFnIG5l
d1RhZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
cmV0YWdDb2RlUHRyKGV4ZWN1dGFibGVBZGRyZXNzKCksIG9sZFRhZywgbmV3VGFnKSk7CisgICAg
fQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgogICAgIFQgZXhlY3V0YWJsZUFk
ZHJlc3MoKSBjb25zdAogICAgIHsKQEAgLTM1MSw3ICszNjYsNyBAQCBwdWJsaWM6CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmV0YWdnZWRDb2RlKFB0clRhZyBvbGRUYWcsIFB0clRhZyBu
ZXdUYWcpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KHJldGFnQ29kZVB0cihtX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgb2xkVGFnLCBuZXdU
YWcpKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZVB0ci5yZXRhZ2dlZChvbGRUYWcsIG5ld1RhZyk7
CiAgICAgfQogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdApAQCAtMzgwLDcgKzM5NSw2IEBAIGlu
bGluZSBGdW5jdGlvblB0cjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3MKICAgICA6IG1fdmFsdWUocHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCkpCiB7CiAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05v
dFBvaXNvbmVkKG1fdmFsdWUpOwotICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAyMjk3
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQ
Uy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUyLDkgKzMxNTIsOSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkpCi0g
ICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1
bmN0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0p1bXAoY29k
ZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xh
YmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6OmxpbmtD
YWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgfQogCiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjksOSArMzY5LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lk
KiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAg
aWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQotICAgICAgICAgICAgWDg2QXNzZW1ibGVy
OjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAg
ICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBYODZBc3Nl
bWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7Cisg
ICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVu
Y3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAg
cHVibGljOgogICAgIH0KIAogI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2FsbCBjYWxsV2l0aFNsb3dQ
YXRoUmV0dXJuVHlwZSgpCisgICAgQ2FsbCBjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlwZShQdHJU
YWcpCiAgICAgewogICAgICAgICAvLyBPbiBXaW42NCwgd2hlbiB0aGUgcmV0dXJuIHR5cGUgaXMg
bGFyZ2VyIHRoYW4gOCBieXRlcywgd2UgbmVlZCB0byBhbGxvY2F0ZSBzcGFjZSBvbiB0aGUgc3Rh
Y2sgZm9yIHRoZSByZXR1cm4gdmFsdWUuCiAgICAgICAgIC8vIE9uIGVudHJ5LCByY3ggc2hvdWxk
IGNvbnRhaW4gYSBwb2ludGVyIHRvIHRoaXMgc3RhY2sgc3BhY2UuIFRoZSBvdGhlciBwYXJhbWV0
ZXJzIGFyZSBzaGlmdGVkIHRvIHRoZSByaWdodCwKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwgWDg2UmVn
aXN0ZXJzOjplY3gpOwogCiAgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0
Y2goVHJ1c3RlZEltbVB0cihudWxscHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBD
YWxsIHJlc3VsdCA9IENhbGwobV9hc3NlbWJsZXIuY2FsbChzY3JhdGNoUmVnaXN0ZXIoKSksIENh
bGw6OkxpbmthYmxlKTsKKyAgICAgICAgQ2FsbCByZXN1bHQgPSBDYWxsKG1fYXNzZW1ibGVyLmNh
bGwoc2NyYXRjaFJlZ2lzdGVyKCksIHRhZyksIENhbGw6OkxpbmthYmxlKTsKIAogICAgICAgICBh
ZGQ2NChUcnVzdGVkSW1tMzIoOCAqIHNpemVvZihpbnQ2NF90KSksIFg4NlJlZ2lzdGVyczo6ZXNw
KTsKIApAQCAtMTk1MywxMSArMTk1MywxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGxp
bmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAg
ewogICAgICAgICBpZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQotICAgICAgICAgICAg
WDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxBdE9mZnNl
dCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIFg4NkFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5tX2xhYmVsLmxhYmVsQXRP
ZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQotICAg
ICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0
aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBj
YWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwg
ZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNv
ZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAkocmV2aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsOSArODYzLDEwIEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICNlbmRpZgogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1l
KTsKIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAg
ICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKGNhbGxU
YWcpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBG
dW5jdGlvblB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3VzdG9tQWNj
ZXNzb3Iub3BhcXVlKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlv
bkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9j
dXN0b21BY2Nlc3Nvci5vcGFxdWUsIGNhbGxUYWcpKTsKICAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21BY2Nlc3NvckdldHRlcikKQEAgLTEwMDcsMTEgKzEwMDgsMTIgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIGlmICghcmVhbGxvY2F0
aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRp
YWxDYXBhY2l0eSk+KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChOb1B0
clRhZyk7CisgICAgICAgICAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOwogICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0
eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBjYWxsVGFnKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRoZSBvbGQg
c3RydWN0dXJlL2J1dHRlcmZseQpAQCAtMTAxOSwxMSArMTAyMSwxMiBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKT4oCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgUHRy
VGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0g
aml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93
UHJvcGVydHlTdG9yYWdlLCBjYWxsVGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExOCw5ICsxMTgsMTEgQEAgU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRl
eHQ6OmtleQogICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkobV90aHVua1NhdmVTZXQsIGNhbGxU
YXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1fb2Zmc2V0KTsKIH0KIAotU2xvd1BhdGhDYWxs
IFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgdm9pZCogY2FsbFRhcmdldCkK
K1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIEZ1bmN0
aW9uUHRyIGNhbGxUYXJnZXQpCiB7Ci0gICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRo
Q2FsbChtX2ppdC5jYWxsKE5vUHRyVGFnKSwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0KSk7Cisg
ICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxsVGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZXhlY3V0YWJsZUFkZHJlc3MpOworICAgIFNs
b3dQYXRoQ2FsbCByZXN1bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbChOb1B0clRhZyksIGtl
eVdpdGhUYXJnZXQoZXhlY3V0YWJsZUFkZHJlc3MpKTsKIAogICAgIG1faml0LmFkZExpbmtUYXNr
KAogICAgICAgICBbcmVzdWx0LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9u
IDIyOTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE5PVEU6
IFRoZSBjYWxsIHRoYXQgdGhpcyByZXR1cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8gYmUgbGlua2Vk
IGJ5IHRoZSBKSVQgdXNpbmcgYWRkTGlua1Rhc2soKSwKICAgICAvLyBzbyB0aGVyZSBpcyBubyBu
ZWVkIGZvciB5b3UgdG8gbGluayBpdCB5b3Vyc2VsZi4KLSAgICBTbG93UGF0aENhbGwgbWFrZUNh
bGwoVk0mLCB2b2lkKiBjYWxsVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0m
LCBGdW5jdGlvblB0ciBjYWxsVGFyZ2V0KTsKIAogcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxL
ZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKQEAgLTg0LDcgKzg0LDcg
QEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgewogICAgICAgICBTbG93UGF0aENh
bGxDb250ZXh0IGNvbnRleHQodXNlZFJlZ2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJndW1lbnRU
eXBlcykgKyAxLCByZXN1bHRHUFIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8dm9pZChF
eGVjU3RhdGUqLCBBcmd1bWVudFR5cGVzLi4uKT4oYXJndW1lbnRzLi4uKTsKLSAgICAgICAgY2Fs
bCA9IGNvbnRleHQubWFrZUNhbGwodm0sIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAgICBjYWxs
ID0gY29udGV4dC5tYWtlQ2FsbCh2bSwgZnVuY3Rpb24pOwogICAgIH0KICAgICBpZiAoZXhjZXB0
aW9uVGFyZ2V0KQogICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2Vw
dGlvbkNoZWNrKHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5r
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3Mu
Y3BwCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRo
dW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxNSArMTI1LDE3IEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmUKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICB1bnNpZ25lZCBleHRy
YVBvcHNUb1Jlc3RvcmUgPSAwOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUVGh1bmtQdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dl
bmVyYXRvcigKLSAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0LCBOb1B0
clRhZyksICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9y
ZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKTsKKyAgICAgICAg
dm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0LCB0YWcpLCAiRlRMIE9TUiBleGl0IGdl
bmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5
U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVuc2lnbmVk
IGV4dHJhUG9wc1RvUmVzdG9yZSA9IDE7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRUaHVu
a1B0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKAotICAgICAgICB2bSwgRnVuY3Rpb25QdHIoY29tcGlsZUZUTExhenlTbG93
UGF0aCwgTm9QdHJUYWcpLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBl
eHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5v
dE5lZWRlZCk7CisgICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxlRlRMTGF6eVNsb3dQYXRo
LCB0YWcpLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNU
b1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5vdE5lZWRlZCk7
CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFzc2VtYmx5SGVscGVycyYg
aml0LCBSZWdpc3RlclNldCBkb250Q2xvYmJlcikKQEAgLTE5Nyw3ICsxOTksOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgCiAgICAgcmVnaXN0ZXJDbG9i
YmVyQ2hlY2soaml0LCBrZXkuYXJndW1lbnRSZWdpc3RlcnMoKSk7CiAgICAgCi0gICAgQXNzZW1i
bHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgUHRyVGFnIGNh
bGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBBc3Nl
bWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOwogCiAgICAgaml0Lmxv
YWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKQEAgLTIyMyw3ICsyMjYsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgaml0LnJldCgpOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpLCBjYWxsVGFnKSk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAiRlRMIHNs
b3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhrZXkpLmRhdGEoKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA0LDgg
KzgwNCw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgZm9y
IChhdXRvJiByZWNvcmQgOiBtX2NhbGxzKSB7Ci0gICAgICAgIGlmIChyZWNvcmQudG8pCi0gICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCBGdW5jdGlvblB0cihyZWNvcmQu
dG8sIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgICAgIGlmIChyZWNvcmQuY2FsbGVlKQorICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAg
fQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9nZXRCeUlkcy5zaXplKCk7IGktLTspCkBAIC05
MTcsNyArOTE3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgog
ICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxs
UmVjb3JkKGNhbGwoU2xvd1BhdGhQdHJUYWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUsIFNsb3dQYXRoUHRyVGFnKS52YWx1ZSgpKSk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUsIHRhZykpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAg
fQogCkBAIC05MzYsNyArOTM3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9u
SGFuZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBv
a2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBtX2NhbGxzLmFw
cGVuZChDYWxsUmVjb3JkKGNhbGwoU2xvd1BhdGhQdHJUYWcpLCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIFNs
b3dQYXRoUHRyVGFnKS52YWx1ZSgpKSk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklU
T3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpKTsKICAgICAgICAg
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNiArNzAsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgc3RydWN0IENhbGxSZWNvcmQgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBmcm9tOwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKLSAgICAgICAgdm9pZCog
dG87CisgICAgICAgIEZ1bmN0aW9uUHRyIGNhbGxlZTsKIAogICAgICAgICBDYWxsUmVjb3JkKCkK
ICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBmcm9tLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdm9pZCogdG8gPSAwKQorICAg
ICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBGdW5jdGlvblB0ciBjYWxsZWUpCiAgICAgICAgICAgICA6IGZyb20oZnJvbSkK
ICAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAg
ICAsIHRvKHRvKQorICAgICAgICAgICAgLCBjYWxsZWUoY2FsbGVlKQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICB9OwpAQCAtMjY3LDE4ICsyNjcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQg
Y29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgICAgIENhbGwgYXBwZW5kQ2Fs
bChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNv
bnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoTm9QdHJUYWcpOwotICAgICAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIGZ1
bmN0aW9uLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCh0
YWcpOworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGws
IG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAKICNpZiBPUyhXSU5ET1dTKSAm
JiBDUFUoWDg2XzY0KQotICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5U
eXBlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgICAgICBDYWxsIGFwcGVuZENhbGxX
aXRoU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcg
dGFnKQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxXaXRo
U2xvd1BhdGhSZXR1cm5UeXBlKCk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24udmFsdWUoKSkpOwor
ICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlw
ZSh0YWcpOworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNh
bGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTcwNCw2
MCArNzA0LDk2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KG1fc2xvd0Nhc2VzLCBpdGVyLCBtX2J5dGVjb2RlT2Zmc2V0KTsK
ICAgICAgICAgfQogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHIpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyLCBQ
dHJUYWcpOwogI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVy
blR5cGUoY29uc3QgRnVuY3Rpb25QdHIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1
bmN0aW9uUHRyLCBQdHJUYWcgPSBOb1B0clRhZyk7CiAjZW5kaWYKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIsIGlu
dCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIsIGludCk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZywgaW50KTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBGdW5jdGlvblB0ciwgUHRyVGFnLCBpbnQpOwogICAgICAgICAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KKyAgICAgICAgY2FsbE9wZXJhdGlvbihP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUHRyVGFnIHRhZywgaW50IHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBl
PihhcmdzLi4uKTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHRhZywgcmVzdWx0KTsKKyAgICAgICAgfQor
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNhbGxPcGVyYXRp
b24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgeworICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgdGFnLCByZXN1bHQsIGFyZ3MuLi4pOworICAgICAgICB9CisKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgUHRyVGFnIHRhZywgQXJncy4uLiBhcmdzKQorICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24sIHRhZyk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3Mp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFy
Z3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9u
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHRhZywgYXJncy4uLik7CiAgICAgICAgIH0KIAorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsPgorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIGludCByZXN1bHQsIEFyZ3MuLi4gYXJn
cykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4o
YXJncy4uLik7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShvcGVyYXRpb24sIHRhZywgcmVzdWx0KTsKKyAg
ICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CiAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG9wZXJhdGlvbiwgcmVz
dWx0KTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFn
LCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHRhZywgcmVzdWx0LCBhcmdzLi4uKTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5
cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uLCB0YWcpOwogICAgICAgICAgICAgc2V0
dXBSZXN1bHRzKHJlc3VsdFJlZ3MpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwog
ICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0
aW9uLCB0YWcpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBB
cmdzLi4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
SklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uLCB0YWcsIGFyZ3MuLi4pOwor
ICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBQdHJUYWcgdGFnLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24pOworICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihvcGVyYXRpb24sIHRhZyk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAg
ICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24ob3BlcmF0aW9uLCB0YWcsIGFyZ3MuLi4pOwogICAgICAgICB9CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjI5NzExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzA3LDkgKzcwNyw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9u
UHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0
UmVncywgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtNzgwLDkgKzc4MCw5IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
ICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoSnVtcHMpOwogCkBAIC04MjAsMTEgKzgyMCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxk
U2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIE5v
UHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xv
d1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtODg2LDExICs4ODYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fRUpKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRj
aEZ1bmN0aW9uKSwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBh
dXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIw
LDcgKzEyMCw4IEBAIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2EKIHsK
ICAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNl
dC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIGZ1bmN0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBhc3NlcnRJc051bGxPclRhZ2dlZFdpdGgoZnVuY3Rpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgTmVhckNhbGxQdHJUYWcpOworICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlv
bikpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQogCkBAIC0xMjgsNyArMTI5LDggQEAgQUxX
QVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRUYQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgogICAgIENhbGwgbmFr
ZWRDYWxsID0gbmVhclRhaWxDYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChu
YWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKKyAgICBhc3NlcnRJc051bGxPclRhZ2dlZFdpdGgoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSwgTmVhckNhbGxQdHJUYWcpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFr
ZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihmdW5jdGlvbikpKTsKICAgICBy
ZXR1cm4gbmFrZWRDYWxsOwogfQogCkBAIC0xNDksMzUgKzE1MSwzNSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhCiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbikKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQ
dHJUYWcgdGFnKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAgICBleGNlcHRpb25D
aGVjaygpOwogICAgIHJldHVybiBjYWxsOwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4
Nl82NCkKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRy
IGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIFB0clRhZyAgdGFnKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aFNsb3dQYXRo
UmV0dXJuVHlwZShmdW5jdGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGZ1bmN0aW9uLCB0YWcpOwogICAgIGV4Y2Vw
dGlvbkNoZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAjZW5kaWYKIAotQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbikKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCiB7CiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7IC8vIFRoZSBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9y
IHNldHRpbmcgdG9wQ2FsbEZyYW1lIHRvIHRoZWlyIGNhbGxlcgotICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAgICBleGNlcHRpb25DaGVj
a1dpdGhDYWxsRnJhbWVSb2xsYmFjaygpOwogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIGludCBkc3Qp
CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24s
IFB0clRhZyB0YWcsIGludCBkc3QpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCB0
YWcpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCkBAIC0xODYsOSArMTg4LDkgQEAgQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBpbnQgZHN0KQogewotICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1
bmN0aW9uKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhmdW5jdGlvbiwgdGFnKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyMjk3MTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjgsMTQgKzU2OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjCiAgICAgcG9rZShyZWdUMSwgcG9rZU9mZnNldCsrKTsKICAgICBwb2tlKHJl
Z1QwLCBwb2tlT2Zmc2V0KyspOwogICAgIHBva2UoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBw
b2tlT2Zmc2V0KyspOwotICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxPcHRpbWl6ZSk7CisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbE9wdGltaXplLCBOb1B0clRhZyk7CiAjZWxzZQogICAgIC8vIFRoZSByZWdp
c3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGlu
ZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0
Zm9ybXMuCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIEpTVmFsdWVS
ZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1Q1LCByZWdUNCksIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbE9wdGltaXplLCBOb1B0clRhZywgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJ
bmZvKTsKICNlbmRpZgogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMjk3
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKEluc3RydWMKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIE5vUHRyVGFnLCBkc3QsIHJlZ1QwLCByZWdU
MSwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7
CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5z
dHJ1YwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgYm9vbCBpc0RpcmVjdCA9
IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsT3B0aW1pemUsIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplLCBOb1B0clRhZywgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9
IGNhbGw7CkBAIC0xMjkxLDggKzEyOTEsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbFdpdGhDYWNoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRpb25DaGVja3Ms
IGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNh
bGxTaXRlIDogbV9jYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUudG8pCi0gICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRlLnRv
LCBTbG93UGF0aFB0clRhZykpOworICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVlKQorICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5jYWxsZWUpOwog
ICAgIH0KICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCkBAIC0xMzQ1LDggKzEzNDUs
OCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBpZiAobmVlZHNMaW5rRm9y
V3JpdGVCYXJyaWVyKSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxzLmxhc3QoKS50byA9PSBvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9j
YWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIFNsb3dQYXRo
UHRyVGFnKTsKKyAgICAgICAgQVNTRVJUKG1fY2FsbHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxl
QWRkcmVzcygpID09IG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsKKyAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBGdW5jdGlvblB0cihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgU2xvd1BhdGhQdHJUYWcpKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBpc0RpcmVjdCA9IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rp
b24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKQEAgLTEzODEsOCArMTM4MSw4
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5k
bGVyKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2NhbGxzKSB7Ci0gICAg
ICAgIGlmIChjYWxsU2l0ZS50bykKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNp
dGUuZnJvbSwgRnVuY3Rpb25QdHIoY2FsbFNpdGUudG8sIFNsb3dQYXRoUHRyVGFnKSk7CisgICAg
ICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7CiAgICAgfQogICAgIGdlbi5maW5hbGl6ZShw
YXRjaEJ1ZmZlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMjI5NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2NywxMSArMTA2NywxNSBAQCB2b2lkIGxpbmtQb2x5bW9y
cGhpY0NhbGwoCiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbENhc2VzLnNpemUoKSA9PSBj
YWxscy5zaXplKCkpOwogICAgIGZvciAoQ2FsbFRvQ29kZVB0ciBjYWxsVG9Db2RlUHRyIDogY2Fs
bHMpIHsKKyNpZiBDUFUoQVJNX1RIVU1CMikKICAgICAgICAgLy8gVGFpbCBjYWxsIHNwZWNpYWwt
Y2FzaW5nIGVuc3VyZXMgcHJvcGVyIGxpbmtpbmcgb24gQVJNIFRodW1iMiwgd2hlcmUgYSB0YWls
IGNhbGwganVtcHMgdG8gYW4gYWRkcmVzcwogICAgICAgICAvLyB3aXRoIGEgbm9uLWRlY29yYXRl
ZCBib3R0b20gYml0IGJ1dCBhIG5vcm1hbCBjYWxsIGNhbGxzIGFuIGFkZHJlc3Mgd2l0aCBhIGRl
Y29yYXRlZCBib3R0b20gYml0LgogICAgICAgICBib29sIGlzVGFpbENhbGwgPSBjYWxsVG9Db2Rl
UHRyLmNhbGwuaXNGbGFnU2V0KENDYWxsSGVscGVyczo6Q2FsbDo6VGFpbCk7Ci0gICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9u
UHRyKHRhZ0NvZGVQdHIoaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9j
YXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2Rl
RW50cnlQdHJUYWcpKSk7CisgICAgICAgIHZvaWQqIHRhcmdldCA9IGlzVGFpbENhbGwgPyBjYWxs
VG9Db2RlUHRyLmNvZGVQdHIuZGF0YUxvY2F0aW9uKCkgOiBjYWxsVG9Db2RlUHRyLmNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2Rl
UHRyLmNhbGwsIEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cih0YXJnZXQpKSk7Cisj
ZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rp
b25QdHIoY2FsbFRvQ29kZVB0ci5jb2RlUHRyLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgTmVh
ckNhbGxQdHJUYWcpKSk7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKGlzV2ViQXNzZW1ibHkgfHwg
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0
aW9uKCkubGFiZWxBdE9mZnNldCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1Nsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTEgKzM0LDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBKSVRTbG93UGF0aENhbGwgewogcHVibGljOgotICAgIEpJVFNs
b3dQYXRoQ2FsbChKSVQqIGppdCwgSW5zdHJ1Y3Rpb24qIHBjLCBTbG93UGF0aEZ1bmN0aW9uIHN0
dWIpCisgICAgSklUU2xvd1BhdGhDYWxsKEpJVCogaml0LCBJbnN0cnVjdGlvbiogcGMsIFNsb3dQ
YXRoRnVuY3Rpb24gc2xvd1BhdGhGdW5jdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAg
ICAgICwgbV9zdHViKHN0dWIpCisgICAgICAgICwgbV9zbG93UGF0aEZ1bmN0aW9uKHNsb3dQYXRo
RnVuY3Rpb24pCiAgICAgICAgICwgbV9wYyhwYykKICAgICB7CisgICAgICAgIGFzc2VydElzQ0Z1
bmN0aW9uUHRyKHNsb3dQYXRoRnVuY3Rpb24pOwogICAgIH0KIAogICAgIEpJVDo6Q2FsbCBjYWxs
KCkKQEAgLTYxLDggKzYyLDkgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+bW92ZShKSVQ6OmNh
bGxGcmFtZVJlZ2lzdGVyLCBKSVQ6OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1faml0LT5tb3Zl
KEpJVDo6VHJ1c3RlZEltbVB0cihtX3BjKSwgSklUOjphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0g
ICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gbV9qaXQtPmNhbGwoTm9QdHJUYWcpOwotICAgICAgICBt
X2ppdC0+bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBtX2ppdC0+bV9ieXRlY29kZU9m
ZnNldCwgbV9zdHViLnZhbHVlKCkpKTsKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTbG93
UGF0aFB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IG1f
aml0LT5jYWxsKHRhZyk7CisgICAgICAgIG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGNhbGwsIG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0cihtX3Nsb3dQYXRoRnVu
Y3Rpb24sIHRhZykpKTsKIAogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIG1faml0LT5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxNiksIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC04Miw3ICs4NCw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBKSVQqIG1faml0OwotICAgIEZ1bmN0aW9uUHRyIG1fc3R1YjsK
KyAgICBTbG93UGF0aEZ1bmN0aW9uIG1fc2xvd1BhdGhGdW5jdGlvbjsKICAgICBJbnN0cnVjdGlv
biogbV9wYzsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDIyOTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE1LDggKzQxNSw5
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICNlbmRpZgogICAg
IGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VK
SVQ6OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6
VHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgTm9Q
dHJUYWcpLnZhbHVlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5jYWxsKEpT
SW50ZXJmYWNlSklUOjpyZWdUMywgTm9QdHJUYWcpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
RXhjZXB0aW9uSGFuZGxlclB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIGppdC5tb3ZlKEpT
SW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25WTUhh
bmRsZUV4Y2VwdGlvbiwgdGFnKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CisgICAgaml0LmNh
bGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCB0YWcpOwogI2lmIENQVShYODYpICYmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgp
LCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgT1MoV0lORE9X
UykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCShyZXZpc2lvbiAy
Mjk3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQCBlbnVtIFB0clRhZyA6IHVpbnRwdHJfdCB7CiAgICAg
Q29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsCiAgICAgRXhjZXB0aW9uSGFuZGxlclB0clRh
ZywKICAgICBKSVRDb2RlUHRyVGFnLAorICAgIEpJVE9wZXJhdGlvblB0clRhZywKKyAgICBKSVRU
aHVua1B0clRhZywKICAgICBOYXRpdmVDb2RlUHRyVGFnLAogICAgIFNsb3dQYXRoUHRyVGFnLAog
CkBAIC01Miw4ICs1NCwxMCBAQCBlbnVtIFB0clRhZyA6IHVpbnRwdHJfdCB7CiAgICAgWWFyckJh
Y2t0cmFja1B0clRhZywKIH07CiAKK3VpbnRwdHJfdCBuZXh0UHRyVGFnSUQoKTsKKwogI2lmICFV
U0UoUE9JTlRFUl9QUk9GSUxJTkcpCi1pbmxpbmUgdWludHB0cl90IHVuaXF1ZVB0clRhZ0lEKCkg
eyByZXR1cm4gMDsgfQoraW5saW5lIHVpbnRwdHJfdCBuZXh0UHRyVGFnSUQoKSB7IHJldHVybiAw
OyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KIGlubGluZSBjb25zdGV4cHIg
UHRyVGFnIHB0clRhZyhBcmd1bWVudHMmJi4uLikgeyByZXR1cm4gTm9QdHJUYWc7IH0KQEAgLTk0
LDYgKzk4LDE2IEBAIGlubGluZSBUIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyLCAKIHRl
bXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KIGlubGluZSBQdHJUeXBlIHVudGFnQ0Z1bmN0
aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIHB0cjsgfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsgfQor
dGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0
cihQdHJUeXBlKSB7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJ
c05vdFRhZ2dlZChQdHJUeXBlKSB7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQg
YXNzZXJ0SXNUYWdnZWQoUHRyVHlwZSkgeyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2
b2lkIGFzc2VydElzTnVsbE9yVGFnZ2VkKFB0clR5cGUpIHsgfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzVGFnZ2VkV2l0aChQdHJUeXBlLCBQdHJUYWcpIHsgfQor
dGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc051bGxPclRhZ2dlZFdpdGgo
UHRyVHlwZSwgUHRyVGFnKSB7IH0KKwogI2VuZGlmIC8vICFVU0UoUE9JTlRFUl9QUk9GSUxJTkcp
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>
<flag name="review"
          id="354638"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
    <flag name="commit-queue"
          id="354634"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336105</attachid>
            <date>2018-03-19 22:49:59 -0700</date>
            <delta_ts>2018-03-19 22:49:59 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-183756.patch</filename>
            <type>text/plain</type>
            <size>51922</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI5NzQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxOC0wMy0xOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBGdW5jdGlvblB0ciBhbmQgdXNlIGl0IGluIHRoZSBKSVQgQ2FsbFJlY29yZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzc1NgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzg2NDEzMzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSkYg
QmFzdGllbi4KKworICAgICAgICAxLiBGdW5jdGlvblB0ciBob2xkIGEgQy9DKysgZnVuY3Rpb24g
cG9pbnRlciBieSBkZWZhdWx0LiAgQ2hhbmdlIGl0cyBkZWZhdWx0CisgICAgICAgICAgIFB0clRh
ZyB0byByZWZsZWN0IHRoYXQuCisKKyAgICAgICAgMi4gRGVsZXRlIHRoZSBGdW5jdGlvblB0cjo6
dmFsdWUoKSBtZXRob2QuICBJdCBpcyBlZmZlY3RpdmVseSBhIGR1cGxpY2F0ZSBvZgorICAgICAg
ICAgICBleGVjdXRhYmxlQWRkcmVzcygpLgorCisgICAgICAgIDMuIEZpeCB0aGUgRnVuY3Rpb25Q
dHIgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhcmJpdHJhcnkgcG9pbnRlcnMgdG8gYmUgYWJsZSB0
bworICAgICAgICAgICB0YWtlICJhbnkiIHBvaW50ZXIuICAiYW55IiBpbiB0aGlzIGNhc2UgbWVh
bnMgdGhhdCB0aGUgcG9pbnRlciBtYXkgbm90IGJlIHR5cGVkCisgICAgICAgICAgIGFzIGEgQy9D
KysgZnVuY3Rpb24gdG8gdGhlIEMrKyBjb21waWxlciAoZHVlIHRvIHVwc3RyZWFtIGNhc3Rpbmcg
b3IgdXNhZ2Ugb2YKKyAgICAgICAgICAgdm9pZCogYXMgYSBzdG9yYWdlIHR5cGUpLCBidXQgaXQg
aXMgc3RpbGwgZXhwZWN0ZWQgdG8gYmUgcG9pbnRpbmcgdG8gYSBDL0MrKworICAgICAgICAgICBm
dW5jdGlvbi4KKworICAgICAgICA0LiBBZGRlZCBhIEZ1bmN0aW9uUHRyIGNvbnN0cnVjdG9yIHRo
YXQgdGFrZXMgYW5vdGhlciBGdW5jdGlvblB0ci4gIFRoaXMgaXMgYQorICAgICAgICAgICBjb252
ZW5pZW5jZSBjb25zdHJ1Y3RvciB0aGF0IGxldHMgdXMgcmV0YWcgdGhlIHVuZGVybHlpbmcgcG9p
bnRlci4gIFRoZSBvdGhlcgorICAgICAgICAgICBGdW5jdGlvblB0ciBpcyBzdGlsbCBleHBlY3Rl
ZCB0byBwb2ludCB0byBhIEMvQysrIGZ1bmN0aW9uLgorCisgICAgICAgIDUuIEFkZGVkIFB0clRh
ZyBhc3NlcnRpb24gcGxhY2Vob2xkZXIgZnVuY3Rpb25zIHRvIGJlIGltcGxlbWVudGVkIGxhdGVy
LgorCisgICAgICAgIDYuIENoYW5nZSB0aGUgSklUIENhbGxSZWNvcmQgdG8gZW1iZWQgYSBGdW5j
dGlvblB0ciBjYWxsZWUgaW5zdGVhZCBvZiBhIHZvaWQqIHRvCisgICAgICAgICAgIHBvaW50ZXIu
ICBUaGlzIGltcHJvdmVzIHR5cGUgc2FmZXR5LCBhbmQgYXNzaXN0cyBpbiBnZXR0aW5nIHBvaW50
ZXIgdGFnZ2luZworICAgICAgICAgICByaWdodCBsYXRlci4KKworICAgICAgICA3LiBBZGRlZCB2
ZXJzaW9ucyBvZiBKSVQgY2FsbE9wZXJhdGlvbnMgbWV0aG9kcyB0aGF0IHdpbGwgdGFrZSBhIFB0
clRhZy4KKyAgICAgICAgICAgVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3IgbW9yZSBtb3JlIHBvaW50
ZXIgdGFnZ2luZyB3b3JrIGxhdGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsaW5rQ2FsbCk6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OkZ1bmN0aW9u
UHRyKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvblB0cjo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6UmV0dXJuQWRkcmVzc1B0cjo6UmV0dXJuQWRkcmVzc1B0cik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6cmV0YWdnZWQgY29uc3QpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OnJldGFnZ2VkQ29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uUHRyOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyTUlQUy5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6Omxp
bmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6OmxpbmtDYWxsKToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmNhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OmxpbmtDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAg
KiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENh
bGxDb250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOgor
ICAgICAgICAoSlNDOjpGVEw6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGZ0bC9GVExUaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpGVEw6OmxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6c2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAq
IGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6Q2FsbFJlY29yZDo6Q2FsbFJlY29yZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2Fs
bFdpdGhTbG93UGF0aFJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRp
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24pOgorICAgICAgICAq
IGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFz
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ha2VkQ2FsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdE5ha2VkVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbik6CisgICAgICAg
IChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgor
ICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGlj
Q2FsbCk6CisgICAgICAgICogaml0L1Nsb3dQYXRoQ2FsbC5oOgorICAgICAgICAoSlNDOjpKSVRT
bG93UGF0aENhbGw6OkpJVFNsb3dQYXRoQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRo
Q2FsbDo6Y2FsbCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAg
IChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAgICogcnVudGltZS9QdHJUYWcuaDoK
KyAgICAgICAgKEpTQzo6bmV4dFB0clRhZ0lEKToKKyAgICAgICAgKEpTQzo6YXNzZXJ0SXNDRnVu
Y3Rpb25QdHIpOgorICAgICAgICAoSlNDOjphc3NlcnRJc051bGxPckNGdW5jdGlvblB0cik6Cisg
ICAgICAgIChKU0M6OmFzc2VydElzTm90VGFnZ2VkKToKKyAgICAgICAgKEpTQzo6YXNzZXJ0SXNU
YWdnZWQpOgorICAgICAgICAoSlNDOjphc3NlcnRJc051bGxPclRhZ2dlZCk6CisgICAgICAgIChK
U0M6OmFzc2VydElzVGFnZ2VkV2l0aCk6CisgICAgICAgIChKU0M6OmFzc2VydElzTnVsbE9yVGFn
Z2VkV2l0aCk6CisgICAgICAgIChKU0M6OnVuaXF1ZVB0clRhZ0lEKTogRGVsZXRlZC4KKwogMjAx
OC0wMy0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAg
ICBEcm9wIHNfZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zIHN0YXRpYyBpbml0aWFsaXplcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk0uaAkocmV2aXNpb24gMjI5NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE0LDkgKzE2MTQsOSBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2Fs
bCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6VGFpbCkpCi0gICAgICAgICAgICBBUk1Bc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUs
IGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBBUk1Bc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFSTUFzc2VtYmxlcjo6bGlua0NhbGwo
Y29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFSTUFz
c2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzX2lzVkZQUHJlc2Vu
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyMjk3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAt
MjEyOCw5ICsyMTI4LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lk
KiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAg
aWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQotICAgICAgICAgICAgQVJNdjdBc3NlbWJs
ZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAg
ICAgICAgICBBUk12N0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5j
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgQVJN
djdBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUo
KSk7CisgICAgICAgICAgICBBUk12N0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2xh
YmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKICAgICBib29sIG1f
bWFrZUp1bXBQYXRjaGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDIyOTc0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDkgKzY1LDEwIEBAIHB1YmxpYzoKICAgICBGdW5jdGlv
blB0cigpIHsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoKnZhbHVlKShBcmd1bWVu
dHMuLi4pLCBQdHJUYWcgdGFnID0gU2xvd1BhdGhQdHJUYWcpCisgICAgRnVuY3Rpb25QdHIoUmV0
dXJuVHlwZSgqdmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBDRnVuY3Rpb25QdHJU
YWcpCiAgICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVlLCB0YWcp
KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOwogICAgICAgICBQ
b2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAgICAgIEFT
U0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQpAQCAtNzcsOSArNzgsMTAg
QEAgcHVibGljOgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5E
T1dTKQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoQ0RFQ0wgKnZhbHVlKShBcmd1bWVu
dHMuLi4pLCBQdHJUYWcgdGFnID0gU2xvd1BhdGhQdHJUYWcpCisgICAgRnVuY3Rpb25QdHIoUmV0
dXJuVHlwZShDREVDTCAqdmFsdWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBDRnVuY3Rp
b25QdHJUYWcpCiAgICAgICAgIDogbV92YWx1ZSh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHZhbHVl
LCB0YWcpKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIodmFsdWUpOwogICAg
ICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQobV92YWx1ZSk7CiAgICAg
ICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7CiAgICAgfQpAQCAtODksMzkg
KzkxLDQ3IEBAIHB1YmxpYzoKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5H
X0NPTlZFTlRJT04pCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+Ci0gICAgRnVuY3Rpb25QdHIoUmV0dXJuVHlwZShGQVNUQ0FMTCAqdmFs
dWUpKEFyZ3VtZW50cy4uLiksIFB0clRhZyB0YWcgPSBTbG93UGF0aFB0clRhZykKKyAgICBGdW5j
dGlvblB0cihSZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFn
IHRhZyA9IENGdW5jdGlvblB0clRhZykKICAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0
cjx2b2lkKj4odmFsdWUsIHRhZykpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0
cih2YWx1ZSk7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZCht
X3ZhbHVlKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAg
ICB9CiAKICNlbmRpZiAvLyBDT01QSUxFUl9TVVBQT1JUUyhGQVNUQ0FMTF9DQUxMSU5HX0NPTlZF
TlRJT04pCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci0gICAgZXhwbGlj
aXQgRnVuY3Rpb25QdHIoRnVuY3Rpb25UeXBlKiB2YWx1ZSwgUHRyVGFnIHRhZyA9IFNsb3dQYXRo
UHRyVGFnKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX2Z1
bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8UHRyVHlwZT46OnR5cGU+Ojp2YWx1
ZT4+CisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoUHRyVHlwZSB2YWx1ZSwgUHRyVGFnIHRhZykK
ICAgICAgICAgLy8gVXNpbmcgYSBDLWN0eWxlIGNhc3QgaGVyZSB0byBhdm9pZCBjb21waWxlciBl
cnJvciBvbiBSVlRDOgogICAgICAgICAvLyBFcnJvcjogICM2OTQ6IHJlaW50ZXJwcmV0X2Nhc3Qg
Y2Fubm90IGNhc3QgYXdheSBjb25zdCBvciBvdGhlciB0eXBlIHF1YWxpZmllcnMKICAgICAgICAg
Ly8gKEkgZ3Vlc3Mgb24gUlZUQyBmdW5jdGlvbiBwb2ludGVycyBoYXZlIGEgZGlmZmVyZW50IGNv
bnN0bmVzcyB0byBHQ0MvTVNWQz8pCi0gICAgICAgIDogbV92YWx1ZSh0YWdDb2RlUHRyPHZvaWQq
Pih2YWx1ZSwgdGFnKSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
dmFsdWUsIHRhZykpCiAgICAgeworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cih2YWx1ZSk7
CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsK
ICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAgICB9CiAKLSAg
ICBleHBsaWNpdCBGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwotCi0gICAgdm9p
ZCogdmFsdWUoKSBjb25zdAorICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKEZ1bmN0aW9uUHRyIG90
aGVyLCBQdHJUYWcgdGFnKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQq
PihvdGhlci5leGVjdXRhYmxlQWRkcmVzcygpLCB0YWcpKQogICAgIHsKKyAgICAgICAgYXNzZXJ0
SXNDRnVuY3Rpb25QdHIob3RoZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIFBvaXNv
bmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IHJlbW92ZUNvZGVQdHJUYWcobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BP
SU5URVIobV92YWx1ZSk7CiAgICAgfQorCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKTsKKwogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChtX3Zh
bHVlKTsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkKiBt
X3ZhbHVlIHsgbnVsbHB0ciB9OwogfTsKQEAgLTE0Nyw3ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgZXhwbGljaXQgUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0ciBmdW5jdGlvbikK
LSAgICAgICAgOiBtX3ZhbHVlKGZ1bmN0aW9uLnZhbHVlKCkpCisgICAgICAgIDogbV92YWx1ZShm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKQogICAgIHsKICAgICAgICAgUG9pc29uZWRNYXNt
UHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlRfVkFMSURf
Q09ERV9QT0lOVEVSKG1fdmFsdWUpOwpAQCAtMjEwLDYgKzIyMCwxMSBAQCBwdWJsaWM6CiAKICAg
ICBQb2lzb25lZE1hc21QdHIgcG9pc29uZWRQdHIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
CiAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmV0YWdnZWQoUHRyVGFnIG9sZFRhZywgUHRy
VGFnIG5ld1RhZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIocmV0YWdDb2RlUHRyKGV4ZWN1dGFibGVBZGRyZXNzKCksIG9sZFRhZywgbmV3VGFnKSk7
CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQqPgogICAgIFQgZXhlY3V0
YWJsZUFkZHJlc3MoKSBjb25zdAogICAgIHsKQEAgLTM1MSw3ICszNjYsNyBAQCBwdWJsaWM6CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmV0YWdnZWRDb2RlKFB0clRhZyBvbGRUYWcsIFB0
clRhZyBuZXdUYWcpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKHJldGFnQ29kZVB0cihtX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgb2xkVGFn
LCBuZXdUYWcpKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZVB0ci5yZXRhZ2dlZChvbGRUYWcsIG5l
d1RhZyk7CiAgICAgfQogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdApAQCAtMzgwLDcgKzM5NSw2
IEBAIGlubGluZSBGdW5jdGlvblB0cjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3MKICAgICA6IG1fdmFs
dWUocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpCiB7CiAgICAgUG9pc29uZWRNYXNtUHRyOjphc3Nl
cnRJc05vdFBvaXNvbmVkKG1fdmFsdWUpOwotICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIo
bV92YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lv
biAyMjk3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyTUlQUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUyLDkgKzMxNTIsOSBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25Q
dHIgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFp
bCkpCi0gICAgICAgICAgICBNSVBTQXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFi
ZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0p1
bXAoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgTUlQU0Fzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2Fs
bC5tX2xhYmVsLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIE1JUFNBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQogCiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMjI5NzQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjksOSArMzY5LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBsaW5rQ2Fs
bCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQogICAgIHsKICAg
ICAgICAgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQotICAgICAgICAgICAgWDg2QXNz
ZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOwor
ICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1
bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBY
ODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUo
KSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJl
bCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaAkocmV2aXNpb24gMjI5NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUy
LDcgQEAgcHVibGljOgogICAgIH0KIAogI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2FsbCBjYWxsV2l0
aFNsb3dQYXRoUmV0dXJuVHlwZSgpCisgICAgQ2FsbCBjYWxsV2l0aFNsb3dQYXRoUmV0dXJuVHlw
ZShQdHJUYWcpCiAgICAgewogICAgICAgICAvLyBPbiBXaW42NCwgd2hlbiB0aGUgcmV0dXJuIHR5
cGUgaXMgbGFyZ2VyIHRoYW4gOCBieXRlcywgd2UgbmVlZCB0byBhbGxvY2F0ZSBzcGFjZSBvbiB0
aGUgc3RhY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUuCiAgICAgICAgIC8vIE9uIGVudHJ5LCByY3gg
c2hvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIHRoaXMgc3RhY2sgc3BhY2UuIFRoZSBvdGhlciBw
YXJhbWV0ZXJzIGFyZSBzaGlmdGVkIHRvIHRoZSByaWdodCwKQEAgLTE3Nyw3ICsxNzcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwg
WDg2UmVnaXN0ZXJzOjplY3gpOwogCiAgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVX
aXRoUGF0Y2goVHJ1c3RlZEltbVB0cihudWxscHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAg
ICAgICBDYWxsIHJlc3VsdCA9IENhbGwobV9hc3NlbWJsZXIuY2FsbChzY3JhdGNoUmVnaXN0ZXIo
KSksIENhbGw6OkxpbmthYmxlKTsKKyAgICAgICAgQ2FsbCByZXN1bHQgPSBDYWxsKG1fYXNzZW1i
bGVyLmNhbGwoc2NyYXRjaFJlZ2lzdGVyKCksIHRhZyksIENhbGw6OkxpbmthYmxlKTsKIAogICAg
ICAgICBhZGQ2NChUcnVzdGVkSW1tMzIoOCAqIHNpemVvZihpbnQ2NF90KSksIFg4NlJlZ2lzdGVy
czo6ZXNwKTsKIApAQCAtMTk1MywxMSArMTk1MywxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24p
CiAgICAgewogICAgICAgICBpZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKQotICAgICAg
ICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFiZWwubGFiZWxB
dE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAg
ICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5tX2xhYmVsLmxh
YmVsQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKSwgZnVuY3Rpb24uZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwp
KQotICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWws
IGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rSnVtcChj
b2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9s
YWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtD
YWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkocmV2aXNpb24gMjI5NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsOSArODYzLDEwIEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICNlbmRpZgogICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2Fs
bEZyYW1lKTsKIAotICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE5vUHRyVGFn
KTsKKyAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxs
KGNhbGxUYWcpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBGdW5jdGlvblB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLm1fY3Vz
dG9tQWNjZXNzb3Iub3BhcXVlKSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUsIGNhbGxUYWcpKTsKICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9
PSBDdXN0b21BY2Nlc3NvckdldHRlcikKQEAgLTEwMDcsMTEgKzEwMDgsMTIgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIGlmICghcmVh
bGxvY2F0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSk+KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2Fs
bChOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFn
KEpJVE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOwog
ICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBjYWxsVGFnKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRo
ZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQpAQCAtMTAxOSwxMSArMTAyMSwxMiBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9H
cm93UHJvcGVydHlTdG9yYWdlKT4oCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFn
SUQoKSk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25DYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9Hcm93UHJvcGVydHlTdG9yYWdlLCBjYWxsVGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDIyOTc0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExOCw5ICsxMTgsMTEgQEAgU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2Fs
bENvbnRleHQ6OmtleQogICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkobV90aHVua1NhdmVTZXQs
IGNhbGxUYXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1fb2Zmc2V0KTsKIH0KIAotU2xvd1Bh
dGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgdm9pZCogY2FsbFRh
cmdldCkKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0s
IEZ1bmN0aW9uUHRyIGNhbGxUYXJnZXQpCiB7Ci0gICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNs
b3dQYXRoQ2FsbChtX2ppdC5jYWxsKE5vUHRyVGFnKSwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0
KSk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSBjYWxsVGFyZ2V0LmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZXhlY3V0YWJsZUFkZHJlc3MpOwor
ICAgIFNsb3dQYXRoQ2FsbCByZXN1bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbChOb1B0clRh
ZyksIGtleVdpdGhUYXJnZXQoZXhlY3V0YWJsZUFkZHJlc3MpKTsKIAogICAgIG1faml0LmFkZExp
bmtUYXNrKAogICAgICAgICBbcmVzdWx0LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJl
dmlzaW9uIDIyOTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IE5PVEU6IFRoZSBjYWxsIHRoYXQgdGhpcyByZXR1cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8gYmUg
bGlua2VkIGJ5IHRoZSBKSVQgdXNpbmcgYWRkTGlua1Rhc2soKSwKICAgICAvLyBzbyB0aGVyZSBp
cyBubyBuZWVkIGZvciB5b3UgdG8gbGluayBpdCB5b3Vyc2VsZi4KLSAgICBTbG93UGF0aENhbGwg
bWFrZUNhbGwoVk0mLCB2b2lkKiBjYWxsVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNh
bGwoVk0mLCBGdW5jdGlvblB0ciBjYWxsVGFyZ2V0KTsKIAogcHJpdmF0ZToKICAgICBTbG93UGF0
aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKQEAgLTg0LDcg
Kzg0LDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgewogICAgICAgICBTbG93
UGF0aENhbGxDb250ZXh0IGNvbnRleHQodXNlZFJlZ2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJn
dW1lbnRUeXBlcykgKyAxLCByZXN1bHRHUFIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
dm9pZChFeGVjU3RhdGUqLCBBcmd1bWVudFR5cGVzLi4uKT4oYXJndW1lbnRzLi4uKTsKLSAgICAg
ICAgY2FsbCA9IGNvbnRleHQubWFrZUNhbGwodm0sIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAg
ICBjYWxsID0gY29udGV4dC5tYWtlQ2FsbCh2bSwgZnVuY3Rpb24pOwogICAgIH0KICAgICBpZiAo
ZXhjZXB0aW9uVGFyZ2V0KQogICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuY3BwCShyZXZpc2lvbiAyMjk3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxNSArMTI1LDE3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmUKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAgICB1bnNpZ25l
ZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUVGh1
bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcigKLSAgICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0
LCBOb1B0clRhZyksICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1Rv
UmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKTsKKyAg
ICAgICAgdm0sIEZ1bmN0aW9uUHRyKGNvbXBpbGVGVExPU1JFeGl0LCB0YWcpLCAiRlRMIE9TUiBl
eGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tB
ZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVu
c2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDE7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhK
SVRUaHVua1B0clRhZywgbmV4dFB0clRhZ0lEKCkpOwogICAgIHJldHVybiBnZW5lcmljR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKAotICAgICAgICB2bSwgRnVuY3Rpb25QdHIoY29tcGlsZUZUTExh
enlTbG93UGF0aCwgTm9QdHJUYWcpLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1
bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1l
bnQ6Ok5vdE5lZWRlZCk7CisgICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxlRlRMTGF6eVNs
b3dQYXRoLCB0YWcpLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBleHRy
YVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5vdE5l
ZWRlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFzc2VtYmx5SGVs
cGVycyYgaml0LCBSZWdpc3RlclNldCBkb250Q2xvYmJlcikKQEAgLTE5Nyw3ICsxOTksOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgCiAgICAgcmVnaXN0
ZXJDbG9iYmVyQ2hlY2soaml0LCBrZXkuYXJndW1lbnRSZWdpc3RlcnMoKSk7CiAgICAgCi0gICAg
QXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgUHRy
VGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAg
ICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKGNhbGxUYWcpOwogCiAgICAg
aml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlciwga2V5Lm9mZnNldCgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSKTsKICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKQEAgLTIyMyw3ICsyMjYsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgaml0LnJldCgpOwogCiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpLCBjYWxs
VGFnKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAi
RlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhrZXkpLmRhdGEoKSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIyOTc0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODA0LDggKzgwNCw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgfQogCiAg
ICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2NhbGxzKSB7Ci0gICAgICAgIGlmIChyZWNvcmQudG8p
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCBGdW5jdGlvblB0cihy
ZWNvcmQudG8sIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgICAgIGlmIChyZWNvcmQuY2FsbGVlKQor
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7
CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9nZXRCeUlkcy5zaXplKCk7IGktLTsp
CkBAIC05MTcsNyArOTE3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFu
ZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBva2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGNhbGwoU2xvd1BhdGhQdHJUYWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2Fs
bGVyRnJhbWUsIFNsb3dQYXRoUHRyVGFnKS52YWx1ZSgpKSk7CisgICAgICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2Fs
bGVyRnJhbWUsIHRhZykpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7
CiAgICAgfQogCkBAIC05MzYsNyArOTM3LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhj
ZXB0aW9uSGFuZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAg
ICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAgICAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoU2xvd1BhdGhQdHJUYWcpLCBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIsIFNsb3dQYXRoUHRyVGFnKS52YWx1ZSgpKSk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoY2FsbCh0YWcpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpKTsKICAg
ICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMjk3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNiArNzAsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxSZWNvcmQgewogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBmcm9tOwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKLSAgICAgICAg
dm9pZCogdG87CisgICAgICAgIEZ1bmN0aW9uUHRyIGNhbGxlZTsKIAogICAgICAgICBDYWxsUmVj
b3JkKCkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQ2FsbFJlY29yZChNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBmcm9tLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdm9pZCogdG8gPSAw
KQorICAgICAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZyb20sIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdGlvblB0ciBjYWxsZWUpCiAgICAgICAgICAgICA6IGZyb20o
ZnJvbSkKICAgICAgICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAg
ICAgICAgICAsIHRvKHRvKQorICAgICAgICAgICAgLCBjYWxsZWUoY2FsbGVlKQogICAgICAgICB7
CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjY3LDE4ICsyNjcsMTggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgICAgIENhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICAgICAgQ2FsbCBhcHBlbmRD
YWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoTm9QdHJUYWcpOwotICAgICAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIG1fYnl0ZWNvZGVPZmZz
ZXQsIGZ1bmN0aW9uLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0g
Y2FsbCh0YWcpOworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlv
bkNhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7CiAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAKICNpZiBPUyhXSU5E
T1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICBDYWxsIGFwcGVuZENhbGxXaXRoU2xvd1BhdGhS
ZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgICAgICBDYWxsIGFwcGVu
ZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQ
dHJUYWcgdGFnKQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNh
bGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKCk7Ci0gICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24udmFsdWUo
KSkpOworICAgICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsV2l0aFNsb3dQYXRoUmV0
dXJuVHlwZSh0YWcpOworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKSk7
CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgICAgICB9CiAjZW5kaWYKQEAg
LTcwNCw2MCArNzA0LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9m
ZnNldCk7CiAgICAgICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0ciwgUHRyVGFnKTsKICNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xvd1Bh
dGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNsb3dQYXRoUmV0dXJuVHlwZShj
b25zdCBGdW5jdGlvblB0ciwgUHRyVGFnID0gTm9QdHJUYWcpOwogI2VuZGlmCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihjb25zdCBGdW5jdGlvblB0cik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyLCBpbnQpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRy
LCBpbnQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxG
cmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZyk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyLCBQdHJUYWcsIGludCk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIsIFB0clRhZywgaW50KTsKICAgICAg
ICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9u
VHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CisgICAgICAgIGNhbGxPcGVy
YXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIGludCByZXN1bHQsIEFy
Z3MuLi4gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCk7CisgICAg
ICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAgICAgICBjYWxs
T3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBpbnQgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCiAgICAgICAgIHsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3BlcmF0
aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHRhZywgcmVzdWx0LCBhcmdzLi4uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgewogICAgICAgICAg
ICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uLCB0YWcpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4u
LiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25U
eXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCB0YWcsIGFyZ3MuLi4pOwogICAgICAgICB9CiAKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBpbnQgcmVzdWx0LCBBcmdz
Li4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlv
blR5cGU+KGFyZ3MuLi4pOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUob3BlcmF0aW9uLCB0YWcsIHJlc3Vs
dCk7CisgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgogICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIGlu
dCByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgc2V0dXBBcmd1
bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlv
blB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShvcGVyYXRpb24sIHRhZywgcmVzdWx0LCBhcmdzLi4uKTsKICAgICAgICAg
fQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBBcmdz
Li4uIGFyZ3MpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzLCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJn
dW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uLCB0YWcp
OwogICAgICAgICAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdFJlZ3MpOwogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBB
cmdzLi4uIGFyZ3MpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICByZXR1
cm4gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdFJlZ3MsIGFy
Z3MuLi4pOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRh
ZyB0YWcsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVu
dHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2soT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZ3MuLi4gYXJncykKKyAgICAgICAgeworICAg
ICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24sIHRhZywgYXJncy4uLik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFB0clRhZyB0YWcsIEFyZ3MuLi4gYXJncykK
ICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJn
cy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG9wZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbiwgdGFnKTsKKyAgICAgICAg
fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgQXJncy4u
LiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxP
cGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb24sIHRhZywg
YXJncy4uLik7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbmlwcGV0
R2VuZXJhdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCShyZXZpc2lvbiAyMjk3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsOSArNzA3LDkgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGlmICghZ2VuZXJhdGVkSW5s
aW5lQ29kZSkgewogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+
YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1
bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKICAgICB9IGVsc2UK
ICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMp
OwogCkBAIC03ODAsOSArNzgwLDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CiAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJUYWcs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJUYWcsIHJlc3Vs
dFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93
Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTgyMCwxMSAr
ODIwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCBy
ZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC04ODYs
MTEgKzg4NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwog
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fRUpKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBOb1B0clRhZywgcmVzdWx0
UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIyOTc0
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDEz
LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsNyArMTIwLDggQEAgQUxXQVlTX0lOTElORSBK
SVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVh
ckNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRl
Y29kZU9mZnNldCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIGFzc2VydElz
TnVsbE9yVGFnZ2VkV2l0aChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ2FsbFB0
clRhZyk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNv
ZGVPZmZzZXQsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7
CiB9CiAKQEAgLTEyOCw3ICsxMjksOCBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVt
aXROYWtlZFRhCiB7CiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZU9mZnNldCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyVGFpbENhbGwoKTsKLSAg
ICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwg
ZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIGFzc2VydElzTnVsbE9yVGFnZ2Vk
V2l0aChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ2FsbFB0clRhZyk7CisgICAg
bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZzZXQsIEZ1
bmN0aW9uUHRyKGZ1bmN0aW9uKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKQEAgLTE0
OSwzNSArMTUxLDM1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmEK
ICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Y29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcpCiB7CiAgICAgdXBkYXRlVG9w
Q2FsbEZyYW1lKCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwo
ZnVuY3Rpb24pOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1
bmN0aW9uLCB0YWcpOwogICAgIGV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgcmV0dXJuIGNhbGw7CiB9
CiAKICNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0
aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja0FuZFNs
b3dQYXRoUmV0dXJuVHlwZShjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnICB0YWcp
CiB7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCA9IGFwcGVuZENhbGxXaXRoU2xvd1BhdGhSZXR1cm5UeXBlKGZ1bmN0aW9uKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhTbG93UGF0aFJldHVyblR5
cGUoZnVuY3Rpb24sIHRhZyk7CiAgICAgZXhjZXB0aW9uQ2hlY2soKTsKICAgICByZXR1cm4gY2Fs
bDsKIH0KICNlbmRpZgogCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0
ciBmdW5jdGlvbiwgUHRyVGFnIHRhZykKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsgLy8g
VGhlIGNhbGxlZSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0b3BDYWxsRnJhbWUgdG8gdGhl
aXIgY2FsbGVyCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVu
Y3Rpb24pOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0
aW9uLCB0YWcpOwogICAgIGV4Y2VwdGlvbkNoZWNrV2l0aENhbGxGcmFtZVJvbGxiYWNrKCk7CiAg
ICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0ciBmdW5jdGlvbiwgaW50IGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgaW50IGRzdCkKIHsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhmdW5jdGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIHRhZyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKQEAg
LTE4Niw5ICsxODgsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBpbnQgZHN0KQorQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0
clRhZyB0YWcsIGludCBkc3QpCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOworICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCB0YWcp
OwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHJldmlzaW9uIDIyOTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OCwxNCArNTY4LDE0IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBwb2tlKHJlZ1Qx
LCBwb2tlT2Zmc2V0KyspOwogICAgIHBva2UocmVnVDAsIHBva2VPZmZzZXQrKyk7CiAgICAgcG9r
ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIHBva2VPZmZzZXQrKyk7Ci0gICAgQ2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyAgICBDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIE5vUHRy
VGFnKTsKICNlbHNlCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9z
ZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBz
aG91bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMiwgcmVnVDEpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxPcHRpbWl6ZSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIE5vUHRyVGFnLCBK
U1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCBieVZhbEluZm8pOwogI2VuZGlmCiAKICAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9
IHNsb3dQYXRoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyOTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8p
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgTm9QdHJUYWcsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOwogCiAgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKQEAgLTQ5Miw3ICs0OTIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKICAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1
cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUsIE5vUHRyVGFnLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOwogCiAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhU
YXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKQEAgLTEyOTEsOCArMTI5MSw4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVy
KTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2NhbGxzKSB7Ci0gICAgICAg
IGlmIChjYWxsU2l0ZS50bykKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUu
ZnJvbSwgRnVuY3Rpb25QdHIoY2FsbFNpdGUudG8sIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgICAg
IGlmIChjYWxsU2l0ZS5jYWxsZWUpCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxT
aXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7CiAgICAgfQogICAgIGdlbi5maW5hbGl6ZShwYXRj
aEJ1ZmZlcik7CiAKQEAgLTEzNDUsOCArMTM0NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxv
Y2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZh
bEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRv
RG9uZSkpOwogICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNT
RVJUKG1fY2FsbHMubGFzdCgpLnRvID09IG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKTsK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgU2xvd1BhdGhQdHJUYWcpOworICAgICAgICBBU1NFUlQobV9j
YWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gb3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHMubGFzdCgp
LmZyb20sIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBTbG93UGF0
aFB0clRhZykpOwogICAgIH0KICAgICAKICAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6
OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwpAQCAtMTM4MSw4ICsxMzgxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWxXaXRoQ2FjaAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hl
Y2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIpOwogCiAgICAgZm9yIChjb25zdCBhdXRv
JiBjYWxsU2l0ZSA6IG1fY2FsbHMpIHsKLSAgICAgICAgaWYgKGNhbGxTaXRlLnRvKQotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBGdW5jdGlvblB0cihjYWxsU2l0
ZS50bywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKKyAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVl
KTsKICAgICB9CiAgICAgZ2VuLmZpbmFsaXplKHBhdGNoQnVmZmVyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMjk3NDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY3LDEx
ICsxMDY3LDE1IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CiAgICAgZm9yIChDYWxs
VG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgeworI2lmIENQVShBUk1fVEhVTUIyKQog
ICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9wZXIgbGlua2lu
ZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBhZGRyZXNzCiAg
ICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNh
bGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCiAgICAgICAg
IGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxw
ZXJzOjpDYWxsOjpUYWlsKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluaygKLSAgICAgICAgICAg
IGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHIodGFnQ29kZVB0cihpc1RhaWxDYWxsID8g
Y2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZykpKTsKKyAgICAgICAgdm9p
ZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRp
b24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHIoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKHRhcmdldCkpKTsKKyNlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIu
cmV0YWdnZWQoQ29kZUVudHJ5UHRyVGFnLCBOZWFyQ2FsbFB0clRhZykpKTsKKyNlbmRpZgogICAg
IH0KICAgICBpZiAoaXNXZWJBc3NlbWJseSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2Fs
bGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUs
IGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjI5
NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNCwxMSArMzQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbCB7CiBwdWJsaWM6Ci0gICAgSklUU2xvd1BhdGhDYWxsKEpJVCogaml0LCBJbnN0cnVj
dGlvbiogcGMsIFNsb3dQYXRoRnVuY3Rpb24gc3R1YikKKyAgICBKSVRTbG93UGF0aENhbGwoSklU
KiBqaXQsIEluc3RydWN0aW9uKiBwYywgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9u
KQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX3N0dWIoc3R1YikKKyAgICAgICAg
LCBtX3Nsb3dQYXRoRnVuY3Rpb24oc2xvd1BhdGhGdW5jdGlvbikKICAgICAgICAgLCBtX3BjKHBj
KQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoc2xvd1BhdGhGdW5jdGlvbik7
CiAgICAgfQogCiAgICAgSklUOjpDYWxsIGNhbGwoKQpAQCAtNjEsOCArNjIsOSBAQCBwdWJsaWM6
CiAgICAgICAgIG1faml0LT5tb3ZlKEpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVDo6YXJndW1l
bnRHUFIwKTsKICAgICAgICAgbV9qaXQtPm1vdmUoSklUOjpUcnVzdGVkSW1tUHRyKG1fcGMpLCBK
SVQ6OmFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICAgICAgSklUOjpDYWxsIGNhbGwgPSBtX2pp
dC0+Y2FsbChOb1B0clRhZyk7Ci0gICAgICAgIG1faml0LT5tX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGNhbGwsIG1faml0LT5tX2J5dGVjb2RlT2Zmc2V0LCBtX3N0dWIudmFsdWUoKSkpOworICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFNsb3dQYXRoUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7
CisgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gbV9qaXQtPmNhbGwodGFnKTsKKyAgICAgICAgbV9q
aXQtPm1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1fYnl0ZWNvZGVPZmZz
ZXQsIEZ1bmN0aW9uUHRyKG1fc2xvd1BhdGhGdW5jdGlvbiwgdGFnKSkpOwogCiAjaWYgQ1BVKFg4
NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgbV9qaXQtPmFkZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDE2KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKQEAgLTgyLDcgKzg0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEpJVCogbV9q
aXQ7Ci0gICAgRnVuY3Rpb25QdHIgbV9zdHViOworICAgIFNsb3dQYXRoRnVuY3Rpb24gbV9zbG93
UGF0aEZ1bmN0aW9uOwogICAgIEluc3RydWN0aW9uKiBtX3BjOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjI5
NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MTUsOCArNDE1LDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVGb3JHZQogI2VuZGlmCiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNh
bGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgot
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKG9w
ZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uLCBOb1B0clRhZykudmFsdWUoKSksIEpTSW50ZXJmYWNl
SklUOjpyZWdUMyk7Ci0gICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBOb1B0clRh
Zyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCBuZXh0
UHRyVGFnSUQoKSk7CisgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIo
dGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uLCB0YWcpKSwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QzKTsKKyAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMsIHRh
Zyk7CiAjaWYgQ1BVKFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBqaXQuYWRkUHRyKEpT
SW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoOCksIEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAjZWxpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHRyVGFnLmgJKHJldmlzaW9uIDIyOTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBAIGVu
dW0gUHRyVGFnIDogdWludHB0cl90IHsKICAgICBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRh
ZywKICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLAogICAgIEpJVENvZGVQdHJUYWcsCisgICAg
SklUT3BlcmF0aW9uUHRyVGFnLAorICAgIEpJVFRodW5rUHRyVGFnLAogICAgIE5hdGl2ZUNvZGVQ
dHJUYWcsCiAgICAgU2xvd1BhdGhQdHJUYWcsCiAKQEAgLTUyLDggKzU0LDEwIEBAIGVudW0gUHRy
VGFnIDogdWludHB0cl90IHsKICAgICBZYXJyQmFja3RyYWNrUHRyVGFnLAogfTsKIAordWludHB0
cl90IG5leHRQdHJUYWdJRCgpOworCiAjaWYgIVVTRShQT0lOVEVSX1BST0ZJTElORykKLWlubGlu
ZSB1aW50cHRyX3QgdW5pcXVlUHRyVGFnSUQoKSB7IHJldHVybiAwOyB9CitpbmxpbmUgdWludHB0
cl90IG5leHRQdHJUYWdJRCgpIHsgcmV0dXJuIDA7IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgogaW5saW5lIGNvbnN0ZXhwciBQdHJUYWcgcHRyVGFnKEFyZ3VtZW50cyYmLi4u
KSB7IHJldHVybiBOb1B0clRhZzsgfQpAQCAtOTQsNiArOTgsMTYgQEAgaW5saW5lIFQgdW50YWdD
RnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIAogdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgogaW5saW5lIFB0clR5cGUgdW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZykg
eyByZXR1cm4gcHRyOyB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0
SXNDRnVuY3Rpb25QdHIoUHRyVHlwZSkgeyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2
b2lkIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKFB0clR5cGUpIHsgfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzTm90VGFnZ2VkKFB0clR5cGUpIHsgfQordGVt
cGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJc1RhZ2dlZChQdHJUeXBlKSB7IH0K
K3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNOdWxsT3JUYWdnZWQoUHRy
VHlwZSkgeyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+IHZvaWQgYXNzZXJ0SXNUYWdn
ZWRXaXRoKFB0clR5cGUsIFB0clRhZykgeyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPiB2
b2lkIGFzc2VydElzTnVsbE9yVGFnZ2VkV2l0aChQdHJUeXBlLCBQdHJUYWcpIHsgfQorCiAjZW5k
aWYgLy8gIVVTRShQT0lOVEVSX1BST0ZJTElORykKIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>