<?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>215250</bug_id>
          
          <creation_ts>2020-08-06 18:26:24 -0700</creation_ts>
          <short_desc>Inline cache Replace and Setters on PureForwardingProxy</short_desc>
          <delta_ts>2020-08-12 21:51:24 -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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>jsc32</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1678504</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-06 18:26:24 -0700</bug_when>
    <thetext>Should help with perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678860</commentid>
    <comment_count>1</comment_count>
      <attachid>406243</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-07 20:11:05 -0700</bug_when>
    <thetext>Created attachment 406243
WIP

This implements replace and JS setters. Next I&apos;ll do custom value/custom accessor. Then it should be done.

15% faster on 3d-cube-SP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679274</commentid>
    <comment_count>2</comment_count>
      <attachid>406349</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-10 17:36:10 -0700</bug_when>
    <thetext>Created attachment 406349
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679281</commentid>
    <comment_count>3</comment_count>
      <attachid>406349</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-10 18:21:11 -0700</bug_when>
    <thetext>Comment on attachment 406349
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679282</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-10 18:23:31 -0700</bug_when>
    <thetext>Looks like some failures are occurring?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679285</commentid>
    <comment_count>5</comment_count>
      <attachid>406349</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-10 18:30:18 -0700</bug_when>
    <thetext>Comment on attachment 406349
patch

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

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:822
&gt; +                if (!this-&gt;structure(vm)-&gt;isUncacheableDictionary())

I wonder if this is the cause of the failure. If so, I suspect it might be revealing an implementation bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679294</commentid>
    <comment_count>6</comment_count>
      <attachid>406356</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-10 19:54:36 -0700</bug_when>
    <thetext>Created attachment 406356
WIP

test on EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679295</commentid>
    <comment_count>7</comment_count>
      <attachid>406357</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-10 19:59:51 -0700</bug_when>
    <thetext>Created attachment 406357
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679676</commentid>
    <comment_count>8</comment_count>
      <attachid>406440</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-11 18:40:02 -0700</bug_when>
    <thetext>Created attachment 406440
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679683</commentid>
    <comment_count>9</comment_count>
      <attachid>406442</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-11 19:10:57 -0700</bug_when>
    <thetext>Created attachment 406442
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679776</commentid>
    <comment_count>10</comment_count>
      <attachid>406442</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-12 11:23:00 -0700</bug_when>
    <thetext>Comment on attachment 406442
patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1468
&gt; +        if (viaProxy() &amp;&amp; doesPropertyStorageLoads &amp;&amp; !m_polyProtoAccessChain &amp;&amp; !hasAlternateBase()) {
&gt; +            // We only need this when loading an inline or out of line property. For customs, we can
&gt; +            // invoke with a receiver value that is a JSProxy. For getters/setters, we&apos;ll also invoke
&gt; +            // them with the JSProxy as |this|, but we need to load the actual GetterSetter cell from
&gt; +            // the JSProxy&apos;s target.
&gt; +
&gt;              if (m_type == Getter || m_type == Setter)
&gt; -                baseForGetGPR = scratchGPR;
&gt; +                propertyOwnerGPR = scratchGPR;
&gt;              else
&gt; -                baseForGetGPR = valueRegsPayloadGPR;
&gt; -
&gt; -            ASSERT((m_type != Getter &amp;&amp; m_type != Setter) || baseForGetGPR != baseGPR);
&gt; -            ASSERT(m_type != Setter || baseForGetGPR != valueRegsPayloadGPR);
&gt; +                propertyOwnerGPR = valueRegsPayloadGPR;
&gt;  
&gt;              jit.loadPtr(
&gt; -                CCallHelpers::Address(baseGPR, JSProxy::targetOffset()),
&gt; -                baseForGetGPR);
&gt; -        } else
&gt; -            baseForGetGPR = baseGPR;
&gt; -
&gt; -        GPRReg baseForAccessGPR;
&gt; -        if (m_polyProtoAccessChain) {
&gt; +                CCallHelpers::Address(baseGPR, JSProxy::targetOffset()), propertyOwnerGPR);
&gt; +        } else if (m_polyProtoAccessChain) {
&gt;              // This isn&apos;t pretty, but we know we got here via generateWithGuard,
&gt;              // and it left the baseForAccess inside scratchGPR. We could re-derive the base,
&gt;              // but it&apos;d require emitting the same code to load the base twice.
&gt; -            baseForAccessGPR = scratchGPR;
&gt; -        } else {
&gt; -            if (hasAlternateBase()) {
&gt; -                jit.move(
&gt; -                    CCallHelpers::TrustedImmPtr(alternateBase()), scratchGPR);
&gt; -                baseForAccessGPR = scratchGPR;
&gt; -            } else
&gt; -                baseForAccessGPR = baseForGetGPR;
&gt; -        }
&gt; +            propertyOwnerGPR = scratchGPR;
&gt; +        } else if (hasAlternateBase()) {
&gt; +            jit.move(
&gt; +                CCallHelpers::TrustedImmPtr(alternateBase()), scratchGPR);
&gt; +            propertyOwnerGPR = scratchGPR;

I think reordering it as follows makes code easy to follow.

if (m_polyProtoAccessChain) {
   ...
} else if (hasAlternateBase()) {
   ...
} else if (viaProxy() &amp;&amp; doesPropertyStorageLoads) {
   ...
} else if (viaProxy() &amp;&amp; takesPropertyOwnerAsCFunctionArgument) {
   ...
} else {
    ASSERT(!viaProxy());
   ...
}

&gt; Source/JavaScriptCore/jit/Repatch.cpp:612
&gt; +        if (isProxy) {
&gt; +            // We currently only cache Replace and JS/Custom Setters on JSProxy. We don&apos;t
&gt; +            // cache transitions because global objects will never share the same structure
&gt; +            // in our current implementation.
&gt; +            bool isCacheableProxy = (slot.isCacheablePut() &amp;&amp; slot.type() == PutPropertySlot::ExistingProperty)
&gt; +                || slot.isCacheableSetter()
&gt; +                || slot.isCacheableCustom();
&gt; +            if (!isCacheableProxy)
&gt; +                return GiveUpOnCache;
&gt; +        }

How about putting this branch under `baseCell-&gt;type() == PureForwardingProxyType` branch too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679865</commentid>
    <comment_count>11</comment_count>
      <attachid>406442</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-12 16:09:53 -0700</bug_when>
    <thetext>Comment on attachment 406442
patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1468
&gt;&gt; +            propertyOwnerGPR = scratchGPR;
&gt; 
&gt; I think reordering it as follows makes code easy to follow.
&gt; 
&gt; if (m_polyProtoAccessChain) {
&gt;    ...
&gt; } else if (hasAlternateBase()) {
&gt;    ...
&gt; } else if (viaProxy() &amp;&amp; doesPropertyStorageLoads) {
&gt;    ...
&gt; } else if (viaProxy() &amp;&amp; takesPropertyOwnerAsCFunctionArgument) {
&gt;    ...
&gt; } else {
&gt;     ASSERT(!viaProxy());
&gt;    ...
&gt; }

Sounds good. The only thing is the last assert in the else isn’t correct. For example, for custom accessors may be viaProxy

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:612
&gt;&gt; +        }
&gt; 
&gt; How about putting this branch under `baseCell-&gt;type() == PureForwardingProxyType` branch too?

Yeah makes sense. They were originally separate because i had some code between them. But I deleted that code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679895</commentid>
    <comment_count>12</comment_count>
      <attachid>406489</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-08-12 19:14:12 -0700</bug_when>
    <thetext>Created attachment 406489
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679922</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-12 21:50:16 -0700</bug_when>
    <thetext>Committed r265600: &lt;https://trac.webkit.org/changeset/265600&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406489.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679923</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-12 21:51:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/66960215&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406243</attachid>
            <date>2020-08-07 20:11:05 -0700</date>
            <delta_ts>2020-08-10 17:36:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>14180</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC03ODYsNiArNzg3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKIAogICAgIGF1dG8gZW1pdERlZmF1bHRHdWFyZCA9IFsmXSAoKSB7
CiAgICAgICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CisgICAgICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBz
dGF0ZS5zY3JhdGNoR1BSOwogICAgICAgICAgICAgaml0Lm1vdmUoc3RhdGUuYmFzZUdQUiwgYmFz
ZUZvckFjY2Vzc0dQUik7CiAgICAgICAgICAgICBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5mb3JF
YWNoKHZtLCBzdHJ1Y3R1cmUoKSwgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBhdEVu
ZCkgewpAQCAtOTA0LDExICs5MDYsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKICAgICB9CiAKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKKyAgICAgICAg
QVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgdGhpcy0+YXM8TW9kdWxlTmFtZXNwYWNlQWNj
ZXNzQ2FzZT4oKS5lbWl0KHN0YXRlLCBmYWxsVGhyb3VnaCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBjYXNlIEluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOiB7CisgICAgICAgIEFT
U0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2gg
dGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5
LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogCkBA
IC05NzQsNiArOTc4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICB9CiAKICAgICBjYXNlIEluZGV4ZWREaXJlY3RBcmd1bWVudHNMb2FkOiB7CisgICAgICAgIEFT
U0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2gg
dGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5
LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogICAg
ICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKQEAgLTk5Nyw2ICsxMDAyLDcgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5VWludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAg
ICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOiB7CisgICAgICAgIEFTU0VSVCgh
dmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0
aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogCiAg
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7CkBA
IC0xMDg3LDYgKzEwOTMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAog
ICAgIH0KIAogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6IHsKKyAgICAgICAgQVNTRVJUKCF2
aWFQcm94eSgpKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRo
ZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCiAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CiAKQEAgLTExNDIs
NiArMTE0OSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgY2Fz
ZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzTG9hZDoKICAg
ICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJv
eHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVz
dWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogCkBAIC0xMjU4LDYgKzEy
NjYsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBicmVh
azsKICAgICAgICAgCiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzogeworICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOwogICAgICAgICBHUFJSZWcgcHJvdG90eXBlR1BSID0gc3RhdGUudS5w
cm90b3R5cGVHUFI7CiAgICAgICAgIC8vIExlZ2VuZDogdmFsdWUgPSBgYmFzZSBpbnN0YW5jZW9m
IHByb3RvdHlwZUdQUmAuCiAgICAgICAgIApAQCAtMTQyOSw2ICsxNDM4LDkgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICBHUFJSZWcgYmFzZUZvckdl
dEdQUjsKICAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5
cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29yU2V0dGVy
KTsgLy8gQmVjYXVzZSBzZXR0ZXJzIG5lZWQgdG8gbm90IHRyYXNoIHZhbHVlUmVnc1BheWxvYWRH
UFIuCisgICAgICAgICAgICAvL2lmIChtX3R5cGUgPT0gU2V0dGVyKSB7CisgICAgICAgICAgICAv
LyAgICBqaXQucHJpbnQoImV4ZWN1dGluZyBzZXR0ZXIgY2FsbCB2aWEgcHJveHkhXG4iKTsKKyAg
ICAgICAgICAgIC8vfQogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBl
ID09IFNldHRlcikKICAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gc2NyYXRjaEdQUjsK
ICAgICAgICAgICAgIGVsc2UKQEAgLTE3MzksMTUgKzE3NTEsMjEgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogewor
ICAgICAgICBHUFJSZWcgYmFzZSA9IGJhc2VHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7
CisgICAgICAgICAgICAvLyBUaGUgcGF0aCB0aGF0IHN0cnVjdHVyZSBjaGVja3MgbG9hZHMgdGhl
IHJlYWwgYmFzZSBpbnRvIHNjcmF0Y2hHUFIKKyAgICAgICAgICAgIGJhc2UgPSBzY3JhdGNoR1BS
OworICAgICAgICB9CisKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewog
ICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAg
ICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwKICAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgaml0
LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9u
IDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDExIEBAIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQ
b2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAotICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFz
ZSkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
LCBib29sIHZpYVByb3h5LCAKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3Rv
bVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAgIEFTU0VSVCh0eXBlID09
IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUgPT0gQ3VzdG9tQWNj
ZXNzb3JTZXR0ZXIpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
PiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBpZGVu
dGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBmYWxzZSwgbnVsbHB0ciwg
Y3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBudWxscHRyLCBjdXN0b21TbG90QmFzZSwgV1RG
TW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKICAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNz
b3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGN1c3RvbVNl
dHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmgJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIE9wdGlvbmFsPERPTUF0
dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+LCBib29sIHZpYVByb3h5ID0gZmFsc2UsCiAgICAgICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyID0gbnVsbHB0ciwgSlNPYmplY3QqIGN1c3Rv
bVNsb3RCYXNlID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJiwg
Q29tbWFQcmludGVyJikgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw2
ICs1NzEsMTUgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAg
IExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCwgYmFzZVZh
bHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUp
KTsKIH0KIAorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIHN0cnVjdHVyZUJlZm9yZVB1dChWTSYg
dm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gUHVyZUZv
cndhcmRpbmdQcm94eVR5cGUpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNQcm94eSo+KHZhbHVl
KS0+dGFyZ2V0KCktPnN0cnVjdHVyZSh2bSk7CisgICAgcmV0dXJuIHZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUodm0pOworfQorCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgdWludHB0cl90IHJhd0NhY2hlYWJsZUlkZW50aWZpZXIpCiB7CiAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwpAQCAtNTg5LDcgKzU5
OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkp
OwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBudWxscHRyOworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOwogICAgIGJhc2VW
YWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpOwogCiAgICAg
TE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CkBAIC02MjEsNyArNjMwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRO
b25TdAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBjb2RlQmxvY2stPnB1
dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUu
aXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBudWxscHRyOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFs
dWUpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUs
IHNsb3QpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw5ICs1OTEsMzggQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAg
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAKKyAgICAgICAg
Ym9vbCBpc1Byb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1
cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxK
U1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJh
c2VDZWxsOworICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsK
KyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5oYXNCZWVu
RmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVuRGljdGlv
bmFyeU9iamVjdCh2bSk7CisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgIGlmIChpc1Byb3h5KSB7
CisgICAgICAgICAgICBpZiAoYmFzZUNlbGwgIT0gc2xvdC5iYXNlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBpZiAoIWdldGVudigiQ0FDSEVQ
Uk9YWSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgYm9vbCBpc0NhY2hlYWJsZVByb3h5ID0gKHNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiBzbG90
LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpCisgICAgICAgICAg
ICAgICAgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpOworICAgICAgICAgICAgaWYgKCFpc0Nh
Y2hlYWJsZVByb3h5KQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisK
ICAgICAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxl
UHV0KCkpIHsKICAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OkV4aXN0aW5nUHJvcGVydHkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxw
cyBjYXRjaCBidWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5n
CkBAIC02MDgsNyArNjM3LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRAogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlw
ZSgpID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewpAQCAt
NjE5LDcgKzY0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgIC8vbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5
YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9sZFN0cnVjdHVyZSwgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQoKSwgaXNQcm94eSk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5l
d1Byb3BlcnR5KTsKIApAQCAtNzA0LDEwICs3MzUsMTMgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIEFTU0VSVCghaXNQcm94eSk7IC8vIE9PUFM6IFN1cHBvcnQgdGhpcz8KICAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFj
Y2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVT
ZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBp
bnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
LCBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJh
c2UoKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25k
aXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCB2aWFQcm94eSwgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBu
dWxscHRyKTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNDYWNoZWFibGVTZXR0ZXIoKSk7CiAgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CiAgICAgICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKQEAgLTc0
Miw3ICs3NzYsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBj
b25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pLCBpc1Byb3h5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2
aXNpb24gMjY1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsMTIgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBwdXREaXJlY3RXaXRoUgogICAgICAgICBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGJhc2VPYmplY3QpLT5yZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAgICAgfQotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBiYXNlT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYgKGJhc2VPYmpl
Y3QtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkKKyAgICAgICAgICAgICpyZXN1
bHQgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VPYmplY3QpLT50YXJnZXQoKS0+c3RydWN0dXJlKHZt
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnJlc3VsdCA9IGJhc2VPYmplY3QtPnN0cnVj
dHVyZSh2bSk7CisgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBiYXNlT2JqZWN0LT5w
dXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406349</attachid>
            <date>2020-08-10 17:36:10 -0700</date>
            <delta_ts>2020-08-10 19:54:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>23993</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU0NDEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoZSBSZXBsYWNlIGFuZCBTZXR0ZXJzIG9uIFB1cmVG
b3J3YXJkaW5nUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Byb3BlcnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1q
cy1wcm94eS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKwog
MjAyMC0wOC0wNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdFeHAgc3RpY2t5IG5vdCBtYXRjaGluZyBhbHRlcm5hdGVzIGNvcnJlY3RseSwgaWdub3Jp
bmcgbGFzdEluZGV4IHJlcXVpcmVtZW50CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
cm9wZXJ0eS1yZXBsYWNlLWFuZC1zZXR0ZXItb24tanMtcHJveHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHJvcGVydHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpz
LXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Byb3Bl
cnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tZXhwb3NlQ3VzdG9tU2V0dGVyc09u
R2xvYmFsT2JqZWN0Rm9yVGVzdGluZz10cnVlIikKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworbGV0IGdsb2JhbCA9IHRo
aXM7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAiWSIsIHsKKyAgICBzZXQ6IGZ1bmN0
aW9uKHYpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IGdsb2JhbCk7CisgICAgICAgIGFzc2Vy
dCh2ID09PSBpICsgMSk7CisgICAgICAgIHRoaXMuX1kgPSB2OworICAgIH0KK30pOworCitmdW5j
dGlvbiBmb28oeCwgeSwgeiwgYSkgeworICAgIHRoaXMuWCA9IHg7CisgICAgdGhpcy5ZID0geTsK
KyAgICB0aGlzLnRlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9IHo7CisgICAgdGhpcy50ZXN0Q3Vz
dG9tVmFsdWVTZXR0ZXIgPSBhOworfQorbm9JbmxpbmUoZm9vKTsKKworbGV0IGk7Citmb3IgKGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgZm9vKGksIGkgKyAxLCBpICsgMiwgaSArIDMp
OworICAgIGFzc2VydChnbG9iYWwuWCA9PT0gaSk7CisgICAgYXNzZXJ0KGdsb2JhbC5fWSA9PT0g
aSArIDEpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9PT0g
aSArIDIpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21WYWx1ZVNldHRlciA9PT0gaSAr
IDMpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzEgQEAKKzIwMjAtMDgtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZvcndhcmRp
bmdQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgZGlkbid0IHVzZWQgdG8gY2FjaGUgYW55IFB1dHMgb24gUHVyZUZvcndhcmRpbmdQcm94eS4g
VGhpcyBwYXRjaAorICAgICAgICBpbXBsZW1lbnRzIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0
ZXJzIG9uIFB1cmVGb3J3YXJkaW5nUHJveHkuIFdlIGRvbid0IHN1cHBvcnQKKyAgICAgICAgVHJh
bnNpdGlvbiBwdXRzIGJlY2F1c2UgaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGlmZmVy
ZW50IGdsb2JhbCBvYmplY3RzCisgICAgICAgIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3Ry
dWN0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDIuNXggc3BlZWR1cCBvbiB0aGUg
bWljcm9iZW5jaG1hcmsgSSd2ZSBhZGRlZCwgYW5kIGEgMTUtMjAlIHNwZWVkdXAKKyAgICAgICAg
b24gSmV0U3RyZWFtMidzIDNkLWN1YmUtU1AuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
aml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQ
YXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQpOgorICAgICAgICAoSlNDOjpDb21tb25T
bG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSk6CisKIDIwMjAtMDgtMDcgIE1pY2hhZWwgU2Fi
b2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVnRXhwIHN0aWNreSBub3QgbWF0
Y2hpbmcgYWx0ZXJuYXRlcyBjb3JyZWN0bHksIGlnbm9yaW5nIGxhc3RJbmRleCByZXF1aXJlbWVu
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzMsNiArNjMzLDUwIEBA
IHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0VW5oYW5kbGVkUmVqZWN0aW9u
Q2FsbGJhY2siLCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrLCAxKTsKIAog
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVtYmVyIiwgZnVuY3Rpb25Bc0RvdWJs
ZU51bWJlciwgMSk7CisKKyAgICAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUN1c3RvbVNldHRlcnNP
bkdsb2JhbE9iamVjdEZvclRlc3RpbmcoKSkgeworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEN1c3RvbUdldHRlclNldHRlciogY3VzdG9tID0gQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVh
dGUodm0sIG51bGxwdHIsIHRlc3RDdXN0b21BY2Nlc3NvclNldHRlcik7CisgICAgICAgICAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRl
c3RDdXN0b21BY2Nlc3NvclNldHRlciIpOworICAgICAgICAgICAgICAgIHRoaXMtPnB1dERpcmVj
dEN1c3RvbUFjY2Vzc29yKHZtLCBpZGVudGlmaWVyLCBjdXN0b20sIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEN1c3RvbUdldHRlclNldHRlciogY3VzdG9tID0gQ3VzdG9tR2V0dGVy
U2V0dGVyOjpjcmVhdGUodm0sIG51bGxwdHIsIHRlc3RDdXN0b21WYWx1ZVNldHRlcik7CisgICAg
ICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInRlc3RDdXN0b21WYWx1ZVNldHRlciIpOworICAgICAgICAgICAgICAgIHRoaXMtPnB1
dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBpZGVudGlmaWVyLCBjdXN0b20sIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHN0YXRpYyBib29sIHRlc3RDdXN0b21TZXR0ZXJJbXBsKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQorICAgIHsKKyAg
ICAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgICAgICBSRUxF
QVNFX0FTU0VSVChKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKS5pc0NlbGwoKSk7CisgICAgICAg
IEpTQ2VsbCogdGhpc0NlbGwgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKS5hc0NlbGwoKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpc0NlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGlu
Z1Byb3h5VHlwZSB8fCB0aGlzQ2VsbC0+aW5oZXJpdHM8R2xvYmFsT2JqZWN0Pih2bSkpOworICAg
ICAgICBKU09iamVjdCogdGhpc09iamVjdDsKKyAgICAgICAgaWYgKHRoaXNDZWxsLT50eXBlKCkg
PT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpCisgICAgICAgICAgICB0aGlzT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxHbG9iYWxPYmplY3QqPih2bSwganNDYXN0PEpTUHJveHkqPih0aGlzQ2VsbCkt
PnRhcmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc09iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8R2xvYmFsT2JqZWN0Kj4odm0sIHRoaXNDZWxsKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQodGhpc09iamVjdCk7CisKKyAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgRG9udEVudW0pOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIHRlc3RDdXN0b21BY2Nlc3NvclNldHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdEN1c3RvbVNldHRlckltcGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJfdGVzdEN1c3RvbUFj
Y2Vzc29yU2V0dGVyIik7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbVZhbHVl
U2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0ZXN0Q3VzdG9tU2V0dGVySW1wbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIl90ZXN0Q3VzdG9tVmFsdWVTZXR0ZXIiKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBhZGRGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNo
YXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShy
ZXZpc2lvbiAyNjUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4Niw2ICs3ODYsNyBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogCiAgICAgYXV0byBlbWl0RGVmYXVsdEd1YXJkID0gWyZd
ICgpIHsKICAgICAgICAgaWYgKG1fcG9seVByb3RvQWNjZXNzQ2hhaW4pIHsKKyAgICAgICAgICAg
IEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQ
UiA9IHN0YXRlLnNjcmF0Y2hHUFI7CiAgICAgICAgICAgICBqaXQubW92ZShzdGF0ZS5iYXNlR1BS
LCBiYXNlRm9yQWNjZXNzR1BSKTsKICAgICAgICAgICAgIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4t
PmZvckVhY2godm0sIHN0cnVjdHVyZSgpLCBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29s
IGF0RW5kKSB7CkBAIC05MDQsMTEgKzkwNSwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAogICAgIH0KIAogICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlTG9hZDogeworICAg
ICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICB0aGlzLT5hczxNb2R1bGVOYW1lc3Bh
Y2VBY2Nlc3NDYXNlPigpLmVtaXQoc3RhdGUsIGZhbGxUaHJvdWdoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGNhc2UgSW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xvYWQ6IHsKKyAgICAg
ICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4g
c3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJv
cGVydHkuCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7
CiAKQEAgLTk3NCw2ICs5NzcsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJk
KAogICAgIH0KIAogICAgIGNhc2UgSW5kZXhlZERpcmVjdEFyZ3VtZW50c0xvYWQ6IHsKKyAgICAg
ICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4g
c3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJv
cGVydHkuCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7
CiAgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpAQCAtOTk3LDYgKzEwMDEsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIGNhc2UgSW5kZXhlZFR5
cGVkQXJyYXlVaW50MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ6IHsKKyAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0
aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHku
CiAKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHRvVHlwZWRBcnJheVR5cGUobV90eXBl
KTsKQEAgLTEwODcsNiArMTA5Miw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3Vh
cmQoCiAgICAgfQogCiAgICAgY2FzZSBJbmRleGVkU3RyaW5nTG9hZDogeworICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRo
YXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4K
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKIApAQCAt
MTE0Miw2ICsxMTQ4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBjYXNlIEluZGV4ZWREb3VibGVMb2FkOgogICAgIGNhc2UgSW5kZXhlZENvbnRpZ3VvdXNMb2Fk
OgogICAgIGNhc2UgSW5kZXhlZEFycmF5U3RvcmFnZUxvYWQ6IHsKKyAgICAgICAgQVNTRVJUKCF2
aWFQcm94eSgpKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRo
ZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCiAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CiAKQEAgLTEyNTgs
NiArMTI2NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2ZHZW5lcmljOiB7CisgICAgICAg
IEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIEdQUlJlZyBwcm90b3R5cGVHUFIgPSBzdGF0
ZS51LnByb3RvdHlwZUdQUjsKICAgICAgICAgLy8gTGVnZW5kOiB2YWx1ZSA9IGBiYXNlIGluc3Rh
bmNlb2YgcHJvdG90eXBlR1BSYC4KICAgICAgICAgCkBAIC0xNDI4LDggKzE0MzYsMTMgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgIEdQUlJlZyBi
YXNlRm9yR2V0R1BSOwogICAgICAgICBpZiAodmlhUHJveHkoKSkgewotICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSAhPSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNz
b3JTZXR0ZXIpOyAvLyBCZWNhdXNlIHNldHRlcnMgbmVlZCB0byBub3QgdHJhc2ggdmFsdWVSZWdz
UGF5bG9hZEdQUi4KLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9
PSBTZXR0ZXIpCisgICAgICAgICAgICBBU1NFUlQoIWhhc0FsdGVybmF0ZUJhc2UoKSAmJiAhbV9w
b2x5UHJvdG9BY2Nlc3NDaGFpbik7IC8vIFdlIHJlbHkgb24gdGhpcyBzbyB3ZSBkb24ndCB0cmFz
aCBzY3JhdGNoR1BSLgorCisgICAgICAgICAgICAvLyBGSVhNRTogRm9yIGNhbGxpbmcgY3VzdG9t
IGFjY2Vzc29yIGFuZCB2YWx1ZSBmdW5jdGlvbnMsIHdlIHNob3VsZG4ndCBuZWVkIHRvIHVud3Jh
cCB0aGUgcHJveHkuIEl0IHNob3VsZAorICAgICAgICAgICAgLy8gcmVtYWluIHRoZSB8dGhpc3ws
IHNpbmNlIHRoYXQncyBob3cgb3VyIEMrKyBydW50aW1lIGludm9rZXMgdGhlIGN1c3RvbXM6Cisg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MzQ4CisKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0
ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nl
c3NvckdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1
c3RvbUFjY2Vzc29yU2V0dGVyKQogICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBzY3Jh
dGNoR1BSOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIg
PSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOwpAQCAtMTQ1MSw2ICsxNDY0LDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQ
UiA9IHNjcmF0Y2hHUFI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaGFzQWx0
ZXJuYXRlQmFzZSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gYmFz
ZUZvckdldEdQUik7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHByb3RvdHlwZSBsb2Fk
cyBvbiAndmlhIHByb3h5JywgYnV0IHdlJ2QgbmVlZCBhbiBleHRyYSByZWdpc3RlciBpZiB3ZSBl
dmVyIGRvLgogICAgICAgICAgICAgICAgIGppdC5tb3ZlKAogICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSgpKSwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CkBAIC0xNjk1
LDcgKzE3MDksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAK
ICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSAg
ICAgICAgICAgIC8vIEN1c3RvbSB2YWx1ZXMgYXJlIHBhc3NlZCB0aGUgc2xvdEJhc2UgKHRoZSBw
cm9wZXJ0eSBob2xkZXIpLCBjdXN0b20gYWNjZXNzb3JzIGFyZSBwYXNzZWQgdGhlIHRoaXNWYXVs
ZSAocmVjaWV2ZXIpLgorICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRo
ZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBh
c3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNlaXZlcikuCiAgICAgICAgICAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgZGlmZmVyZW5jZXMgaW4gY3VzdG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29y
cy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTgwMTQKICAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tID0gbV90eXBlID09IEN1
c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciA/IGJhc2VGb3JB
Y2Nlc3NHUFIgOiBiYXNlRm9yQ3VzdG9tR2V0R1BSOyAKQEAgLTE3MzksMTUgKzE3NTMsMjEgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNh
c2UgUmVwbGFjZTogeworICAgICAgICBHUFJSZWcgYmFzZSA9IGJhc2VHUFI7CisgICAgICAgIGlm
ICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGFpbnQgcHJldHR5LCBidXQgdGhl
IHBhdGggdGhhdCBzdHJ1Y3R1cmUgY2hlY2tzIGxvYWRzIHRoZSByZWFsIGJhc2UgaW50byBzY3Jh
dGNoR1BSLgorICAgICAgICAgICAgYmFzZSA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0KKwogICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CiAgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSgKICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAg
ICAgICAgICAgICAgICBiYXNlLAogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0
b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAg
ICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKApAQCAtMTc1OCw2ICsxNzc4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hv
dWxkIGhhdmUgcmV0dXJuZWQgbnVsbCBpZiB0aGlzIHdhc24ndCB0cnVlLgogICAgICAgICBSRUxF
QVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgs
MTEgKzY4LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNy
ZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNz
Q2hhaW4sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAotICAgIEpT
T2JqZWN0KiBjdXN0b21TbG90QmFzZSkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IHByb3RvdHlwZUFjY2Vzc0NoYWluLCBib29sIHZpYVByb3h5LCAKKyAgICBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQog
ewogICAgIEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVy
IHx8IHR5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uo
dm0sIG93bmVyLCB0eXBlLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBmYWxzZSwgbnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
IHJlc3VsdChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50
aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBudWxscHRy
LCBjdXN0b21TbG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKICAgICBy
ZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KGN1c3RvbVNldHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8
UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJl
KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vz
c0NoYWluPiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+LCBib29sIHZpYVByb3h5ID0gZmFsc2Us
CiAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyID0gbnVs
bHB0ciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1
bXBJbXBsKFByaW50U3RyZWFtJiwgQ29tbWFQcmludGVyJikgY29uc3QgZmluYWw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2
NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZFN0cmljCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgY29k
ZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pIDog
bnVsbHB0cjsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3Jp
Z2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CiAgICAgYmFzZVZhbHVlLnB1
dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAKICAgICBMT0dfSUMo
KElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKQEAgLTYy
MSw3ICs2MjEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGNvZGVCbG9jay0+cHV0QnlJZENv
bnRleHQoKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwo
KSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA6IG51bGxwdHI7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVm
b3JlUHV0KHZtLCBiYXNlVmFsdWUpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0p
LCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw5ICs1OTEsMzMg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IG5ld0Nhc2U7CiAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CiAKKyAgICAgICAgYm9vbCBpc1Byb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBi
YXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAg
ICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSkgeworICAgICAgICAgICAgaWYgKGJhc2VD
ZWxsICE9IHNsb3QuYmFzZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gUG9seVByb3RvIGFuZCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBKU1Byb3h5
LCBzbyB3ZQorICAgICAgICAgICAgICAgIC8vIGp1c3QgYmFpbCBvdXQgaWYgdGhpcyBpcyBhIHBy
b3RvIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2Ug
YW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRvbid0CisgICAgICAgICAgICAv
LyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hh
cmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90Lmlz
Q2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGlu
Z1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQor
ICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKTsKKyAgICAgICAgICAg
IGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBu
ZXdDYXNlOworCiAgICAgICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5p
c0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBh
c3NlcnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3ZSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGRpc2Fi
bGUgY2FjaGluZwpAQCAtNjA4LDcgKzYzMiw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBz
bG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
JiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgICAg
ICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKQEAgLTYxOSw4ICs2NDQsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
b2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5
TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLCBpc1Byb3h5KTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKQEAgLTcwNiw4ICs3MzIsOSBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAKICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1
c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0
LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxw
dHIpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigp
LCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKTsKICAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKICAgICAgICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwpAQCAtNzQyLDcgKzc2OSw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6
Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpT
ZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlz
UHJveHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyNjUzODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxNiBAQCBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NBcmd1
bWVudEluZGV4UXVpY2tsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitBTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogb3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQoVk0mIHZtLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmICh2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KQorICAgICAgICByZXR1cm4ganNDYXN0PEpTUHJveHkqPih2YWx1ZSktPnRhcmdldCgpLT5zdHJ1
Y3R1cmUodm0pOworICAgIHJldHVybiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKK30K
KworCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dERpcmVjdFdpdGhSZWlmeShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZSoqIHJlc3VsdCA9IG51bGxwdHIpCiB7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQ1LDcgKzE1NSw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgcHV0RGlyZWN0V2l0aFIKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9
IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICpyZXN1bHQgPSBvcmlnaW5hbFN0
cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZU9iamVjdCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOSw3ICs4MTksNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5n
ZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUg
dG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmli
aXRyYXJ5IEpTLgotICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgICAgICAgICBzbG90LnNldENh
Y2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7CiAKICAgICAgICAgICAgICAgICBib29sIHJlc3Vs
dCA9IGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUs
IHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xv
cHB5KCkpOwpAQCAtODI3LDYgKzgyNyw5IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3co
SlNHbG9iYWxPYmoKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdy
ZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKKyAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3CisKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlz
IHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCiAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2Jq
LCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlz
aW9uIDI2NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFi
bGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihCb29sLCB1c2VMSUNNRnV6emluZywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0
MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElD
TVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZXhwb3Nl
Q3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>
<flag name="review"
          id="421733"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406356</attachid>
            <date>2020-08-10 19:54:36 -0700</date>
            <delta_ts>2020-08-10 19:59:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>28838</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU0ODQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoZSBSZXBsYWNlIGFuZCBTZXR0ZXJzIG9uIFB1cmVG
b3J3YXJkaW5nUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Byb3BlcnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1q
cy1wcm94eS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKwog
MjAyMC0wOC0wNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdFeHAgc3RpY2t5IG5vdCBtYXRjaGluZyBhbHRlcm5hdGVzIGNvcnJlY3RseSwgaWdub3Jp
bmcgbGFzdEluZGV4IHJlcXVpcmVtZW50CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
cm9wZXJ0eS1yZXBsYWNlLWFuZC1zZXR0ZXItb24tanMtcHJveHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHJvcGVydHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpz
LXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Byb3Bl
cnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tZXhwb3NlQ3VzdG9tU2V0dGVyc09u
R2xvYmFsT2JqZWN0Rm9yVGVzdGluZz10cnVlIikKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworbGV0IGdsb2JhbCA9IHRo
aXM7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAiWSIsIHsKKyAgICBzZXQ6IGZ1bmN0
aW9uKHYpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IGdsb2JhbCk7CisgICAgICAgIGFzc2Vy
dCh2ID09PSBpICsgMSk7CisgICAgICAgIHRoaXMuX1kgPSB2OworICAgIH0KK30pOworCitmdW5j
dGlvbiBmb28oeCwgeSwgeiwgYSkgeworICAgIHRoaXMuWCA9IHg7CisgICAgdGhpcy5ZID0geTsK
KyAgICB0aGlzLnRlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9IHo7CisgICAgdGhpcy50ZXN0Q3Vz
dG9tVmFsdWVTZXR0ZXIgPSBhOworfQorbm9JbmxpbmUoZm9vKTsKKworbGV0IGk7Citmb3IgKGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgZm9vKGksIGkgKyAxLCBpICsgMiwgaSArIDMp
OworICAgIGFzc2VydChnbG9iYWwuWCA9PT0gaSk7CisgICAgYXNzZXJ0KGdsb2JhbC5fWSA9PT0g
aSArIDEpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9PT0g
aSArIDIpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21WYWx1ZVNldHRlciA9PT0gaSAr
IDMpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjU0ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzEgQEAKKzIwMjAtMDgtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZvcndhcmRp
bmdQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgZGlkbid0IHVzZWQgdG8gY2FjaGUgYW55IFB1dHMgb24gUHVyZUZvcndhcmRpbmdQcm94eS4g
VGhpcyBwYXRjaAorICAgICAgICBpbXBsZW1lbnRzIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0
ZXJzIG9uIFB1cmVGb3J3YXJkaW5nUHJveHkuIFdlIGRvbid0IHN1cHBvcnQKKyAgICAgICAgVHJh
bnNpdGlvbiBwdXRzIGJlY2F1c2UgaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGlmZmVy
ZW50IGdsb2JhbCBvYmplY3RzCisgICAgICAgIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3Ry
dWN0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDIuNXggc3BlZWR1cCBvbiB0aGUg
bWljcm9iZW5jaG1hcmsgSSd2ZSBhZGRlZCwgYW5kIGEgMTUtMjAlIHNwZWVkdXAKKyAgICAgICAg
b24gSmV0U3RyZWFtMidzIDNkLWN1YmUtU1AuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
aml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQ
YXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQpOgorICAgICAgICAoSlNDOjpDb21tb25T
bG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSk6CisKIDIwMjAtMDgtMTAgIExhdXJvIE1vdXJh
ICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NNYWtlXVtKU0NdIEZpeCB0ZXN0YXBp
U2NyaXB0cyBjb3B5IGxvY2F0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
MjY1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzOCw2ICs2MzgsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJz
ZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayIsIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2ssIDEpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1i
ZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKKworICAgICAgICBpZiAoT3B0aW9uczo6
ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZygpKSB7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b20gPSBDdXN0
b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgdGVzdEN1c3RvbUFjY2Vzc29yU2V0
dGVyKTsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyIik7CisgICAgICAgICAg
ICAgICAgdGhpcy0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIGlkZW50aWZpZXIsIGN1c3Rv
bSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBj
dXN0b20gPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgdGVzdEN1c3Rv
bVZhbHVlU2V0dGVyKTsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEN1c3RvbVZhbHVlU2V0dGVyIik7CisgICAg
ICAgICAgICAgICAgdGhpcy0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIGlkZW50aWZpZXIs
IGN1c3RvbSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbVNldHRl
ckltcGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBwcm9w
ZXJ0eU5hbWUpCisgICAgeworICAgICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
LmlzQ2VsbCgpKTsKKyAgICAgICAgSlNDZWxsKiB0aGlzQ2VsbCA9IEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpLmFzQ2VsbCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzQ2VsbC0+dHlw
ZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlIHx8IHRoaXNDZWxsLT5pbmhlcml0czxHbG9i
YWxPYmplY3Q+KHZtKSk7CisgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0OworICAgICAgICBp
ZiAodGhpc0NlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEdsb2JhbE9iamVjdCo+KHZtLCBqc0Nhc3Q8
SlNQcm94eSo+KHRoaXNDZWxsKS0+dGFyZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxHbG9iYWxPYmplY3QqPih2bSwgdGhpc0NlbGwp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKworICAgICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBEb250RW51bSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0
Q3VzdG9tU2V0dGVySW1wbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIl90ZXN0Q3VzdG9tQWNjZXNzb3JTZXR0ZXIiKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCB0ZXN0Q3VzdG9tVmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3RDdXN0b21TZXR0ZXJJbXBsKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiX3Rlc3RDdXN0b21WYWx1ZVNl
dHRlciIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmpl
Y3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVu
c2lnbmVkIGFyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg2LDYgKzc4
Niw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAKICAgICBhdXRvIGVt
aXREZWZhdWx0R3VhcmQgPSBbJl0gKCkgewogICAgICAgICBpZiAobV9wb2x5UHJvdG9BY2Nlc3ND
aGFpbikgeworICAgICAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgICAgIEdQ
UlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKICAgICAgICAgICAgIGpp
dC5tb3ZlKHN0YXRlLmJhc2VHUFIsIGJhc2VGb3JBY2Nlc3NHUFIpOwogICAgICAgICAgICAgbV9w
b2x5UHJvdG9BY2Nlc3NDaGFpbi0+Zm9yRWFjaCh2bSwgc3RydWN0dXJlKCksIFsmXSAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgYXRFbmQpIHsKQEAgLTkwNCwxMSArOTA1LDEzIEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgfQogCiAgICAgY2FzZSBNb2R1bGVO
YW1lc3BhY2VMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIHRo
aXMtPmFzPE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U+KCkuZW1pdChzdGF0ZSwgZmFsbFRocm91
Z2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgY2FzZSBJbmRleGVkU2NvcGVkQXJn
dW1lbnRzTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBU
aGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRo
IHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKIApAQCAtOTc0LDYgKzk3Nyw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgfQogCiAgICAgY2FzZSBJbmRleGVkRGlyZWN0QXJn
dW1lbnRzTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBU
aGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRo
IHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CkBAIC05OTcsNiArMTAwMSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBUaGlzIGNv
ZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBi
YXNlIG9yIHRoZSBwcm9wZXJ0eS4KIAogICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9U
eXBlZEFycmF5VHlwZShtX3R5cGUpOwpAQCAtMTA4Nyw2ICsxMDkyLDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICB9CiAKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdM
b2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29k
ZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJh
c2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51
LnByb3BlcnR5R1BSOwogCkBAIC0xMTQyLDYgKzExNDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlV2l0aEd1YXJkKAogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c0xvYWQ6CiAgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDog
eworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgaXMg
d3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9y
IHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9w
ZXJ0eUdQUjsKIApAQCAtMTI1OCw2ICsxMjY1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZVdpdGhHdWFyZCgKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VP
ZkdlbmVyaWM6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgR1BSUmVn
IHByb3RvdHlwZUdQUiA9IHN0YXRlLnUucHJvdG90eXBlR1BSOwogICAgICAgICAvLyBMZWdlbmQ6
IHZhbHVlID0gYGJhc2UgaW5zdGFuY2VvZiBwcm90b3R5cGVHUFJgLgogICAgICAgICAKQEAgLTE0
MjYsNDAgKzE0MzQsNDIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKHZtLCBvZmZzZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBHUFJSZWcgYmFz
ZUZvckdldEdQUjsKLSAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29y
U2V0dGVyKTsgLy8gQmVjYXVzZSBzZXR0ZXJzIG5lZWQgdG8gbm90IHRyYXNoIHZhbHVlUmVnc1Bh
eWxvYWRHUFIuCisgICAgICAgIGJvb2wgZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzID0gbV90eXBl
ID09IExvYWQgCisgICAgICAgICAgICB8fCBtX3R5cGUgPT0gR2V0R2V0dGVyCisgICAgICAgICAg
ICB8fCBtX3R5cGUgPT0gR2V0dGVyCisgICAgICAgICAgICB8fCBtX3R5cGUgPT0gU2V0dGVyOwor
CisgICAgICAgIEdQUlJlZyByZWNlaXZlckdQUiA9IGJhc2VHUFI7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eU93bmVyR1BSOworCisgICAgICAgIGlmICh2aWFQcm94eSgpICYmIGRvZXNQcm9wZXJ0
eVN0b3JhZ2VMb2FkcyAmJiAhbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbiAmJiAhaGFzQWx0ZXJuYXRl
QmFzZSgpKSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhpcyB3aGVuIGxvYWRpbmcg
YW4gaW5saW5lIG9yIG91dCBvZiBsaW5lIHByb3BlcnR5LiBGb3IgY3VzdG9tcywgd2UgY2FuCisg
ICAgICAgICAgICAvLyBpbnZva2Ugd2l0aCBhIHJlY2VpdmVyIHZhbHVlIHRoYXQgaXMgYSBKU1By
b3h5LiBGb3IgZ2V0dGVycy9zZXR0ZXJzLCB3ZSdsbCBhbHNvIGludm9rZQorICAgICAgICAgICAg
Ly8gdGhlbSB3aXRoIHRoZSBKU1Byb3h5IGFzIHx0aGlzfCwgYnV0IHdlIG5lZWQgdG8gbG9hZCB0
aGUgYWN0dWFsIEdldHRlclNldHRlciBjZWxsIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBKU1By
b3h5J3MgdGFyZ2V0LgorCiAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5
cGUgPT0gU2V0dGVyKQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBzY3JhdGNoR1BS
OworICAgICAgICAgICAgICAgIHByb3BlcnR5T3duZXJHUFIgPSBzY3JhdGNoR1BSOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3NQYXls
b2FkR1BSOwotCi0gICAgICAgICAgICBBU1NFUlQoKG1fdHlwZSAhPSBHZXR0ZXIgJiYgbV90eXBl
ICE9IFNldHRlcikgfHwgYmFzZUZvckdldEdQUiAhPSBiYXNlR1BSKTsKLSAgICAgICAgICAgIEFT
U0VSVChtX3R5cGUgIT0gU2V0dGVyIHx8IGJhc2VGb3JHZXRHUFIgIT0gdmFsdWVSZWdzUGF5bG9h
ZEdQUik7CisgICAgICAgICAgICAgICAgcHJvcGVydHlPd25lckdQUiA9IHZhbHVlUmVnc1BheWxv
YWRHUFI7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgYmFzZUZvckdldEdQUik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NH
UFI7Ci0gICAgICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHlPd25lckdQUik7CisgICAgICAgIH0gZWxzZSBpZiAobV9wb2x5UHJvdG9BY2Nl
c3NDaGFpbikgewogICAgICAgICAgICAgLy8gVGhpcyBpc24ndCBwcmV0dHksIGJ1dCB3ZSBrbm93
IHdlIGdvdCBoZXJlIHZpYSBnZW5lcmF0ZVdpdGhHdWFyZCwKICAgICAgICAgICAgIC8vIGFuZCBp
dCBsZWZ0IHRoZSBiYXNlRm9yQWNjZXNzIGluc2lkZSBzY3JhdGNoR1BSLiBXZSBjb3VsZCByZS1k
ZXJpdmUgdGhlIGJhc2UsCiAgICAgICAgICAgICAvLyBidXQgaXQnZCByZXF1aXJlIGVtaXR0aW5n
IHRoZSBzYW1lIGNvZGUgdG8gbG9hZCB0aGUgYmFzZSB0d2ljZS4KLSAgICAgICAgICAgIGJhc2VG
b3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGhhc0FsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIGppdC5tb3ZlKAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFz
ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNj
cmF0Y2hHUFI7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlRm9yQWNj
ZXNzR1BSID0gYmFzZUZvckdldEdQUjsKLSAgICAgICAgfQorICAgICAgICAgICAgcHJvcGVydHlP
d25lckdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZSBpZiAoaGFzQWx0ZXJuYXRlQmFz
ZSgpKSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBwcm9wZXJ0eU93bmVyR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBwcm9wZXJ0eU93bmVyR1BSID0gcmVjZWl2ZXJHUFI7CiAKICAgICAgICAgR1BSUmVn
IGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG1fdHlwZSAhPSBD
dXN0b21WYWx1ZUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90
eXBlICE9IEN1c3RvbVZhbHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRl
cikgeworICAgICAgICBpZiAoZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzKSB7CiAgICAgICAgICAg
ICBpZiAobV90eXBlID09IExvYWQgfHwgbV90eXBlID09IEdldEdldHRlcikKICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7CiAgICAgICAgICAgICBl
bHNlCkBAIC0xNDcwLDEwICsxNDgwLDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CiAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQotICAgICAgICAgICAgICAgIHN0b3JhZ2VH
UFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBwcm9w
ZXJ0eU93bmVyR1BSOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaml0Lmxv
YWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9y
QWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocHJvcGVydHlPd25lckdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwog
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKICAgICAgICAgICAg
IH0KQEAgLTE1MDksNyArMTUxOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZURP
TUpJVCgpICYmIGFjY2Vzcy5kb21BdHRyaWJ1dGUoKS0+ZG9tSklUKSB7Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzLmVtaXRET01KSVRHZXR0ZXIoc3RhdGUsIGFjY2Vzcy5kb21BdHRyaWJ1dGUoKS0+
ZG9tSklULCBiYXNlRm9yR2V0R1BSKTsKKyAgICAgICAgICAgICAgICBhY2Nlc3MuZW1pdERPTUpJ
VEdldHRlcihzdGF0ZSwgYWNjZXNzLmRvbUF0dHJpYnV0ZSgpLT5kb21KSVQsIHJlY2VpdmVyR1BS
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTE2ODQsNiArMTY5NCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JH
ZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21B
Y2Nlc3NvclNldHRlcik7CisgICAgICAgICAgICBBU1NFUlQoIWRvZXNQcm9wZXJ0eVN0b3JhZ2VM
b2Fkcyk7IC8vIE9yIHdlIG5lZWQgYW4gZXh0cmEgcmVnaXN0ZXIuCiAKICAgICAgICAgICAgIC8v
IE5lZWQgdG8gbWFrZSByb29tIGZvciB0aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sgc3Bp
bGxhZ2UgaXNuJ3Qgb3ZlcndyaXR0ZW4uIEl0J3MKICAgICAgICAgICAgIC8vIGhhcmQgdG8gdHJh
Y2sgaWYgc29tZW9uZSBkaWQgc3BpbGxhZ2Ugb3Igbm90LCBzbyB3ZSBqdXN0IGFzc3VtZSB0aGF0
IHdlIGFsd2F5cyBuZWVkCkBAIC0xNjkxLDE0ICsxNzAyLDE0IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgYSBzdXBlciBhY2Nl
c3MKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tR2V0R1BSID0gYmFzZUdQUiAhPSB0
aGlzR1BSID8gdGhpc0dQUiA6IGJhc2VGb3JHZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgcmVj
ZWl2ZXJGb3JDdXN0b21HZXRHUFIgPSBiYXNlR1BSICE9IHRoaXNHUFIgPyB0aGlzR1BSIDogcmVj
ZWl2ZXJHUFI7CiAKICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRW
YWx1ZUZ1bmMpKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOwogICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHZhbHVlKTsKLSAgICAgICAgICAgIC8vIEN1c3RvbSB2YWx1ZXMgYXJlIHBhc3NlZCB0aGUgc2xv
dEJhc2UgKHRoZSBwcm9wZXJ0eSBob2xkZXIpLCBjdXN0b20gYWNjZXNzb3JzIGFyZSBwYXNzZWQg
dGhlIHRoaXNWYXVsZSAocmVjaWV2ZXIpLgorICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBh
cmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhvbGRlciksIGN1c3RvbSBhY2Nl
c3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNlaXZlcikuCiAgICAgICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5jZXMgaW4gY3VzdG9tIHZhbHVlcyBhbmQgY3Vz
dG9tIGFjY2Vzc29ycy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTgwMTQKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tID0g
bV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRl
ciA/IGJhc2VGb3JBY2Nlc3NHUFIgOiBiYXNlRm9yQ3VzdG9tR2V0R1BSOyAKKyAgICAgICAgICAg
IEdQUlJlZyBiYXNlRm9yQ3VzdG9tID0gbV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1f
dHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciA/IHByb3BlcnR5T3duZXJHUFIgOiByZWNlaXZlckZv
ckN1c3RvbUdldEdQUjsgCiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBrZWVwIGds
b2JhbE9iamVjdCBhbGl2ZSBzaW5jZSB0aGUgb3duZXIgQ29kZUJsb2NrIChldmVuIGlmIEpTR2xv
YmFsT2JqZWN0KiBpcyBvbmUgb2YgQ29kZUJsb2NrIHRoYXQgaXMgaW5saW5lZCBhbmQgaGVsZCBi
eSBERkcgQ29kZUJsb2NrKQogICAgICAgICAgICAgLy8gbXVzdCBrZWVwIGl0IGFsaXZlLgogICAg
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3Vz
dG9tQWNjZXNzb3JHZXR0ZXIpIHsKQEAgLTE3MzksMTUgKzE3NTAsMjEgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTog
eworICAgICAgICBHUFJSZWcgYmFzZSA9IGJhc2VHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIGFpbnQgcHJldHR5LCBidXQgdGhlIHBhdGggdGhhdCBz
dHJ1Y3R1cmUgY2hlY2tzIGxvYWRzIHRoZSByZWFsIGJhc2UgaW50byBzY3JhdGNoR1BSLgorICAg
ICAgICAgICAgYmFzZSA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAg
ICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAg
ICBiYXNlLAogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZz
ZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgICAgICB2
YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKApAQCAtMTc1
OCw2ICsxNzc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQog
ICAgIH0KIAogICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOwogICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0
dXJuZWQgbnVsbCBpZiB0aGlzIHdhc24ndCB0cnVlLgogICAgICAgICBSRUxFQVNFX0FTU0VSVChH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDExIEBA
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAotICAgIEpTT2JqZWN0KiBjdXN0
b21TbG90QmFzZSkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0
aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFj
Y2Vzc0NoYWluLCBib29sIHZpYVByb3h5LCAKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+IGN1c3RvbVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAgIEFTU0VS
VCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUgPT0g
Q3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0
eXBlLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBmYWxzZSwg
bnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcg
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBudWxscHRyLCBjdXN0b21TbG90
QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKICAgICByZXN1bHQtPm1fY3Vz
dG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KGN1c3RvbVNldHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDcgQEAgcHVibGljOgogICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIE9wdGlv
bmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3Jl
YXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKKyAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8
UG9seVByb3RvQWNjZXNzQ2hhaW4+LCBib29sIHZpYVByb3h5ID0gZmFsc2UsCiAgICAgICAgIEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyID0gbnVsbHB0ciwgSlNPYmpl
Y3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1bXBJbXBsKFByaW50
U3RyZWFtJiwgQ29tbWFQcmludGVyJikgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCShy
ZXZpc2lvbiAyNjU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlh
YmxlQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgUHJveHlh
YmxlQWNjZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2FzZQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRT
ZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4g
cHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gTG9hZCB8fCB0eXBl
ID09IE1pc3MgfHwgdHlwZSA9PSBHZXRHZXR0ZXIpOworICAgIEFTU0VSVCh0eXBlID09IExvYWQg
fHwgdHlwZSA9PSBNaXNzIHx8IHR5cGUgPT0gR2V0R2V0dGVyIHx8IHR5cGUgPT0gUmVwbGFjZSk7
CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgUHJveHlhYmxlQWNj
ZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFj
Y2Vzc0NoYWluKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pIDogbnVsbHB0cjsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJh
c2VWYWx1ZSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50LCB2
YWx1ZSwgc2xvdCk7CiAKICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwg
ZmFsc2UsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKHZtKSA6IG51bGxwdHI7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93
UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOwogICAgIGJh
c2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpOwogCiAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIGJh
c2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5MSw5ICs1OTEsMzYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRAogICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAgICAgICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAKKyAgICAgICAgYm9vbCBpc1Byb3h5
ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFz
ZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAg
ICAgICAgICAgaXNQcm94eSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94
eSkgeworICAgICAgICAgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChiKQorICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgaWYgKGJhc2VD
ZWxsICE9IHNsb3QuYmFzZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gUG9seVByb3RvIGFuZCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBKU1Byb3h5
LCBzbyB3ZQorICAgICAgICAgICAgICAgIC8vIGp1c3QgYmFpbCBvdXQgaWYgdGhpcyBpcyBhIHBy
b3RvIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2Ug
YW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRvbid0CisgICAgICAgICAgICAv
LyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hh
cmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90Lmlz
Q2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGlu
Z1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQor
ICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKTsKKyAgICAgICAgICAg
IGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBu
ZXdDYXNlOworCiAgICAgICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5p
c0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBh
c3NlcnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3ZSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGRpc2Fi
bGUgY2FjaGluZwpAQCAtNjA4LDcgKzYzNSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBz
bG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
JiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgICAg
ICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKQEAgLTYxOSw4ICs2NDcsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
b2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5
TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLCBpc1Byb3h5KTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKQEAgLTcwNiw4ICs3MzUsOSBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAKICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1
c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0
LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzbG90LmN1c3Rv
bVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxw
dHIpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigp
LCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKTsKICAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKICAgICAgICAgICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwpAQCAtNzQyLDcgKzc3Miw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6
Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpT
ZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlz
UHJveHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyNjU0ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxNiBAQCBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NBcmd1
bWVudEluZGV4UXVpY2tsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitBTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZSogb3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQoVk0mIHZtLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmICh2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KQorICAgICAgICByZXR1cm4ganNDYXN0PEpTUHJveHkqPih2YWx1ZSktPnRhcmdldCgpLT5zdHJ1
Y3R1cmUodm0pOworICAgIHJldHVybiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKK30K
KworCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dERpcmVjdFdpdGhSZWlmeShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZSoqIHJlc3VsdCA9IG51bGxwdHIpCiB7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQ1LDcgKzE1NSw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgcHV0RGlyZWN0V2l0aFIKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9
IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICpyZXN1bHQgPSBvcmlnaW5hbFN0
cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZU9iamVjdCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0MSw3ICs4NDEsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5n
ZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUg
dG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmli
aXRyYXJ5IEpTLgotICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgICAgICAgICBzbG90LnNldENh
Y2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7CiAKICAgICAgICAgICAgICAgICBib29sIHJlc3Vs
dCA9IGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUs
IHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xv
cHB5KCkpOwpAQCAtODQ5LDYgKzg0OSw5IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3co
SlNHbG9iYWxPYmoKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdy
ZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKKyAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MzQ3CisKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlz
IHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCiAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2Jq
LCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlz
aW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFi
bGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihCb29sLCB1c2VMSUNNRnV6emluZywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0
MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElD
TVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZXhwb3Nl
Q3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406357</attachid>
            <date>2020-08-10 19:59:51 -0700</date>
            <delta_ts>2020-08-11 18:40:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>28799</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU0ODQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoZSBSZXBsYWNlIGFuZCBTZXR0ZXJzIG9uIFB1cmVG
b3J3YXJkaW5nUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Byb3BlcnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1q
cy1wcm94eS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKwog
MjAyMC0wOC0wNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdFeHAgc3RpY2t5IG5vdCBtYXRjaGluZyBhbHRlcm5hdGVzIGNvcnJlY3RseSwgaWdub3Jp
bmcgbGFzdEluZGV4IHJlcXVpcmVtZW50CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
cm9wZXJ0eS1yZXBsYWNlLWFuZC1zZXR0ZXItb24tanMtcHJveHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHJvcGVydHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpz
LXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Byb3Bl
cnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tZXhwb3NlQ3VzdG9tU2V0dGVyc09u
R2xvYmFsT2JqZWN0Rm9yVGVzdGluZz10cnVlIikKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworbGV0IGdsb2JhbCA9IHRo
aXM7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAiWSIsIHsKKyAgICBzZXQ6IGZ1bmN0
aW9uKHYpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IGdsb2JhbCk7CisgICAgICAgIGFzc2Vy
dCh2ID09PSBpICsgMSk7CisgICAgICAgIHRoaXMuX1kgPSB2OworICAgIH0KK30pOworCitmdW5j
dGlvbiBmb28oeCwgeSwgeiwgYSkgeworICAgIHRoaXMuWCA9IHg7CisgICAgdGhpcy5ZID0geTsK
KyAgICB0aGlzLnRlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9IHo7CisgICAgdGhpcy50ZXN0Q3Vz
dG9tVmFsdWVTZXR0ZXIgPSBhOworfQorbm9JbmxpbmUoZm9vKTsKKworbGV0IGk7Citmb3IgKGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgZm9vKGksIGkgKyAxLCBpICsgMiwgaSArIDMp
OworICAgIGFzc2VydChnbG9iYWwuWCA9PT0gaSk7CisgICAgYXNzZXJ0KGdsb2JhbC5fWSA9PT0g
aSArIDEpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9PT0g
aSArIDIpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21WYWx1ZVNldHRlciA9PT0gaSAr
IDMpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjU0ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzEgQEAKKzIwMjAtMDgtMTAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZvcndhcmRp
bmdQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgZGlkbid0IHVzZWQgdG8gY2FjaGUgYW55IFB1dHMgb24gUHVyZUZvcndhcmRpbmdQcm94eS4g
VGhpcyBwYXRjaAorICAgICAgICBpbXBsZW1lbnRzIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0
ZXJzIG9uIFB1cmVGb3J3YXJkaW5nUHJveHkuIFdlIGRvbid0IHN1cHBvcnQKKyAgICAgICAgVHJh
bnNpdGlvbiBwdXRzIGJlY2F1c2UgaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGlmZmVy
ZW50IGdsb2JhbCBvYmplY3RzCisgICAgICAgIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3Ry
dWN0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDIuNXggc3BlZWR1cCBvbiB0aGUg
bWljcm9iZW5jaG1hcmsgSSd2ZSBhZGRlZCwgYW5kIGEgMTUtMjAlIHNwZWVkdXAKKyAgICAgICAg
b24gSmV0U3RyZWFtMidzIDNkLWN1YmUtU1AuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
aml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQ
YXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQpOgorICAgICAgICAoSlNDOjpDb21tb25T
bG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSk6CisKIDIwMjAtMDgtMTAgIExhdXJvIE1vdXJh
ICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NNYWtlXVtKU0NdIEZpeCB0ZXN0YXBp
U2NyaXB0cyBjb3B5IGxvY2F0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24g
MjY1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzOCw2ICs2MzgsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJz
ZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayIsIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2ssIDEpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVOdW1i
ZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKKworICAgICAgICBpZiAoT3B0aW9uczo6
ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZygpKSB7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b20gPSBDdXN0
b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgdGVzdEN1c3RvbUFjY2Vzc29yU2V0
dGVyKTsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAidGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyIik7CisgICAgICAgICAg
ICAgICAgdGhpcy0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIGlkZW50aWZpZXIsIGN1c3Rv
bSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBj
dXN0b20gPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgdGVzdEN1c3Rv
bVZhbHVlU2V0dGVyKTsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEN1c3RvbVZhbHVlU2V0dGVyIik7CisgICAg
ICAgICAgICAgICAgdGhpcy0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIGlkZW50aWZpZXIs
IGN1c3RvbSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbVNldHRl
ckltcGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBwcm9w
ZXJ0eU5hbWUpCisgICAgeworICAgICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
LmlzQ2VsbCgpKTsKKyAgICAgICAgSlNDZWxsKiB0aGlzQ2VsbCA9IEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpLmFzQ2VsbCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzQ2VsbC0+dHlw
ZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlIHx8IHRoaXNDZWxsLT5pbmhlcml0czxHbG9i
YWxPYmplY3Q+KHZtKSk7CisgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0OworICAgICAgICBp
ZiAodGhpc0NlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEdsb2JhbE9iamVjdCo+KHZtLCBqc0Nhc3Q8
SlNQcm94eSo+KHRoaXNDZWxsKS0+dGFyZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxHbG9iYWxPYmplY3QqPih2bSwgdGhpc0NlbGwp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKworICAgICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBEb250RW51bSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0
Q3VzdG9tU2V0dGVySW1wbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIl90ZXN0Q3VzdG9tQWNjZXNzb3JTZXR0ZXIiKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCB0ZXN0Q3VzdG9tVmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3RDdXN0b21TZXR0ZXJJbXBsKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiX3Rlc3RDdXN0b21WYWx1ZVNl
dHRlciIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmpl
Y3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVu
c2lnbmVkIGFyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg2LDYgKzc4
Niw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAKICAgICBhdXRvIGVt
aXREZWZhdWx0R3VhcmQgPSBbJl0gKCkgewogICAgICAgICBpZiAobV9wb2x5UHJvdG9BY2Nlc3ND
aGFpbikgeworICAgICAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgICAgIEdQ
UlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKICAgICAgICAgICAgIGpp
dC5tb3ZlKHN0YXRlLmJhc2VHUFIsIGJhc2VGb3JBY2Nlc3NHUFIpOwogICAgICAgICAgICAgbV9w
b2x5UHJvdG9BY2Nlc3NDaGFpbi0+Zm9yRWFjaCh2bSwgc3RydWN0dXJlKCksIFsmXSAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgYXRFbmQpIHsKQEAgLTkwNCwxMSArOTA1LDEzIEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgfQogCiAgICAgY2FzZSBNb2R1bGVO
YW1lc3BhY2VMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIHRo
aXMtPmFzPE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U+KCkuZW1pdChzdGF0ZSwgZmFsbFRocm91
Z2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgY2FzZSBJbmRleGVkU2NvcGVkQXJn
dW1lbnRzTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBU
aGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRo
IHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKIApAQCAtOTc0LDYgKzk3Nyw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgfQogCiAgICAgY2FzZSBJbmRleGVkRGlyZWN0QXJn
dW1lbnRzTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBU
aGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRo
IHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
c3RhdGUudS5wcm9wZXJ0eUdQUjsKICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CkBAIC05OTcsNiArMTAwMSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQo
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBUaGlzIGNv
ZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBi
YXNlIG9yIHRoZSBwcm9wZXJ0eS4KIAogICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdG9U
eXBlZEFycmF5VHlwZShtX3R5cGUpOwpAQCAtMTA4Nyw2ICsxMDkyLDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICB9CiAKICAgICBjYXNlIEluZGV4ZWRTdHJpbmdM
b2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29k
ZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJh
c2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51
LnByb3BlcnR5R1BSOwogCkBAIC0xMTQyLDYgKzExNDgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlV2l0aEd1YXJkKAogICAgIGNhc2UgSW5kZXhlZERvdWJsZUxvYWQ6CiAgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c0xvYWQ6CiAgICAgY2FzZSBJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDog
eworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgaXMg
d3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9y
IHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9w
ZXJ0eUdQUjsKIApAQCAtMTI1OCw2ICsxMjY1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZVdpdGhHdWFyZCgKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VP
ZkdlbmVyaWM6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgR1BSUmVn
IHByb3RvdHlwZUdQUiA9IHN0YXRlLnUucHJvdG90eXBlR1BSOwogICAgICAgICAvLyBMZWdlbmQ6
IHZhbHVlID0gYGJhc2UgaW5zdGFuY2VvZiBwcm90b3R5cGVHUFJgLgogICAgICAgICAKQEAgLTE0
MjYsNDAgKzE0MzQsNDIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKHZtLCBvZmZzZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBHUFJSZWcgYmFz
ZUZvckdldEdQUjsKLSAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29y
U2V0dGVyKTsgLy8gQmVjYXVzZSBzZXR0ZXJzIG5lZWQgdG8gbm90IHRyYXNoIHZhbHVlUmVnc1Bh
eWxvYWRHUFIuCisgICAgICAgIGJvb2wgZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzID0gbV90eXBl
ID09IExvYWQgCisgICAgICAgICAgICB8fCBtX3R5cGUgPT0gR2V0R2V0dGVyCisgICAgICAgICAg
ICB8fCBtX3R5cGUgPT0gR2V0dGVyCisgICAgICAgICAgICB8fCBtX3R5cGUgPT0gU2V0dGVyOwor
CisgICAgICAgIEdQUlJlZyByZWNlaXZlckdQUiA9IGJhc2VHUFI7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eU93bmVyR1BSOworCisgICAgICAgIGlmICh2aWFQcm94eSgpICYmIGRvZXNQcm9wZXJ0
eVN0b3JhZ2VMb2FkcyAmJiAhbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbiAmJiAhaGFzQWx0ZXJuYXRl
QmFzZSgpKSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhpcyB3aGVuIGxvYWRpbmcg
YW4gaW5saW5lIG9yIG91dCBvZiBsaW5lIHByb3BlcnR5LiBGb3IgY3VzdG9tcywgd2UgY2FuCisg
ICAgICAgICAgICAvLyBpbnZva2Ugd2l0aCBhIHJlY2VpdmVyIHZhbHVlIHRoYXQgaXMgYSBKU1By
b3h5LiBGb3IgZ2V0dGVycy9zZXR0ZXJzLCB3ZSdsbCBhbHNvIGludm9rZQorICAgICAgICAgICAg
Ly8gdGhlbSB3aXRoIHRoZSBKU1Byb3h5IGFzIHx0aGlzfCwgYnV0IHdlIG5lZWQgdG8gbG9hZCB0
aGUgYWN0dWFsIEdldHRlclNldHRlciBjZWxsIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBKU1By
b3h5J3MgdGFyZ2V0LgorCiAgICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5
cGUgPT0gU2V0dGVyKQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBzY3JhdGNoR1BS
OworICAgICAgICAgICAgICAgIHByb3BlcnR5T3duZXJHUFIgPSBzY3JhdGNoR1BSOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3NQYXls
b2FkR1BSOwotCi0gICAgICAgICAgICBBU1NFUlQoKG1fdHlwZSAhPSBHZXR0ZXIgJiYgbV90eXBl
ICE9IFNldHRlcikgfHwgYmFzZUZvckdldEdQUiAhPSBiYXNlR1BSKTsKLSAgICAgICAgICAgIEFT
U0VSVChtX3R5cGUgIT0gU2V0dGVyIHx8IGJhc2VGb3JHZXRHUFIgIT0gdmFsdWVSZWdzUGF5bG9h
ZEdQUik7CisgICAgICAgICAgICAgICAgcHJvcGVydHlPd25lckdQUiA9IHZhbHVlUmVnc1BheWxv
YWRHUFI7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgYmFzZUZvckdldEdQUik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NH
UFI7Ci0gICAgICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHlPd25lckdQUik7CisgICAgICAgIH0gZWxzZSBpZiAobV9wb2x5UHJvdG9BY2Nl
c3NDaGFpbikgewogICAgICAgICAgICAgLy8gVGhpcyBpc24ndCBwcmV0dHksIGJ1dCB3ZSBrbm93
IHdlIGdvdCBoZXJlIHZpYSBnZW5lcmF0ZVdpdGhHdWFyZCwKICAgICAgICAgICAgIC8vIGFuZCBp
dCBsZWZ0IHRoZSBiYXNlRm9yQWNjZXNzIGluc2lkZSBzY3JhdGNoR1BSLiBXZSBjb3VsZCByZS1k
ZXJpdmUgdGhlIGJhc2UsCiAgICAgICAgICAgICAvLyBidXQgaXQnZCByZXF1aXJlIGVtaXR0aW5n
IHRoZSBzYW1lIGNvZGUgdG8gbG9hZCB0aGUgYmFzZSB0d2ljZS4KLSAgICAgICAgICAgIGJhc2VG
b3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGhhc0FsdGVybmF0ZUJhc2UoKSkgewotICAgICAgICAgICAgICAgIGppdC5tb3ZlKAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFz
ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNj
cmF0Y2hHUFI7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlRm9yQWNj
ZXNzR1BSID0gYmFzZUZvckdldEdQUjsKLSAgICAgICAgfQorICAgICAgICAgICAgcHJvcGVydHlP
d25lckdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZSBpZiAoaGFzQWx0ZXJuYXRlQmFz
ZSgpKSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYWx0ZXJuYXRlQmFzZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBwcm9wZXJ0eU93bmVyR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBwcm9wZXJ0eU93bmVyR1BSID0gcmVjZWl2ZXJHUFI7CiAKICAgICAgICAgR1BSUmVn
IGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG1fdHlwZSAhPSBD
dXN0b21WYWx1ZUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90
eXBlICE9IEN1c3RvbVZhbHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRl
cikgeworICAgICAgICBpZiAoZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzKSB7CiAgICAgICAgICAg
ICBpZiAobV90eXBlID09IExvYWQgfHwgbV90eXBlID09IEdldEdldHRlcikKICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7CiAgICAgICAgICAgICBl
bHNlCkBAIC0xNDcwLDEwICsxNDgwLDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CiAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQotICAgICAgICAgICAgICAgIHN0b3JhZ2VH
UFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBwcm9w
ZXJ0eU93bmVyR1BSOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaml0Lmxv
YWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9y
QWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocHJvcGVydHlPd25lckdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwog
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKICAgICAgICAgICAg
IH0KQEAgLTE1MDksNyArMTUxOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZURP
TUpJVCgpICYmIGFjY2Vzcy5kb21BdHRyaWJ1dGUoKS0+ZG9tSklUKSB7Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzLmVtaXRET01KSVRHZXR0ZXIoc3RhdGUsIGFjY2Vzcy5kb21BdHRyaWJ1dGUoKS0+
ZG9tSklULCBiYXNlRm9yR2V0R1BSKTsKKyAgICAgICAgICAgICAgICBhY2Nlc3MuZW1pdERPTUpJ
VEdldHRlcihzdGF0ZSwgYWNjZXNzLmRvbUF0dHJpYnV0ZSgpLT5kb21KSVQsIHJlY2VpdmVyR1BS
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTE2ODQsNiArMTY5NCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JH
ZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21B
Y2Nlc3NvclNldHRlcik7CisgICAgICAgICAgICBBU1NFUlQoIWRvZXNQcm9wZXJ0eVN0b3JhZ2VM
b2Fkcyk7IC8vIE9yIHdlIG5lZWQgYW4gZXh0cmEgcmVnaXN0ZXIuIFdlIHJlbHkgb24gcHJvcGVy
dHlPd25lckdQUiBiZWluZyBjb3JyZWN0IGhlcmUuCiAKICAgICAgICAgICAgIC8vIE5lZWQgdG8g
bWFrZSByb29tIGZvciB0aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sgc3BpbGxhZ2UgaXNu
J3Qgb3ZlcndyaXR0ZW4uIEl0J3MKICAgICAgICAgICAgIC8vIGhhcmQgdG8gdHJhY2sgaWYgc29t
ZW9uZSBkaWQgc3BpbGxhZ2Ugb3Igbm90LCBzbyB3ZSBqdXN0IGFzc3VtZSB0aGF0IHdlIGFsd2F5
cyBuZWVkCkBAIC0xNjkxLDE0ICsxNzAyLDE0IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwo
KTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgYSBzdXBlciBhY2Nlc3MKLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tR2V0R1BSID0gYmFzZUdQUiAhPSB0aGlzR1BSID8g
dGhpc0dQUiA6IGJhc2VGb3JHZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgcmVjZWl2ZXJGb3JD
dXN0b21HZXRHUFIgPSBiYXNlR1BSICE9IHRoaXNHUFIgPyB0aGlzR1BSIDogcmVjZWl2ZXJHUFI7
CiAKICAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMp
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
OwogICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsK
LSAgICAgICAgICAgIC8vIEN1c3RvbSB2YWx1ZXMgYXJlIHBhc3NlZCB0aGUgc2xvdEJhc2UgKHRo
ZSBwcm9wZXJ0eSBob2xkZXIpLCBjdXN0b20gYWNjZXNzb3JzIGFyZSBwYXNzZWQgdGhlIHRoaXNW
YXVsZSAocmVjaWV2ZXIpLgorICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2Vk
IHRoZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJl
IHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNlaXZlcikuCiAgICAgICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgZGlmZmVyZW5jZXMgaW4gY3VzdG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vz
c29ycy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTgwMTQKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tID0gbV90eXBlID09
IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciA/IGJhc2VG
b3JBY2Nlc3NHUFIgOiBiYXNlRm9yQ3VzdG9tR2V0R1BSOyAKKyAgICAgICAgICAgIEdQUlJlZyBi
YXNlRm9yQ3VzdG9tID0gbV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBD
dXN0b21WYWx1ZVNldHRlciA/IHByb3BlcnR5T3duZXJHUFIgOiByZWNlaXZlckZvckN1c3RvbUdl
dEdQUjsgCiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBrZWVwIGdsb2JhbE9iamVj
dCBhbGl2ZSBzaW5jZSB0aGUgb3duZXIgQ29kZUJsb2NrIChldmVuIGlmIEpTR2xvYmFsT2JqZWN0
KiBpcyBvbmUgb2YgQ29kZUJsb2NrIHRoYXQgaXMgaW5saW5lZCBhbmQgaGVsZCBieSBERkcgQ29k
ZUJsb2NrKQogICAgICAgICAgICAgLy8gbXVzdCBrZWVwIGl0IGFsaXZlLgogICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNz
b3JHZXR0ZXIpIHsKQEAgLTE3MzksMTUgKzE3NTAsMjEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAg
ICBHUFJSZWcgYmFzZSA9IGJhc2VHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgpKSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGFpbnQgcHJldHR5LCBidXQgdGhlIHBhdGggdGhhdCBzdHJ1Y3R1cmUg
Y2hlY2tzIGxvYWRzIHRoZSByZWFsIGJhc2UgaW50byBzY3JhdGNoR1BSLgorICAgICAgICAgICAg
YmFzZSA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQobV9vZmZzZXQpKSB7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAot
ICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICBiYXNlLAog
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwog
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3Ms
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKApAQCAtMTc1OCw2ICsxNzc1
LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAog
ICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAg
ICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVs
bCBpZiB0aGlzIHdhc24ndCB0cnVlLgogICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9u
IDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDExIEBAIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQ
b2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAotICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFz
ZSkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
LCBib29sIHZpYVByb3h5LCAKKyAgICBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IGN1c3Rv
bVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewogICAgIEFTU0VSVCh0eXBlID09
IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUgPT0gQ3VzdG9tQWNj
ZXNzb3JTZXR0ZXIpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
PiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBpZGVu
dGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBmYWxzZSwgbnVsbHB0ciwg
Y3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBudWxscHRyLCBjdXN0b21TbG90QmFzZSwgV1RG
TW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKICAgICByZXN1bHQtPm1fY3VzdG9tQWNjZXNz
b3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGN1c3RvbVNl
dHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmgJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIE9wdGlvbmFsPERPTUF0
dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiwKKyAgICAgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+LCBib29sIHZpYVByb3h5ID0gZmFsc2UsCiAgICAgICAgIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyID0gbnVsbHB0ciwgSlNPYmplY3QqIGN1c3Rv
bVNsb3RCYXNlID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJiwg
Q29tbWFQcmludGVyJikgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAy
NjU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNz
Q2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgUHJveHlhYmxlQWNjZXNz
Q2FzZTo6UHJveHlhYmxlQWNjZXNzQ2FzZQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
UHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNz
VHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0
aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gTG9hZCB8fCB0eXBlID09IE1pc3Mg
fHwgdHlwZSA9PSBHZXRHZXR0ZXIpOworICAgIEFTU0VSVCh0eXBlID09IExvYWQgfHwgdHlwZSA9
PSBNaXNzIHx8IHR5cGUgPT0gR2V0R2V0dGVyIHx8IHR5cGUgPT0gUmVwbGFjZSk7CiAgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgUHJveHlhYmxlQWNjZXNzQ2FzZSh2
bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWlu
KSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgdHJ1ZSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUodm0pIDogbnVsbHB0cjsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENv
bW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7
CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xv
dCk7CiAKICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGNv
ZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA6
IG51bGxwdHI7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBDb21tb25TbG93UGF0aHM6Om9y
aWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFsdWUpOwogICAgIGJhc2VWYWx1ZS5w
dXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpOwogCiAgICAgTE9HX0lD
KChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI2NTQ4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5MSw5ICs1OTEsMzMgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRAogICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAgICAgICAgIEpTQ2VsbCogYmFzZUNl
bGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAKKyAgICAgICAgYm9vbCBpc1Byb3h5ID0gZmFsc2U7
CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50
YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAgICAgICAgICAg
aXNQcm94eSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSkgeworICAg
ICAgICAgICAgaWYgKGJhc2VDZWxsICE9IHNsb3QuYmFzZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gUG9seVByb3RvIGFuZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBkb24ndCBjdXJyZW50
bHkgc3VwcG9ydCBKU1Byb3h5LCBzbyB3ZQorICAgICAgICAgICAgICAgIC8vIGp1c3QgYmFpbCBv
dXQgaWYgdGhpcyBpcyBhIHByb3RvIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBv
bmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRv
bid0CisgICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmpl
Y3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBp
biBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFi
bGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKTsKKyAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCiAgICAgICAgIGlmIChzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgICAgICBpZiAoc2xv
dC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KSB7CiAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBhc3NlcnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3ZSBhY2NpZGVudGFs
bHkgZm9yZ2V0IHRvIGRpc2FibGUgY2FjaGluZwpAQCAtNjA4LDcgKzYzMiw4IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAg
ICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xk
U3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKQEAgLTYxOSw4ICs2NDQsOSBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6
OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJl
LCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAK
ICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKQEAgLTcwNiw4
ICs3MzIsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAKICAg
ICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAog
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3Io
KSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9t
VmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAg
ICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNz
Q2hhaW4pLCBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBz
bG90LmJhc2UoKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0
LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBz
bG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2Uo
KSA6IG51bGxwdHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKICAgICAgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKICAgICAg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwpA
QCAtNzQyLDcgKzc2OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZz
ZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAyNjU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxNiBAQCBpbmxpbmUg
Ym9vbCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tsCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogb3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQoVk0m
IHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGlmICh2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IFB1cmVG
b3J3YXJkaW5nUHJveHlUeXBlKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTUHJveHkqPih2YWx1
ZSktPnRhcmdldCgpLT5zdHJ1Y3R1cmUodm0pOworICAgIHJldHVybiB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKHZtKTsKK30KKworCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dERpcmVj
dFdpdGhSZWlmeShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZSoqIHJlc3VsdCA9IG51bGxwdHIpCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMTQ1LDcgKzE1NSw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0RGlyZWN0V2l0aFIKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgaWYgKHJlc3VsdCkK
LSAgICAgICAgKnJlc3VsdCA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICpy
ZXN1bHQgPSBvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZU9iamVjdCk7CiAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNjU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0MSw3ICs4NDEsNyBA
QCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAgICAgICBK
U1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChncy5p
c0dldHRlclNldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50
aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICAgICAgICAgIGlmICghdGhpcy0+
c3RydWN0dXJlKHZtKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LT5zdHJ1Y3R1cmUodm0pLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQogICAgICAgICAgICAg
ICAgICAgICBzbG90LnNldENhY2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7CiAKICAgICAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBzbG90LnRoaXNW
YWx1ZSgpLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0
KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpOwpAQCAtODQ5LDYgKzg0OSw5IEBAIGJvb2wgSlNPYmpl
Y3Q6OnB1dElubGluZVNsb3coSlNHbG9iYWxPYmoKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0
dGVyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2Fj
aGluZyB0aGVzZSBpZiB3ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlvbmFyeToKKyAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MzQ3CisKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRl
Y2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRpYWxseSBleGVjdXRl
IGFyaWJpdHJhcnkgSlMuCiAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tQWNjZXNzb3Iob2JqLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxs
KCkpLT5zZXR0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsNyBAQCBj
b25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihCb29sLCB1c2VM
SUNNRnV6emluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIHNl
ZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoRG91Ymxl
LCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAg
ICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406440</attachid>
            <date>2020-08-11 18:40:02 -0700</date>
            <delta_ts>2020-08-11 19:10:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>28932</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU1MzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoZSBSZXBsYWNlIGFuZCBTZXR0ZXJzIG9uIFB1cmVG
b3J3YXJkaW5nUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Byb3BlcnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1q
cy1wcm94eS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKwog
MjAyMC0wOC0wNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdFeHAgc3RpY2t5IG5vdCBtYXRjaGluZyBhbHRlcm5hdGVzIGNvcnJlY3RseSwgaWdub3Jp
bmcgbGFzdEluZGV4IHJlcXVpcmVtZW50CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
cm9wZXJ0eS1yZXBsYWNlLWFuZC1zZXR0ZXItb24tanMtcHJveHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHJvcGVydHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpz
LXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Byb3Bl
cnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tZXhwb3NlQ3VzdG9tU2V0dGVyc09u
R2xvYmFsT2JqZWN0Rm9yVGVzdGluZz10cnVlIikKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworbGV0IGdsb2JhbCA9IHRo
aXM7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAiWSIsIHsKKyAgICBzZXQ6IGZ1bmN0
aW9uKHYpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IGdsb2JhbCk7CisgICAgICAgIGFzc2Vy
dCh2ID09PSBpICsgMSk7CisgICAgICAgIHRoaXMuX1kgPSB2OworICAgIH0KK30pOworCitmdW5j
dGlvbiBmb28oeCwgeSwgeiwgYSkgeworICAgIHRoaXMuWCA9IHg7CisgICAgdGhpcy5ZID0geTsK
KyAgICB0aGlzLnRlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9IHo7CisgICAgdGhpcy50ZXN0Q3Vz
dG9tVmFsdWVTZXR0ZXIgPSBhOworfQorbm9JbmxpbmUoZm9vKTsKKworbGV0IGk7Citmb3IgKGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgZm9vKGksIGkgKyAxLCBpICsgMiwgaSArIDMp
OworICAgIGFzc2VydChnbG9iYWwuWCA9PT0gaSk7CisgICAgYXNzZXJ0KGdsb2JhbC5fWSA9PT0g
aSArIDEpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9PT0g
aSArIDIpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21WYWx1ZVNldHRlciA9PT0gaSAr
IDMpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjU1MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDAgQEAKKzIwMjAtMDgtMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZvcndhcmRp
bmdQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgZGlkbid0IHVzZWQgdG8gY2FjaGUgYW55IFB1dHMgb24gUHVyZUZvcndhcmRpbmdQcm94eS4g
VGhpcyBwYXRjaAorICAgICAgICBpbXBsZW1lbnRzIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0
ZXJzIG9uIFB1cmVGb3J3YXJkaW5nUHJveHkuIFdlIGRvbid0IHN1cHBvcnQKKyAgICAgICAgVHJh
bnNpdGlvbiBwdXRzIGJlY2F1c2UgaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGlmZmVy
ZW50IGdsb2JhbCBvYmplY3RzCisgICAgICAgIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3Ry
dWN0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFsaWducyBob3cgb3Vy
IHJ1bnRpbWUgYW5kIHRoZSBJQ3MgaW52b2tlIEN1c3RvbXMgd2hlbiB0aGUKKyAgICAgICAgcGFz
c2VkIGluIHx0aGlzfCB2YWx1ZSBpcyBKU1Byb3h5LiBPdXIgcnVudGltZSB3b3VsZCBwYXNzIGlu
IHRoZSBKU1Byb3h5LAorICAgICAgICB3aGVyZSBvdXIgSUNzIHVzZWQgdG8gcGFzcyBpbiB0aGUg
dGFyZ2V0IG9mIHRoZSBKU1Byb3h5LiBUaGlzIHBhdGNoIGFsaWducyBvdXIKKyAgICAgICAgSUMg
YmVoYXZpb3IgdG8gbWF0Y2ggb3VyIHJ1bnRpbWUgYmVoYXZpb3IsIHdoaWNoIGhhcyB0aGUgYWRk
ZWQgYmVuZWZpdCBvZgorICAgICAgICBmcmVlaW5nIHVwIGEgbmVlZGVkIHJlZ2lzdGVyIGluIHRo
ZSBjb2RlIGZvciBjYWxsaW5nIGN1c3RvbXMgd2l0aCBQdXQuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIGFsc28gcmVuYW1lcyBzb21lIG9mIHRoZSByZWdpc3RlcnMgaW4gdGhlIElDIGNv
ZGUgdG8gY2xlYXIKKyAgICAgICAgdXAgd2hhdCB0aGV5J3JlIHVzZWQgZm9yLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBpcyBhIDIuNXggc3BlZWR1cCBvbiB0aGUgbWljcm9iZW5jaG1hcmsgSSd2
ZSBhZGRlZCwgYW5kIGEgMTUtMjAlIHNwZWVkdXAKKyAgICAgICAgb24gSmV0U3RyZWFtMidzIDNk
LWN1YmUtU1AuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVh
dGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaDoKKyAgICAg
ICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgor
ICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1
Y3R1cmVCZWZvcmVQdXQpOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnB1dERpcmVj
dFdpdGhSZWlmeSk6CisKIDIwMjAtMDgtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigpIG5lZ2xlY3Rl
ZCB0byBzZXQgdGhlIGV4Y2VwdGlvbiBwb2ludGVyIHJlc3VsdCBpbiBvbmUgY2FzZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNjU1MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDYgKzYzOCw0NiBAQCBwcml2YXRl
OgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNr
IiwgZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaywgMSk7CiAKICAgICAgICAg
YWRkRnVuY3Rpb24odm0sICJhc0RvdWJsZU51bWJlciIsIGZ1bmN0aW9uQXNEb3VibGVOdW1iZXIs
IDEpOworCisgICAgICAgIGlmIChPcHRpb25zOjpleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxP
YmplY3RGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDdXN0
b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbSA9IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBu
dWxscHRyLCB0ZXN0Q3VzdG9tQWNjZXNzb3JTZXR0ZXIpOworICAgICAgICAgICAgICAgIElkZW50
aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0Q3VzdG9t
QWNjZXNzb3JTZXR0ZXIiKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5wdXREaXJlY3RDdXN0b21B
Y2Nlc3Nvcih2bSwgaWRlbnRpZmllciwgY3VzdG9tLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpD
dXN0b21BY2Nlc3Nvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBDdXN0b21HZXR0ZXJTZXR0ZXIqIGN1c3RvbSA9IEN1c3RvbUdldHRlclNldHRlcjo6
Y3JlYXRlKHZtLCBudWxscHRyLCB0ZXN0Q3VzdG9tVmFsdWVTZXR0ZXIpOworICAgICAgICAgICAg
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0
ZXN0Q3VzdG9tVmFsdWVTZXR0ZXIiKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5wdXREaXJlY3RD
dXN0b21BY2Nlc3Nvcih2bSwgaWRlbnRpZmllciwgY3VzdG9tLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21WYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCB0ZXN0Q3VzdG9tU2V0dGVySW1wbChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKKyAgICB7CisgICAgICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkuaXNDZWxsKCkpOworICAgICAgICBKU0NlbGwq
IHRoaXNDZWxsID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkuYXNDZWxsKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXNDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5
cGUpOworICAgICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8R2xvYmFs
T2JqZWN0Kj4odm0sIGpzQ2FzdDxKU1Byb3h5Kj4odGhpc0NlbGwpLT50YXJnZXQoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOworCisgICAgICAgIElkZW50aWZpZXIgaWRl
bnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIERvbnRFbnVtKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCB0ZXN0Q3VzdG9tQWNjZXNzb3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3RDdXN0b21T
ZXR0ZXJJbXBsKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
X3Rlc3RDdXN0b21BY2Nlc3NvclNldHRlciIpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHRl
c3RDdXN0b21WYWx1ZVNldHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdGVzdEN1c3RvbVNldHRlckltcGwobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJfdGVzdEN1c3RvbVZhbHVlU2V0dGVyIik7
CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2Jq
ZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQg
YXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkocmV2aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODYsNiArNzg2LDcgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKIAogICAgIGF1dG8gZW1pdERlZmF1
bHRHdWFyZCA9IFsmXSAoKSB7CiAgICAgICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7
CisgICAgICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICAgICAgR1BSUmVnIGJh
c2VGb3JBY2Nlc3NHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOwogICAgICAgICAgICAgaml0Lm1vdmUo
c3RhdGUuYmFzZUdQUiwgYmFzZUZvckFjY2Vzc0dQUik7CiAgICAgICAgICAgICBtX3BvbHlQcm90
b0FjY2Vzc0NoYWluLT5mb3JFYWNoKHZtLCBzdHJ1Y3R1cmUoKSwgWyZdIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgYm9vbCBhdEVuZCkgewpAQCAtOTA0LDExICs5MDUsMTMgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICB9CiAKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFj
ZUxvYWQ6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgdGhpcy0+YXM8
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZT4oKS5lbWl0KHN0YXRlLCBmYWxsVGhyb3VnaCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBjYXNlIEluZGV4ZWRTY29wZWRBcmd1bWVudHNM
b2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29k
ZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJh
c2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51
LnByb3BlcnR5R1BSOwogCkBAIC05NzQsNiArOTc3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZVdpdGhHdWFyZCgKICAgICB9CiAKICAgICBjYXNlIEluZGV4ZWREaXJlY3RBcmd1bWVudHNM
b2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29k
ZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJh
c2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51
LnByb3BlcnR5R1BSOwogICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKQEAgLTk5
Nyw2ICsxMDAxLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBj
YXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOiB7
CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3
cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3Ig
dGhlIHByb3BlcnR5LgogCiAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJy
YXlUeXBlKG1fdHlwZSk7CkBAIC0xMDg3LDYgKzEwOTIsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlV2l0aEd1YXJkKAogICAgIH0KIAogICAgIGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6IHsK
KyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdy
aXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0
aGUgcHJvcGVydHkuCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVy
dHlHUFI7CiAKQEAgLTExNDIsNiArMTE0OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgY2FzZSBJbmRleGVkRG91YmxlTG9hZDoKICAgICBjYXNlIEluZGV4ZWRD
b250aWd1b3VzTG9hZDoKICAgICBjYXNlIEluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOiB7CisgICAg
ICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVu
IHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHBy
b3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BS
OwogCkBAIC0xMjU4LDYgKzEyNjUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJp
YzogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAgICBHUFJSZWcgcHJvdG90
eXBlR1BSID0gc3RhdGUudS5wcm90b3R5cGVHUFI7CiAgICAgICAgIC8vIExlZ2VuZDogdmFsdWUg
PSBgYmFzZSBpbnN0YW5jZW9mIHByb3RvdHlwZUdQUmAuCiAgICAgICAgIApAQCAtMTQyNiw0MCAr
MTQzNCw0MiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAg
ICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIG9mZnNldCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0
R1BSOwotICAgICAgICBpZiAodmlhUHJveHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSAhPSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIp
OyAvLyBCZWNhdXNlIHNldHRlcnMgbmVlZCB0byBub3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQ
Ui4KKyAgICAgICAgYm9vbCBkb2VzUHJvcGVydHlTdG9yYWdlTG9hZHMgPSBtX3R5cGUgPT0gTG9h
ZCAKKyAgICAgICAgICAgIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIKKyAgICAgICAgICAgIHx8IG1f
dHlwZSA9PSBHZXR0ZXIKKyAgICAgICAgICAgIHx8IG1fdHlwZSA9PSBTZXR0ZXI7CisKKyAgICAg
ICAgR1BSUmVnIHJlY2VpdmVyR1BSID0gYmFzZUdQUjsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5
T3duZXJHUFI7CisKKyAgICAgICAgaWYgKHZpYVByb3h5KCkgJiYgZG9lc1Byb3BlcnR5U3RvcmFn
ZUxvYWRzICYmICFtX3BvbHlQcm90b0FjY2Vzc0NoYWluICYmICFoYXNBbHRlcm5hdGVCYXNlKCkp
IHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGlzIHdoZW4gbG9hZGluZyBhbiBpbmxp
bmUgb3Igb3V0IG9mIGxpbmUgcHJvcGVydHkuIEZvciBjdXN0b21zLCB3ZSBjYW4KKyAgICAgICAg
ICAgIC8vIGludm9rZSB3aXRoIGEgcmVjZWl2ZXIgdmFsdWUgdGhhdCBpcyBhIEpTUHJveHkuIEZv
ciBnZXR0ZXJzL3NldHRlcnMsIHdlJ2xsIGFsc28gaW52b2tlCisgICAgICAgICAgICAvLyB0aGVt
IHdpdGggdGhlIEpTUHJveHkgYXMgfHRoaXN8LCBidXQgd2UgbmVlZCB0byBsb2FkIHRoZSBhY3R1
YWwgR2V0dGVyU2V0dGVyIGNlbGwgZnJvbQorICAgICAgICAgICAgLy8gdGhlIEpTUHJveHkncyB0
YXJnZXQuCisKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBT
ZXR0ZXIpCi0gICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHNjcmF0Y2hHUFI7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHlPd25lckdQUiA9IHNjcmF0Y2hHUFI7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7
Ci0KLSAgICAgICAgICAgIEFTU0VSVCgobV90eXBlICE9IEdldHRlciAmJiBtX3R5cGUgIT0gU2V0
dGVyKSB8fCBiYXNlRm9yR2V0R1BSICE9IGJhc2VHUFIpOwotICAgICAgICAgICAgQVNTRVJUKG1f
dHlwZSAhPSBTZXR0ZXIgfHwgYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKTsK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0eU93bmVyR1BSID0gdmFsdWVSZWdzUGF5bG9hZEdQUjsK
IAogICAgICAgICAgICAgaml0LmxvYWRQdHIoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKLSAgICAgICAgICAg
ICAgICBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYXNlRm9y
R2V0R1BSID0gYmFzZUdQUjsKLQotICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKLSAg
ICAgICAgaWYgKG1fcG9seVByb3RvQWNjZXNzQ2hhaW4pIHsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU93bmVyR1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWlu
KSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzbid0IHByZXR0eSwgYnV0IHdlIGtub3cgd2UgZ290
IGhlcmUgdmlhIGdlbmVyYXRlV2l0aEd1YXJkLAogICAgICAgICAgICAgLy8gYW5kIGl0IGxlZnQg
dGhlIGJhc2VGb3JBY2Nlc3MgaW5zaWRlIHNjcmF0Y2hHUFIuIFdlIGNvdWxkIHJlLWRlcml2ZSB0
aGUgYmFzZSwKICAgICAgICAgICAgIC8vIGJ1dCBpdCdkIHJlcXVpcmUgZW1pdHRpbmcgdGhlIHNh
bWUgY29kZSB0byBsb2FkIHRoZSBiYXNlIHR3aWNlLgotICAgICAgICAgICAgYmFzZUZvckFjY2Vz
c0dQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaGFz
QWx0ZXJuYXRlQmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQ
UjsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIg
PSBiYXNlRm9yR2V0R1BSOwotICAgICAgICB9CisgICAgICAgICAgICBwcm9wZXJ0eU93bmVyR1BS
ID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfSBlbHNlIGlmIChoYXNBbHRlcm5hdGVCYXNlKCkpIHsK
KyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHBy
b3BlcnR5T3duZXJHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHByb3BlcnR5T3duZXJHUFIgPSByZWNlaXZlckdQUjsKIAogICAgICAgICBHUFJSZWcgbG9hZGVk
VmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbVZh
bHVlR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvckdldHRlciAmJiBtX3R5cGUgIT0g
Q3VzdG9tVmFsdWVTZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29yU2V0dGVyKSB7Cisg
ICAgICAgIGlmIChkb2VzUHJvcGVydHlTdG9yYWdlTG9hZHMpIHsKICAgICAgICAgICAgIGlmICht
X3R5cGUgPT0gTG9hZCB8fCBtX3R5cGUgPT0gR2V0R2V0dGVyKQogICAgICAgICAgICAgICAgIGxv
YWRlZFZhbHVlR1BSID0gdmFsdWVSZWdzUGF5bG9hZEdQUjsKICAgICAgICAgICAgIGVsc2UKQEAg
LTE0NzAsMTAgKzE0ODAsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNz
R2VuZQogCiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKICAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChtX29mZnNldCkpCi0gICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJh
c2VGb3JBY2Nlc3NHUFI7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHByb3BlcnR5T3du
ZXJHUFI7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhwcm9wZXJ0eU93bmVyR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CiAgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwogICAgICAgICAgICAgfQpAQCAt
MTUwOSw3ICsxNTE5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlRE9NSklUKCkg
JiYgYWNjZXNzLmRvbUF0dHJpYnV0ZSgpLT5kb21KSVQpIHsKLSAgICAgICAgICAgICAgICBhY2Nl
c3MuZW1pdERPTUpJVEdldHRlcihzdGF0ZSwgYWNjZXNzLmRvbUF0dHJpYnV0ZSgpLT5kb21KSVQs
IGJhc2VGb3JHZXRHUFIpOworICAgICAgICAgICAgICAgIGFjY2Vzcy5lbWl0RE9NSklUR2V0dGVy
KHN0YXRlLCBhY2Nlc3MuZG9tQXR0cmlidXRlKCktPmRvbUpJVCwgcmVjZWl2ZXJHUFIpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY4NCw2
ICsxNjk0LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobV90eXBl
ID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlciB8
fCBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29y
U2V0dGVyKTsKKyAgICAgICAgICAgIEFTU0VSVCghZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzKTsg
Ly8gT3Igd2UgbmVlZCBhbiBleHRyYSByZWdpc3Rlci4gV2UgcmVseSBvbiBwcm9wZXJ0eU93bmVy
R1BSIGJlaW5nIGNvcnJlY3QgaGVyZS4KIAogICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHJv
b20gZm9yIHRoZSBDIGNhbGwgc28gYW55IG9mIG91ciBzdGFjayBzcGlsbGFnZSBpc24ndCBvdmVy
d3JpdHRlbi4gSXQncwogICAgICAgICAgICAgLy8gaGFyZCB0byB0cmFjayBpZiBzb21lb25lIGRp
ZCBzcGlsbGFnZSBvciBub3QsIHNvIHdlIGp1c3QgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIG5lZWQK
QEAgLTE2OTEsMTQgKzE3MDIsMTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCiAg
ICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBhIHN1cGVyIGFjY2VzcwotICAgICAgICAgICAg
R1BSUmVnIGJhc2VGb3JDdXN0b21HZXRHUFIgPSBiYXNlR1BSICE9IHRoaXNHUFIgPyB0aGlzR1BS
IDogYmFzZUZvckdldEdQUjsKKyAgICAgICAgICAgIEdQUlJlZyByZWNlaXZlckZvckN1c3RvbUdl
dEdQUiA9IGJhc2VHUFIgIT0gdGhpc0dQUiA/IHRoaXNHUFIgOiByZWNlaXZlckdQUjsKIAogICAg
ICAgICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAgICAg
ICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwotICAgICAg
ICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3Bl
cnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChy
ZWNpZXZlcikuCisgICAgICAgICAgICAvLyBDdXN0b20gdmFsdWVzIGFyZSBwYXNzZWQgdGhlIHNs
b3RCYXNlICh0aGUgcHJvcGVydHkgaG9sZGVyKSwgY3VzdG9tIGFjY2Vzc29ycyBhcmUgcGFzc2Vk
IHRoZSB0aGlzVmF1bGUgKHJlY2VpdmVyKS4KICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcyBkaWZmZXJlbmNlcyBpbiBjdXN0b20gdmFsdWVzIGFuZCBjdXN0b20gYWNjZXNzb3JzLgog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODAxNAotICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JDdXN0b20gPSBtX3R5cGUgPT0gQ3VzdG9t
VmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyID8gYmFzZUZvckFjY2Vz
c0dQUiA6IGJhc2VGb3JDdXN0b21HZXRHUFI7IAorICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JD
dXN0b20gPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZh
bHVlU2V0dGVyID8gcHJvcGVydHlPd25lckdQUiA6IHJlY2VpdmVyRm9yQ3VzdG9tR2V0R1BSOyAK
ICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGtlZXAgZ2xvYmFsT2JqZWN0IGFsaXZl
IHNpbmNlIHRoZSBvd25lciBDb2RlQmxvY2sgKGV2ZW4gaWYgSlNHbG9iYWxPYmplY3QqIGlzIG9u
ZSBvZiBDb2RlQmxvY2sgdGhhdCBpcyBpbmxpbmVkIGFuZCBoZWxkIGJ5IERGRyBDb2RlQmxvY2sp
CiAgICAgICAgICAgICAvLyBtdXN0IGtlZXAgaXQgYWxpdmUuCiAgICAgICAgICAgICBpZiAobV90
eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRl
cikgewpAQCAtMTczOSwxNSArMTc1MCwyMSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lCiAgICAgfQogCiAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIEdQUlJl
ZyBiYXNlID0gYmFzZUdQUjsKKyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgYWludCBwcmV0dHksIGJ1dCB0aGUgcGF0aCB0aGF0IHN0cnVjdHVyZSBjaGVja3Mg
bG9hZHMgdGhlIHJlYWwgYmFzZSBpbnRvIHNjcmF0Y2hHUFIuCisgICAgICAgICAgICBiYXNlID0g
c2NyYXRjaEdQUjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29m
ZnNldCkpIHsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZh
bHVlUmVncywKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIGJhc2UsCiAgICAgICAg
ICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCkBAIC0xNzU4LDYgKzE3NzUsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgfQogCiAgICAgY2Fz
ZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAgICAgIC8v
IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsIGlmIHRo
aXMgd2Fzbid0IHRydWUuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjY1NTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTEgQEAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlcgogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90
b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPiBjdXN0b21TZXR0ZXIsCi0gICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQorICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIHN0ZDo6dW5p
cXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4sIGJvb2wg
dmlhUHJveHksIAorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVy
LCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCiB7CiAgICAgQVNTRVJUKHR5cGUgPT0gU2V0dGVy
IHx8IHR5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNl
dHRlcik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3Vs
dChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIs
IG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGZhbHNlLCBudWxscHRyLCBjdXN0b21T
bG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgdmlhUHJveHksIG51bGxwdHIsIGN1c3RvbVNsb3RCYXNlLCBXVEZNb3ZlKHBy
b3RvdHlwZUFjY2Vzc0NoYWluKSkpOwogICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3NvciA9IGN1
c3RvbVNldHRlciA/IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oY3VzdG9tU2V0dGVyKSA6
IG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkocmV2
aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNl
dHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiAgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgT3B0aW9uYWw8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4pOwogCiAg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBQcm9w
ZXJ0eU9mZnNldCwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBz
dGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+LAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4sIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKICAgICAgICAgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09iamVjdCogY3VzdG9tU2xvdEJh
c2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVBy
aW50ZXImKSBjb25zdCBmaW5hbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI2NTUzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQcm94eWFibGVBY2Nlc3NDYXNlOjpQ
cm94eWFibGVBY2Nlc3NDYXNlCiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBQcm94eWFi
bGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNl
dCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbikKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBMb2FkIHx8IHR5cGUgPT0gTWlzcyB8fCB0eXBl
ID09IEdldEdldHRlcik7CisgICAgQVNTRVJUKHR5cGUgPT0gTG9hZCB8fCB0eXBlID09IE1pc3Mg
fHwgdHlwZSA9PSBHZXRHZXR0ZXIgfHwgdHlwZSA9PSBSZXBsYWNlKTsKICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBQcm94eWFibGVBY2Nlc3NDYXNlKHZtLCBvd25l
ciwgdHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlh
UHJveHksIGFkZGl0aW9uYWxTZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCB0cnVlLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSh2bSkgOiBudWxscHRyOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gQ29tbW9uU2xv
d1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZVZhbHVlKTsKICAgICBi
YXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90KTsKIAog
ICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplLCBiYXNl
VmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1
ZSkpOwpAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkTm9uU3QKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgY29kZUJsb2Nr
LT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZh
bHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pIDogbnVsbHB0
cjsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxT
dHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGlu
ZShnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAKICAgICBMT0dfSUMoKElDRXZl
bnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5m
b09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjY1NTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkx
LDkgKzU5MSwyOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAg
ICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkp
CiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKIAorICAgICAgICBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKKyAg
ICAgICAgICAgIGJhc2VDZWxsID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgp
OworICAgICAgICAgICAgYmFzZVZhbHVlID0gYmFzZUNlbGw7CisgICAgICAgICAgICBpc1Byb3h5
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1Byb3h5KSB7CisgICAgICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVy
cyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAgICAgICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMg
YmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVy
ZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCisgICAgICAg
ICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNs
b3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkKKyAgICAgICAg
ICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKKyAgICAgICAgICAgICAgICB8fCBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7CisgICAgICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJv
eHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKwogICAgICAgICBp
ZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewog
ICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQ
cm9wZXJ0eSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0IGhlbHBzIGNhdGNoIGJ1
Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxlIGNhY2hpbmcKQEAgLTYwOCw3
ICs2MjcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2Fj
aGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkK
LSAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaXNQ
cm94eSkgewogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CkBAIC02MTksOCArNjM5
LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9sZFN0cnVjdHVyZSk7CisgICAg
ICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwgaXNQcm94
eSk7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVCghaXNQcm94
eSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6TmV3UHJvcGVydHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkpCkBAIC03MDYsOCArNzI3LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRAogCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xv
dC5pc0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6
IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZN
b3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNl
KCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vz
c0NoYWluKSwgaXNQcm94eSwgc2xvdC5jdXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNlKCkgIT0gYmFz
ZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBudWxscHRyKTsKICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSk7CiAgICAgICAg
ICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwogICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBl
QWNjZXNzQ2hhaW47CiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKQEAgLTc0Miw3ICs3NjQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25T
ZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2
ICsxMzcsMTYgQEAgaW5saW5lIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIG9yaWdpbmFsU3Ry
dWN0dXJlQmVmb3JlUHV0KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVl
LmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAodmFsdWUuYXNDZWxs
KCktPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxKU1Byb3h5Kj4odmFsdWUpLT50YXJnZXQoKS0+c3RydWN0dXJlKHZtKTsKKyAgICByZXR1
cm4gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Cit9CisKKwogc3RhdGljIEFMV0FZU19J
TkxJTkUgdm9pZCBwdXREaXJlY3RXaXRoUmVpZnkoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmUqKiByZXN1
bHQgPSBudWxscHRyKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKQEAgLTE0NSw3ICsxNTUsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dERpcmVj
dFdpdGhSCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAg
fQogICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICAqcmVzdWx0ID0gb3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0s
IGJhc2VPYmplY3QpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBiYXNlT2JqZWN0LT5wdXRE
aXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjY1NTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NDEsNyArODQxLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhKU0dsb2Jh
bE9iagogICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7CiAg
ICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRvIGNhY2hlIHRoaXMgcHJvcGVy
dHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0cmFyeSBKUy4KLSAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMtPnN0cnVjdHVyZSh2bSktPmlzRGljdGlvbmFyeSgpKQorICAgICAg
ICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSkKICAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVTZXR0ZXIob2JqLCBv
ZmZzZXQpOwogCiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBjYWxsU2V0dGVyKGdsb2Jh
bE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgp
ID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpKTsKQEAgLTg0OSw2ICs4
NDksOSBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChn
cy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUgbm90IGFuIHVuY2FjaGVhYmxl
IGRpY3Rpb25hcnk6CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNTM0NworCiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBt
YWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgd2Ug
cG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgogICAgICAgICAgICAgICAgIGlmIChh
dHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQogICAgICAgICAg
ICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwganNDYXN0PEN1c3RvbUdldHRl
clNldHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNjU1MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1p
bgogICAgIHYoQm9vbCwgdXNlTElDTUZ1enppbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0MjQyLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBO
b3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2Jh
bE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKIAogZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>
<flag name="review"
          id="421824"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406442</attachid>
            <date>2020-08-11 19:10:57 -0700</date>
            <delta_ts>2020-08-12 19:14:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>29748</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU1MzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoZSBSZXBsYWNlIGFuZCBTZXR0ZXJzIG9uIFB1cmVG
b3J3YXJkaW5nUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Byb3BlcnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1q
cy1wcm94eS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKwog
MjAyMC0wOC0wNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWdFeHAgc3RpY2t5IG5vdCBtYXRjaGluZyBhbHRlcm5hdGVzIGNvcnJlY3RseSwgaWdub3Jp
bmcgbGFzdEluZGV4IHJlcXVpcmVtZW50CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9w
cm9wZXJ0eS1yZXBsYWNlLWFuZC1zZXR0ZXItb24tanMtcHJveHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHJvcGVydHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpz
LXByb3h5LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Byb3Bl
cnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1qcy1wcm94eS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tZXhwb3NlQ3VzdG9tU2V0dGVyc09u
R2xvYmFsT2JqZWN0Rm9yVGVzdGluZz10cnVlIikKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworbGV0IGdsb2JhbCA9IHRo
aXM7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAiWSIsIHsKKyAgICBzZXQ6IGZ1bmN0
aW9uKHYpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IGdsb2JhbCk7CisgICAgICAgIGFzc2Vy
dCh2ID09PSBpICsgMSk7CisgICAgICAgIHRoaXMuX1kgPSB2OworICAgIH0KK30pOworCitmdW5j
dGlvbiBmb28oeCwgeSwgeiwgYSkgeworICAgIHRoaXMuWCA9IHg7CisgICAgdGhpcy5ZID0geTsK
KyAgICB0aGlzLnRlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9IHo7CisgICAgdGhpcy50ZXN0Q3Vz
dG9tVmFsdWVTZXR0ZXIgPSBhOworfQorbm9JbmxpbmUoZm9vKTsKKworbGV0IGk7Citmb3IgKGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgZm9vKGksIGkgKyAxLCBpICsgMiwgaSArIDMp
OworICAgIGFzc2VydChnbG9iYWwuWCA9PT0gaSk7CisgICAgYXNzZXJ0KGdsb2JhbC5fWSA9PT0g
aSArIDEpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21BY2Nlc3NvclNldHRlciA9PT0g
aSArIDIpOworICAgIGFzc2VydChnbG9iYWwuX3Rlc3RDdXN0b21WYWx1ZVNldHRlciA9PT0gaSAr
IDMpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjU1MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDEgQEAKKzIwMjAtMDgtMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZvcndhcmRp
bmdQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgZGlkbid0IHVzZWQgdG8gY2FjaGUgYW55IFB1dHMgb24gUHVyZUZvcndhcmRpbmdQcm94eS4g
VGhpcyBwYXRjaAorICAgICAgICBpbXBsZW1lbnRzIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0
ZXJzIG9uIFB1cmVGb3J3YXJkaW5nUHJveHkuIFdlIGRvbid0IHN1cHBvcnQKKyAgICAgICAgVHJh
bnNpdGlvbiBwdXRzIGJlY2F1c2UgaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGlmZmVy
ZW50IGdsb2JhbCBvYmplY3RzCisgICAgICAgIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3Ry
dWN0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFsaWducyBob3cgb3Vy
IHJ1bnRpbWUgYW5kIHRoZSBJQ3MgaW52b2tlIEN1c3RvbXMgd2hlbiB0aGUKKyAgICAgICAgcGFz
c2VkIGluIHx0aGlzfCB2YWx1ZSBpcyBhIEpTUHJveHkuIEZvciBjdXN0b20gYWNjZXNzb3JzLCBv
dXIgcnVudGltZSBwYXNzZXMKKyAgICAgICAgaW4gdGhlIEpTUHJveHksIHdoZXJlIG91ciBJQ3Mg
dXNlZCB0byBwYXNzIGluIHRoZSB0YXJnZXQgb2YgdGhlIEpTUHJveHksIGZvcgorICAgICAgICB0
aGUgcmVjZWl2ZXIgdmFsdWUuIEZvciBjdXN0b20gdmFsdWVzLCB0aGUgSUMgYmVoYXZpb3IgYW5k
IHRoZSBydW50aW1lIHdlcmUKKyAgICAgICAgYWxyZWFkeSBhbGlnbmVkIGluIHBhc3NpbmcgaW4g
dGhlIHByb3BlcnR5IG93bmVyLCB3aGljaCBpcyB0aGUgSlNQcm94eSdzCisgICAgICAgIHRhcmdl
dC4gVGhpcyBwYXRjaCBhbGlnbnMgb3VyIElDIGJlaGF2aW9yIHRvIG1hdGNoIG91ciBydW50aW1l
IGJlaGF2aW9yLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbmFtZXMgc29t
ZSBvZiB0aGUgcmVnaXN0ZXJzIGluIHRoZSBJQyBjb2RlIHRvIGNsZWFyCisgICAgICAgIHVwIHdo
YXQgdGhleSdyZSB1c2VkIGZvci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSAyLjV4IHNw
ZWVkdXAgb24gdGhlIG1pY3JvYmVuY2htYXJrIEkndmUgYWRkZWQsIGFuZCBhIDE1LTIwJSBzcGVl
ZHVwCisgICAgICAgIG9uIEpldFN0cmVhbTIncyAzZC1jdWJlLVNQLgorCisgICAgICAgICogYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRC
eUlEKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlND
OjpDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KToKKyAgICAgICAg
KEpTQzo6Q29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkpOgorCiAyMDIwLTA4LTEx
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBTY3JpcHRFeGVjdXRh
YmxlOjpuZXdDb2RlQmxvY2tGb3IoKSBuZWdsZWN0ZWQgdG8gc2V0IHRoZSBleGNlcHRpb24gcG9p
bnRlciByZXN1bHQgaW4gb25lIGNhc2UuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzOCw2ICs2MzgsNTEgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJzZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayIsIGZ1bmN0aW9uU2V0VW5oYW5kbGVkUmVq
ZWN0aW9uQ2FsbGJhY2ssIDEpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiYXNEb3VibGVO
dW1iZXIiLCBmdW5jdGlvbkFzRG91YmxlTnVtYmVyLCAxKTsKKworICAgICAgICBpZiAoT3B0aW9u
czo6ZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZygpKSB7CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVyKiBjdXN0b20gPSBD
dXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgdGVzdEN1c3RvbUFjY2Vzc29y
U2V0dGVyKTsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyIik7CisgICAgICAg
ICAgICAgICAgdGhpcy0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIGlkZW50aWZpZXIsIGN1
c3RvbSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ3VzdG9tR2V0dGVyU2V0dGVy
KiBjdXN0b20gPSBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgbnVsbHB0ciwgdGVzdEN1
c3RvbVZhbHVlU2V0dGVyKTsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEN1c3RvbVZhbHVlU2V0dGVyIik7Cisg
ICAgICAgICAgICAgICAgdGhpcy0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIGlkZW50aWZp
ZXIsIGN1c3RvbSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbVNl
dHRlckltcGwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEdsb2JhbE9iamVj
dCogdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpOworCisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVj
dCh2bSwgaWRlbnRpZmllciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIERvbnRFbnVt
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB0ZXN0
Q3VzdG9tQWNjZXNzb3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkuaXNDZWxsKCkpOwor
ICAgICAgICBKU0NlbGwqIHRoaXNDZWxsID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkuYXND
ZWxsKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNDZWxsLT50eXBlKCkgPT0gUHVyZUZv
cndhcmRpbmdQcm94eVR5cGUpOworICAgICAgICBHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEdsb2JhbE9iamVjdCo+KHZtLCBqc0Nhc3Q8SlNQcm94eSo+KHRoaXNDZWxs
KS0+dGFyZ2V0KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAg
ICAgcmV0dXJuIHRlc3RDdXN0b21TZXR0ZXJJbXBsKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QsIGVuY29kZWRWYWx1ZSwgIl90ZXN0Q3VzdG9tQWNjZXNzb3JTZXR0ZXIiKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCB0ZXN0Q3VzdG9tVmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkuaXNDZWxsKCkpOworICAgICAgICBKU0NlbGwqIHRoaXNDZWxsID0gSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkuYXNDZWxsKCk7CisgICAgICAgIEdsb2JhbE9iamVjdCogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8R2xvYmFsT2JqZWN0Kj4odm0sIHRoaXNDZWxsKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIHJldHVybiB0ZXN0Q3VzdG9t
U2V0dGVySW1wbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBlbmNvZGVkVmFsdWUs
ICJfdGVzdEN1c3RvbVZhbHVlU2V0dGVyIik7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVu
Y3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVG
dW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjY1NTM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03ODYsNiArNzg2LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhH
dWFyZCgKIAogICAgIGF1dG8gZW1pdERlZmF1bHRHdWFyZCA9IFsmXSAoKSB7CiAgICAgICAgIGlm
IChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CisgICAgICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFIgPSBzdGF0ZS5zY3JhdGNo
R1BSOwogICAgICAgICAgICAgaml0Lm1vdmUoc3RhdGUuYmFzZUdQUiwgYmFzZUZvckFjY2Vzc0dQ
Uik7CiAgICAgICAgICAgICBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5mb3JFYWNoKHZtLCBzdHJ1
Y3R1cmUoKSwgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBhdEVuZCkgewpAQCAtOTA0
LDExICs5MDUsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICB9
CiAKICAgICBjYXNlIE1vZHVsZU5hbWVzcGFjZUxvYWQ6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQ
cm94eSgpKTsKICAgICAgICAgdGhpcy0+YXM8TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZT4oKS5l
bWl0KHN0YXRlLCBmYWxsVGhyb3VnaCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBj
YXNlIEluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJv
eHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVz
dWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogCkBAIC05NzQsNiArOTc3
LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICB9CiAKICAgICBj
YXNlIEluZGV4ZWREaXJlY3RBcmd1bWVudHNMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJv
eHkoKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVz
dWx0IGNvdWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogICAgICAgICBqaXQubG9h
ZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKQEAgLTk5Nyw2ICsxMDAxLDcgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9h
ZDoKICAgICBjYXNlIEluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ6CiAgICAgY2FzZSBJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
CiAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNv
dWxkIGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogCiAgICAgICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGUgPSB0b1R5cGVkQXJyYXlUeXBlKG1fdHlwZSk7CkBAIC0xMDg3LDYgKzEw
OTIsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIH0KIAogICAg
IGNhc2UgSW5kZXhlZFN0cmluZ0xvYWQ6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsK
ICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgY291
bGQgYWxpYXMgd2l0aCB0aGUgYmFzZSBvciB0aGUgcHJvcGVydHkuCiAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHN0YXRlLnUucHJvcGVydHlHUFI7CiAKQEAgLTExNDIsNiArMTE0OCw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgY2FzZSBJbmRleGVkRG91
YmxlTG9hZDoKICAgICBjYXNlIEluZGV4ZWRDb250aWd1b3VzTG9hZDoKICAgICBjYXNlIEluZGV4
ZWRBcnJheVN0b3JhZ2VMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAgICAg
ICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxkIGFs
aWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogCkBAIC0xMjU4LDYgKzEyNjUsNyBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBJbnN0YW5jZU9mR2VuZXJpYzogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOwogICAgICAgICBHUFJSZWcgcHJvdG90eXBlR1BSID0gc3RhdGUudS5wcm90b3R5cGVHUFI7
CiAgICAgICAgIC8vIExlZ2VuZDogdmFsdWUgPSBgYmFzZSBpbnN0YW5jZW9mIHByb3RvdHlwZUdQ
UmAuCiAgICAgICAgIApAQCAtMTQyNiw0MCArMTQzNCw0NyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgICAgICBpZiAodmlhUHJveHkoKSkg
ewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5
cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOyAvLyBCZWNhdXNlIHNldHRlcnMgbmVlZCB0byBu
b3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQUi4KKyAgICAgICAgYm9vbCBkb2VzUHJvcGVydHlT
dG9yYWdlTG9hZHMgPSBtX3R5cGUgPT0gTG9hZCAKKyAgICAgICAgICAgIHx8IG1fdHlwZSA9PSBH
ZXRHZXR0ZXIKKyAgICAgICAgICAgIHx8IG1fdHlwZSA9PSBHZXR0ZXIKKyAgICAgICAgICAgIHx8
IG1fdHlwZSA9PSBTZXR0ZXI7CisKKyAgICAgICAgYm9vbCB0YWtlc1Byb3BlcnR5T3duZXJBc0NG
dW5jdGlvbkFyZ3VtZW50ID0gbV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9
PSBDdXN0b21WYWx1ZVNldHRlcjsKKworICAgICAgICBHUFJSZWcgcmVjZWl2ZXJHUFIgPSBiYXNl
R1BSOworICAgICAgICBHUFJSZWcgcHJvcGVydHlPd25lckdQUjsKKworICAgICAgICBpZiAodmlh
UHJveHkoKSAmJiBkb2VzUHJvcGVydHlTdG9yYWdlTG9hZHMgJiYgIW1fcG9seVByb3RvQWNjZXNz
Q2hhaW4gJiYgIWhhc0FsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIHRoaXMgd2hlbiBsb2FkaW5nIGFuIGlubGluZSBvciBvdXQgb2YgbGluZSBwcm9wZXJ0eS4g
Rm9yIGN1c3RvbXMsIHdlIGNhbgorICAgICAgICAgICAgLy8gaW52b2tlIHdpdGggYSByZWNlaXZl
ciB2YWx1ZSB0aGF0IGlzIGEgSlNQcm94eS4gRm9yIGdldHRlcnMvc2V0dGVycywgd2UnbGwgYWxz
byBpbnZva2UKKyAgICAgICAgICAgIC8vIHRoZW0gd2l0aCB0aGUgSlNQcm94eSBhcyB8dGhpc3ws
IGJ1dCB3ZSBuZWVkIHRvIGxvYWQgdGhlIGFjdHVhbCBHZXR0ZXJTZXR0ZXIgY2VsbCBmcm9tCisg
ICAgICAgICAgICAvLyB0aGUgSlNQcm94eSdzIHRhcmdldC4KKwogICAgICAgICAgICAgaWYgKG1f
dHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikKLSAgICAgICAgICAgICAgICBiYXNl
Rm9yR2V0R1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU93bmVyR1BS
ID0gc2NyYXRjaEdQUjsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlRm9y
R2V0R1BSID0gdmFsdWVSZWdzUGF5bG9hZEdQUjsKLQotICAgICAgICAgICAgQVNTRVJUKChtX3R5
cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAhPSBTZXR0ZXIpIHx8IGJhc2VGb3JHZXRHUFIgIT0gYmFz
ZUdQUik7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCBiYXNlRm9yR2V0
R1BSICE9IHZhbHVlUmVnc1BheWxvYWRHUFIpOworICAgICAgICAgICAgICAgIHByb3BlcnR5T3du
ZXJHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cigK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6
dGFyZ2V0T2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOwotCi0gICAgICAg
IEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOwotICAgICAgICBpZiAobV9wb2x5UHJvdG9BY2Nlc3ND
aGFpbikgeworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBK
U1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHByb3BlcnR5T3duZXJHUFIpOworICAgICAgICB9IGVs
c2UgaWYgKG1fcG9seVByb3RvQWNjZXNzQ2hhaW4pIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXNu
J3QgcHJldHR5LCBidXQgd2Uga25vdyB3ZSBnb3QgaGVyZSB2aWEgZ2VuZXJhdGVXaXRoR3VhcmQs
CiAgICAgICAgICAgICAvLyBhbmQgaXQgbGVmdCB0aGUgYmFzZUZvckFjY2VzcyBpbnNpZGUgc2Ny
YXRjaEdQUi4gV2UgY291bGQgcmUtZGVyaXZlIHRoZSBiYXNlLAogICAgICAgICAgICAgLy8gYnV0
IGl0J2QgcmVxdWlyZSBlbWl0dGluZyB0aGUgc2FtZSBjb2RlIHRvIGxvYWQgdGhlIGJhc2UgdHdp
Y2UuCi0gICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChoYXNBbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAg
ICAgICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAg
IGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIHByb3BlcnR5T3duZXJHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICB9IGVs
c2UgaWYgKGhhc0FsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgcHJvcGVydHlPd25lckdQUiA9IHNjcmF0Y2hHUFI7
CisgICAgICAgIH0gZWxzZSBpZiAodmlhUHJveHkoKSAmJiB0YWtlc1Byb3BlcnR5T3duZXJBc0NG
dW5jdGlvbkFyZ3VtZW50KSB7CisgICAgICAgICAgICBwcm9wZXJ0eU93bmVyR1BSID0gc2NyYXRj
aEdQUjsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHByb3BlcnR5
T3duZXJHUFIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5T3duZXJHUFIg
PSByZWNlaXZlckdQUjsKIAogICAgICAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlk
R1BSUmVnOwotICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbVZhbHVlR2V0dGVyICYmIG1fdHlw
ZSAhPSBDdXN0b21BY2Nlc3NvckdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIg
JiYgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29yU2V0dGVyKSB7CisgICAgICAgIGlmIChkb2VzUHJv
cGVydHlTdG9yYWdlTG9hZHMpIHsKICAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCB8fCBt
X3R5cGUgPT0gR2V0R2V0dGVyKQogICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gdmFs
dWVSZWdzUGF5bG9hZEdQUjsKICAgICAgICAgICAgIGVsc2UKQEAgLTE0NzAsMTAgKzE0ODUsMTAg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZUdQUjsKICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29m
ZnNldCkpCi0gICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7Cisg
ICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHByb3BlcnR5T3duZXJHUFI7CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhwcm9wZXJ0eU93bmVyR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAogICAgICAg
ICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUdQ
UiA9IGxvYWRlZFZhbHVlR1BSOwogICAgICAgICAgICAgfQpAQCAtMTUwOSw3ICsxNTI0LDcgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlRE9NSklUKCkgJiYgYWNjZXNzLmRvbUF0dHJp
YnV0ZSgpLT5kb21KSVQpIHsKLSAgICAgICAgICAgICAgICBhY2Nlc3MuZW1pdERPTUpJVEdldHRl
cihzdGF0ZSwgYWNjZXNzLmRvbUF0dHJpYnV0ZSgpLT5kb21KSVQsIGJhc2VGb3JHZXRHUFIpOwor
ICAgICAgICAgICAgICAgIGFjY2Vzcy5lbWl0RE9NSklUR2V0dGVyKHN0YXRlLCBhY2Nlc3MuZG9t
QXR0cmlidXRlKCktPmRvbUpJVCwgcmVjZWl2ZXJHUFIpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY4NCw2ICsxNjk5LDcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEN1c3RvbVZhbHVlR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9t
VmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzKTsgLy8gT3Igd2UgbmVlZCBhbiBl
eHRyYSByZWdpc3Rlci4gV2UgcmVseSBvbiBwcm9wZXJ0eU93bmVyR1BSIGJlaW5nIGNvcnJlY3Qg
aGVyZS4KIAogICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBDIGNhbGwg
c28gYW55IG9mIG91ciBzdGFjayBzcGlsbGFnZSBpc24ndCBvdmVyd3JpdHRlbi4gSXQncwogICAg
ICAgICAgICAgLy8gaGFyZCB0byB0cmFjayBpZiBzb21lb25lIGRpZCBzcGlsbGFnZSBvciBub3Qs
IHNvIHdlIGp1c3QgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIG5lZWQKQEAgLTE2OTEsMTQgKzE3MDcs
MTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAg
ICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCiAgICAgICAgICAgICAvLyBDaGVj
ayBpZiBpdCBpcyBhIHN1cGVyIGFjY2VzcwotICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JDdXN0
b21HZXRHUFIgPSBiYXNlR1BSICE9IHRoaXNHUFIgPyB0aGlzR1BSIDogYmFzZUZvckdldEdQUjsK
KyAgICAgICAgICAgIEdQUlJlZyByZWNlaXZlckZvckN1c3RvbUdldEdQUiA9IGJhc2VHUFIgIT0g
dGhpc0dQUiA/IHRoaXNHUFIgOiByZWNlaXZlckdQUjsKIAogICAgICAgICAgICAgLy8gZ2V0dGVy
OiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAvLyBzZXR0ZXI6
IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhp
c09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwotICAgICAgICAgICAgLy8gQ3VzdG9tIHZh
bHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhvbGRlciksIGN1c3Rv
bSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNpZXZlcikuCisgICAgICAg
ICAgICAvLyBDdXN0b20gdmFsdWVzIGFyZSBwYXNzZWQgdGhlIHNsb3RCYXNlICh0aGUgcHJvcGVy
dHkgaG9sZGVyKSwgY3VzdG9tIGFjY2Vzc29ycyBhcmUgcGFzc2VkIHRoZSB0aGlzVmF1bGUgKHJl
Y2VpdmVyKS4KICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlcyBp
biBjdXN0b20gdmFsdWVzIGFuZCBjdXN0b20gYWNjZXNzb3JzLgogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODAxNAotICAgICAgICAgICAg
R1BSUmVnIGJhc2VGb3JDdXN0b20gPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90
eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyID8gYmFzZUZvckFjY2Vzc0dQUiA6IGJhc2VGb3JDdXN0
b21HZXRHUFI7IAorICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JDdXN0b20gPSB0YWtlc1Byb3Bl
cnR5T3duZXJBc0NGdW5jdGlvbkFyZ3VtZW50ID8gcHJvcGVydHlPd25lckdQUiA6IHJlY2VpdmVy
Rm9yQ3VzdG9tR2V0R1BSOyAKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGtlZXAg
Z2xvYmFsT2JqZWN0IGFsaXZlIHNpbmNlIHRoZSBvd25lciBDb2RlQmxvY2sgKGV2ZW4gaWYgSlNH
bG9iYWxPYmplY3QqIGlzIG9uZSBvZiBDb2RlQmxvY2sgdGhhdCBpcyBpbmxpbmVkIGFuZCBoZWxk
IGJ5IERGRyBDb2RlQmxvY2spCiAgICAgICAgICAgICAvLyBtdXN0IGtlZXAgaXQgYWxpdmUuCiAg
ICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBD
dXN0b21BY2Nlc3NvckdldHRlcikgewpAQCAtMTczOSwxNSArMTc1NSwyMSBAQCB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgfQogCiAgICAgY2FzZSBSZXBsYWNl
OiB7CisgICAgICAgIEdQUlJlZyBiYXNlID0gYmFzZUdQUjsKKyAgICAgICAgaWYgKHZpYVByb3h5
KCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgYWludCBwcmV0dHksIGJ1dCB0aGUgcGF0aCB0aGF0
IHN0cnVjdHVyZSBjaGVja3MgbG9hZHMgdGhlIHJlYWwgYmFzZSBpbnRvIHNjcmF0Y2hHUFIuCisg
ICAgICAgICAgICBiYXNlID0gc2NyYXRjaEdQUjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAog
ICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAg
ICAgIGJhc2UsCiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArCiAgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29m
ZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCkBAIC0x
NzU4LDYgKzE3ODAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgfQogCiAgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJv
eHkoKSk7CiAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSBy
ZXR1cm5lZCBudWxsIGlmIHRoaXMgd2Fzbid0IHRydWUuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNw
cAkocmV2aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTEg
QEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlcgogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0g
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgc3RkOjp1
bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbiwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIsCi0gICAgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlKQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBl
QWNjZXNzQ2hhaW4sIGJvb2wgdmlhUHJveHksIAorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4gY3VzdG9tU2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCiB7CiAgICAgQVNT
RVJUKHR5cGUgPT0gU2V0dGVyIHx8IHR5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgdHlwZSA9
PSBDdXN0b21BY2Nlc3NvclNldHRlcik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIs
IHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGZhbHNl
LCBudWxscHRyLCBjdXN0b21TbG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0KG5l
dyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIG51bGxwdHIsIGN1c3RvbVNs
b3RCYXNlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwogICAgIHJlc3VsdC0+bV9j
dXN0b21BY2Nlc3NvciA9IGN1c3RvbVNldHRlciA/IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4oY3VzdG9tU2V0dGVyKSA6IG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgT3B0
aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4sIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4pOwogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBj
cmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmLCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+LAor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIHN0ZDo6dW5pcXVlX3B0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4sIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKICAgICAgICAg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBjdXN0b21TZXR0ZXIgPSBudWxscHRyLCBKU09i
amVjdCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyKTsKIAogICAgIHZvaWQgZHVtcEltcGwoUHJp
bnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCBmaW5hbDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI2NTUzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94
eWFibGVBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQcm94
eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlCiAKIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2lu
dFNldCogYWRkaXRpb25hbFNldCwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBwcm90b3R5cGVBY2Nlc3NDaGFpbikKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBMb2FkIHx8IHR5
cGUgPT0gTWlzcyB8fCB0eXBlID09IEdldEdldHRlcik7CisgICAgQVNTRVJUKHR5cGUgPT0gTG9h
ZCB8fCB0eXBlID09IE1pc3MgfHwgdHlwZSA9PSBHZXRHZXR0ZXIgfHwgdHlwZSA9PSBSZXBsYWNl
KTsKICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBQcm94eWFibGVB
Y2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgaWRlbnRpZmllciwgb2Zmc2V0LCBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxTZXQsIFdURk1vdmUocHJvdG90eXBl
QWNjZXNzQ2hhaW4pKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg5LDcgKzU4OSw3
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwog
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBudWxscHRyOworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gQ29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwg
YmFzZVZhbHVlKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgaWRlbnQs
IHZhbHVlLCBzbG90KTsKIAogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkpOwpAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBmYWxzZSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKIAotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pIDogbnVsbHB0cjsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNs
b3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VWYWx1ZSk7CiAgICAg
YmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAK
ICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNp
b24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTkxLDkgKzU5MSwyOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKICAgICAgICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKIAorICAgICAgICBib29sIGlzUHJv
eHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUpIHsKKyAgICAgICAgICAgIGJhc2VDZWxsID0ganNDYXN0PEpTUHJveHkqPihi
YXNlQ2VsbCktPnRhcmdldCgpOworICAgICAgICAgICAgYmFzZVZhbHVlID0gYmFzZUNlbGw7Cisg
ICAgICAgICAgICBpc1Byb3h5ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1By
b3h5KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFu
ZCBKUy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAgICAgICAgICAgLy8g
Y2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJl
IHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24uCisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0Nh
Y2hlYWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQ
cm9wZXJ0eSkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKKyAg
ICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7CisgICAgICAgICAgICBp
ZiAoIWlzQ2FjaGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3
Q2FzZTsKKwogICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXND
YWNoZWFibGVQdXQoKSkgewogICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3Bl
cnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNz
ZXJ0IGhlbHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxl
IGNhY2hpbmcKQEAgLTYwOCw3ICs2MjcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBJ
bmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xv
dC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgICAgICYm
ICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAg
ICAgICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CkBAIC02MTksOCArNjM5LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
UHV0QnlJRAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9s
ZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSwgaXNQcm94eSk7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVCghaXNQcm94eSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgp
ID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpOwogCiAgICAgICAgICAgICAgICAgaWYg
KCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpCkBAIC03MDYsOCArNzI3LDkgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogCiAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0
b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBvbGRTdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9mZnNldCwg
Y29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgc2xvdC5jdXN0b21T
ZXR0ZXIoKSwgc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZN
b3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgaXNQcm94eSwgc2xvdC5jdXN0b21TZXR0ZXIoKSwg
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBudWxscHRyKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSk7CiAgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CiAgICAgICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKQEAgLTc0Miw3ICs3NjQsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNy
ZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0
dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
b2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1By
b3h5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjY1NTM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNyw2ICsxMzcsMTYgQEAgaW5saW5lIGJvb2wgY2FuQWNjZXNzQXJndW1l
bnRJbmRleFF1aWNrbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQUxXQVlTX0lOTElORSBTdHJ1
Y3R1cmUqIG9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBpZiAodmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkK
KyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU1Byb3h5Kj4odmFsdWUpLT50YXJnZXQoKS0+c3RydWN0
dXJlKHZtKTsKKyAgICByZXR1cm4gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Cit9CisK
Kwogc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXREaXJlY3RXaXRoUmVpZnkoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZU9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmUqKiByZXN1bHQgPSBudWxscHRyKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0NSw3ICsxNTUsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSB2b2lkIHB1dERpcmVjdFdpdGhSCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgfQogICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBi
YXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAqcmVzdWx0ID0gb3JpZ2luYWxTdHJ1
Y3R1cmVCZWZvcmVQdXQodm0sIGJhc2VPYmplY3QpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAg
ICBiYXNlT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMjY1NTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDEsNyArODQxLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0
SW5saW5lU2xvdyhKU0dsb2JhbE9iagogICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0
RGlyZWN0KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkgewog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZGVjaWRlIHRv
IGNhY2hlIHRoaXMgcHJvcGVydHkgYmVmb3JlIHdlIHBvdGVudGlhbGx5IGV4ZWN1dGUgYXJpYml0
cmFyeSBKUy4KLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMtPnN0cnVjdHVyZSh2bSktPmlzRGlj
dGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDYWNo
ZWFibGVTZXR0ZXIob2JqLCBvZmZzZXQpOwogCiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQg
PSBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xvdC50aGlzVmFsdWUoKSwgZ3MsIHZhbHVlLCBz
bG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3Bw
eSgpKTsKQEAgLTg0OSw2ICs4NDksOSBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpT
R2xvYmFsT2JqCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChncy5pc0N1c3RvbUdldHRlclNldHRlcigpKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBvbmx5IGJlIGNhY2hpbmcgdGhlc2UgaWYgd2UncmUg
bm90IGFuIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnk6CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTM0NworCiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBw
cm9wZXJ0eSBiZWZvcmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgogICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yKQogICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbUFjY2Vzc29yKG9iaiwg
anNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lv
biAyNjU1MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxl
V2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoQm9vbCwgdXNlTElDTUZ1enppbmcsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBzZWVkRm9yTElDTUZ1enplciwgNDI0
MjQyLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Q
cm9iYWJpbGl0eSwgMC41LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGV4cG9zZUN1
c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwK
</data>
<flag name="review"
          id="421825"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406489</attachid>
            <date>2020-08-12 19:14:12 -0700</date>
            <delta_ts>2020-08-12 21:50:17 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>29780</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU1OTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoZSBSZXBsYWNlIGFuZCBTZXR0ZXJzIG9uIFB1cmVG
b3J3YXJkaW5nUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvcHJvcGVydHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpz
LXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChmb28pOgorCiAy
MDIwLTA4LTA3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZ0V4cCBzdGlja3kgbm90IG1hdGNoaW5nIGFsdGVybmF0ZXMgY29ycmVjdGx5LCBpZ25vcmlu
ZyBsYXN0SW5kZXggcmVxdWlyZW1lbnQKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3By
b3BlcnR5LXJlcGxhY2UtYW5kLXNldHRlci1vbi1qcy1wcm94eS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wcm9wZXJ0eS1yZXBsYWNlLWFuZC1zZXR0ZXItb24tanMt
cHJveHkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcHJvcGVy
dHktcmVwbGFjZS1hbmQtc2V0dGVyLW9uLWpzLXByb3h5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzIgQEAKKy8vQCByZXF1aXJlT3B0aW9ucygiLS1leHBvc2VDdXN0b21TZXR0ZXJzT25H
bG9iYWxPYmplY3RGb3JUZXN0aW5nPXRydWUiKQorCitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitsZXQgZ2xvYmFsID0gdGhp
czsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICJZIiwgeworICAgIHNldDogZnVuY3Rp
b24odikgeworICAgICAgICBhc3NlcnQodGhpcyA9PT0gZ2xvYmFsKTsKKyAgICAgICAgYXNzZXJ0
KHYgPT09IGkgKyAxKTsKKyAgICAgICAgdGhpcy5fWSA9IHY7CisgICAgfQorfSk7CisKK2Z1bmN0
aW9uIGZvbyh4LCB5LCB6LCBhKSB7CisgICAgdGhpcy5YID0geDsKKyAgICB0aGlzLlkgPSB5Owor
ICAgIHRoaXMudGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyID0gejsKKyAgICB0aGlzLnRlc3RDdXN0
b21WYWx1ZVNldHRlciA9IGE7Cit9Citub0lubGluZShmb28pOworCitsZXQgaTsKK2ZvciAoaSA9
IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICBmb28oaSwgaSArIDEsIGkgKyAyLCBpICsgMyk7
CisgICAgYXNzZXJ0KGdsb2JhbC5YID09PSBpKTsKKyAgICBhc3NlcnQoZ2xvYmFsLl9ZID09PSBp
ICsgMSk7CisgICAgYXNzZXJ0KGdsb2JhbC5fdGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyID09PSBp
ICsgMik7CisgICAgYXNzZXJ0KGdsb2JhbC5fdGVzdEN1c3RvbVZhbHVlU2V0dGVyID09PSBpICsg
Myk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw0MSBAQAorMjAyMC0wOC0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbmxpbmUgY2FjaGUgUmVwbGFjZSBhbmQgU2V0dGVycyBvbiBQdXJlRm9yd2FyZGlu
Z1Byb3h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTUyNTAKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFdl
IGRpZG4ndCB1c2VkIHRvIGNhY2hlIGFueSBQdXRzIG9uIFB1cmVGb3J3YXJkaW5nUHJveHkuIFRo
aXMgcGF0Y2gKKyAgICAgICAgaW1wbGVtZW50cyBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVy
cyBvbiBQdXJlRm9yd2FyZGluZ1Byb3h5LiBXZSBkb24ndCBzdXBwb3J0CisgICAgICAgIFRyYW5z
aXRpb24gcHV0cyBiZWNhdXNlIGluIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRpZmZlcmVu
dCBnbG9iYWwgb2JqZWN0cworICAgICAgICB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVj
dHVyZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBhbGlnbnMgaG93IG91ciBy
dW50aW1lIGFuZCB0aGUgSUNzIGludm9rZSBDdXN0b21zIHdoZW4gdGhlCisgICAgICAgIHBhc3Nl
ZCBpbiB8dGhpc3wgdmFsdWUgaXMgYSBKU1Byb3h5LiBGb3IgY3VzdG9tIGFjY2Vzc29ycywgb3Vy
IHJ1bnRpbWUgcGFzc2VzCisgICAgICAgIGluIHRoZSBKU1Byb3h5LCB3aGVyZSBvdXIgSUNzIHVz
ZWQgdG8gcGFzcyBpbiB0aGUgdGFyZ2V0IG9mIHRoZSBKU1Byb3h5LCBmb3IKKyAgICAgICAgdGhl
IHJlY2VpdmVyIHZhbHVlLiBGb3IgY3VzdG9tIHZhbHVlcywgdGhlIElDIGJlaGF2aW9yIGFuZCB0
aGUgcnVudGltZSB3ZXJlCisgICAgICAgIGFscmVhZHkgYWxpZ25lZCBpbiBwYXNzaW5nIGluIHRo
ZSBwcm9wZXJ0eSBvd25lciwgd2hpY2ggaXMgdGhlIEpTUHJveHkncworICAgICAgICB0YXJnZXQu
IFRoaXMgcGF0Y2ggYWxpZ25zIG91ciBJQyBiZWhhdmlvciB0byBtYXRjaCBvdXIgcnVudGltZSBi
ZWhhdmlvci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW5hbWVzIHNvbWUg
b2YgdGhlIHJlZ2lzdGVycyBpbiB0aGUgSUMgY29kZSB0byBjbGVhcgorICAgICAgICB1cCB3aGF0
IHRoZXkncmUgdXNlZCBmb3IuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgMi41eCBzcGVl
ZHVwIG9uIHRoZSBtaWNyb2JlbmNobWFyayBJJ3ZlIGFkZGVkLCBhbmQgYSAxNS0yMCUgc3BlZWR1
cAorICAgICAgICBvbiBKZXRTdHJlYW0yJ3MgM2QtY3ViZS1TUC4KKworICAgICAgICAqIGJ5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdp
dGhHdWFyZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAg
ICAgICogYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6
OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZS5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJ
RCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6
Q29tbW9uU2xvd1BhdGhzOjpvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCk6CisgICAgICAgIChK
U0M6OkNvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KToKKwogMjAyMC0wOC0xMSAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZTo6bmV3Q29kZUJsb2NrRm9yKCkgbmVnbGVjdGVkIHRvIHNldCB0aGUgZXhjZXB0aW9uIHBvaW50
ZXIgcmVzdWx0IGluIG9uZSBjYXNlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9u
IDI2NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MzgsNiArNjM4LDUxIEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
c2V0VW5oYW5kbGVkUmVqZWN0aW9uQ2FsbGJhY2siLCBmdW5jdGlvblNldFVuaGFuZGxlZFJlamVj
dGlvbkNhbGxiYWNrLCAxKTsKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImFzRG91YmxlTnVt
YmVyIiwgZnVuY3Rpb25Bc0RvdWJsZU51bWJlciwgMSk7CisKKyAgICAgICAgaWYgKE9wdGlvbnM6
OmV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVjdEZvclRlc3RpbmcoKSkgeworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEN1c3RvbUdldHRlclNldHRlciogY3VzdG9tID0gQ3Vz
dG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIG51bGxwdHIsIHRlc3RDdXN0b21BY2Nlc3NvclNl
dHRlcik7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInRlc3RDdXN0b21BY2Nlc3NvclNldHRlciIpOworICAgICAgICAg
ICAgICAgIHRoaXMtPnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBpZGVudGlmaWVyLCBjdXN0
b20sIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEN1c3RvbUdldHRlclNldHRlciog
Y3VzdG9tID0gQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIG51bGxwdHIsIHRlc3RDdXN0
b21WYWx1ZVNldHRlcik7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RDdXN0b21WYWx1ZVNldHRlciIpOworICAg
ICAgICAgICAgICAgIHRoaXMtPnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBpZGVudGlmaWVy
LCBjdXN0b20sIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbVZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIHRlc3RDdXN0b21TZXR0
ZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBHbG9iYWxPYmplY3Qq
IHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKTsKKworICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qo
dm0sIGlkZW50aWZpZXIsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBEb250RW51bSk7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdGVzdEN1
c3RvbUFjY2Vzc29yU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAg
ICB7CisgICAgICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLmlzQ2VsbCgpKTsKKyAg
ICAgICAgSlNDZWxsKiB0aGlzQ2VsbCA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLmFzQ2Vs
bCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3
YXJkaW5nUHJveHlUeXBlKTsKKyAgICAgICAgR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxHbG9iYWxPYmplY3QqPih2bSwganNDYXN0PEpTUHJveHkqPih0aGlzQ2VsbCkt
PnRhcmdldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CisgICAgICAg
IHJldHVybiB0ZXN0Q3VzdG9tU2V0dGVySW1wbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LCBlbmNvZGVkVmFsdWUsICJfdGVzdEN1c3RvbUFjY2Vzc29yU2V0dGVyIik7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgdGVzdEN1c3RvbVZhbHVlU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpLmlzQ2VsbCgpKTsKKyAgICAgICAgSlNDZWxsKiB0aGlzQ2VsbCA9IEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpLmFzQ2VsbCgpOworICAgICAgICBHbG9iYWxPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEdsb2JhbE9iamVjdCo+KHZtLCB0aGlzQ2VsbCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gdGVzdEN1c3RvbVNl
dHRlckltcGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgZW5jb2RlZFZhbHVlLCAi
X3Rlc3RDdXN0b21WYWx1ZVNldHRlciIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZEZ1bmN0
aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI2NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzg2LDYgKzc4Niw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3Vh
cmQoCiAKICAgICBhdXRvIGVtaXREZWZhdWx0R3VhcmQgPSBbJl0gKCkgewogICAgICAgICBpZiAo
bV9wb2x5UHJvdG9BY2Nlc3NDaGFpbikgeworICAgICAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSID0gc3RhdGUuc2NyYXRjaEdQ
UjsKICAgICAgICAgICAgIGppdC5tb3ZlKHN0YXRlLmJhc2VHUFIsIGJhc2VGb3JBY2Nlc3NHUFIp
OwogICAgICAgICAgICAgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbi0+Zm9yRWFjaCh2bSwgc3RydWN0
dXJlKCksIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGJvb2wgYXRFbmQpIHsKQEAgLTkwNCwx
MSArOTA1LDEzIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgfQog
CiAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJv
eHkoKSk7CiAgICAgICAgIHRoaXMtPmFzPE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U+KCkuZW1p
dChzdGF0ZSwgZmFsbFRocm91Z2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgY2Fz
ZSBJbmRleGVkU2NvcGVkQXJndW1lbnRzTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3Vs
dCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKIApAQCAtOTc0LDYgKzk3Nyw3
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgfQogCiAgICAgY2Fz
ZSBJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3Vs
dCBjb3VsZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BS
UmVnIHByb3BlcnR5R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKICAgICAgICAgaml0LmxvYWQ4
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CkBAIC05OTcsNiArMTAwMSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ6
CiAgICAgY2FzZSBJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOgogICAgIGNhc2UgSW5kZXhl
ZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwog
ICAgICAgICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3Vs
ZCBhbGlhcyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KIAogICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gdG9UeXBlZEFycmF5VHlwZShtX3R5cGUpOwpAQCAtMTA4Nyw2ICsxMDky
LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICB9CiAKICAgICBj
YXNlIEluZGV4ZWRTdHJpbmdMb2FkOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CiAg
ICAgICAgIC8vIFRoaXMgY29kZSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGNvdWxk
IGFsaWFzIHdpdGggdGhlIGJhc2Ugb3IgdGhlIHByb3BlcnR5LgogICAgICAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBzdGF0ZS51LnByb3BlcnR5R1BSOwogCkBAIC0xMTQyLDYgKzExNDgsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIGNhc2UgSW5kZXhlZERvdWJs
ZUxvYWQ6CiAgICAgY2FzZSBJbmRleGVkQ29udGlndW91c0xvYWQ6CiAgICAgY2FzZSBJbmRleGVk
QXJyYXlTdG9yYWdlTG9hZDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwogICAgICAg
ICAvLyBUaGlzIGNvZGUgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdCBjb3VsZCBhbGlh
cyB3aXRoIHRoZSBiYXNlIG9yIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gc3RhdGUudS5wcm9wZXJ0eUdQUjsKIApAQCAtMTI1OCw2ICsxMjY1LDcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgSW5zdGFuY2VPZkdlbmVyaWM6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgp
KTsKICAgICAgICAgR1BSUmVnIHByb3RvdHlwZUdQUiA9IHN0YXRlLnUucHJvdG90eXBlR1BSOwog
ICAgICAgICAvLyBMZWdlbmQ6IHZhbHVlID0gYGJhc2UgaW5zdGFuY2VvZiBwcm90b3R5cGVHUFJg
LgogICAgICAgICAKQEAgLTE0MjYsNDAgKzE0MzQsNDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQoKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBHUFJSZWcgYmFzZUZvckdldEdQUjsKLSAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBl
ICE9IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsgLy8gQmVjYXVzZSBzZXR0ZXJzIG5lZWQgdG8gbm90
IHRyYXNoIHZhbHVlUmVnc1BheWxvYWRHUFIuCi0gICAgICAgICAgICBpZiAobV90eXBlID09IEdl
dHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIg
PSBzY3JhdGNoR1BSOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VGb3JH
ZXRHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOworICAgICAgICBib29sIGRvZXNQcm9wZXJ0eVN0
b3JhZ2VMb2FkcyA9IG1fdHlwZSA9PSBMb2FkIAorICAgICAgICAgICAgfHwgbV90eXBlID09IEdl
dEdldHRlcgorICAgICAgICAgICAgfHwgbV90eXBlID09IEdldHRlcgorICAgICAgICAgICAgfHwg
bV90eXBlID09IFNldHRlcjsKIAotICAgICAgICAgICAgQVNTRVJUKChtX3R5cGUgIT0gR2V0dGVy
ICYmIG1fdHlwZSAhPSBTZXR0ZXIpIHx8IGJhc2VGb3JHZXRHUFIgIT0gYmFzZUdQUik7Ci0gICAg
ICAgICAgICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCBiYXNlRm9yR2V0R1BSICE9IHZhbHVl
UmVnc1BheWxvYWRHUFIpOworICAgICAgICBib29sIHRha2VzUHJvcGVydHlPd25lckFzQ0Z1bmN0
aW9uQXJndW1lbnQgPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1
c3RvbVZhbHVlU2V0dGVyOwogCi0gICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworICAgICAgICBHUFJSZWcgcmVjZWl2
ZXJHUFIgPSBiYXNlR1BSOworICAgICAgICBHUFJSZWcgcHJvcGVydHlPd25lckdQUjsKIAotICAg
ICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKICAgICAgICAgaWYgKG1fcG9seVByb3RvQWNj
ZXNzQ2hhaW4pIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXNuJ3QgcHJldHR5LCBidXQgd2Uga25v
dyB3ZSBnb3QgaGVyZSB2aWEgZ2VuZXJhdGVXaXRoR3VhcmQsCiAgICAgICAgICAgICAvLyBhbmQg
aXQgbGVmdCB0aGUgYmFzZUZvckFjY2VzcyBpbnNpZGUgc2NyYXRjaEdQUi4gV2UgY291bGQgcmUt
ZGVyaXZlIHRoZSBiYXNlLAogICAgICAgICAgICAgLy8gYnV0IGl0J2QgcmVxdWlyZSBlbWl0dGlu
ZyB0aGUgc2FtZSBjb2RlIHRvIGxvYWQgdGhlIGJhc2UgdHdpY2UuCi0gICAgICAgICAgICBiYXNl
Rm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChoYXNBbHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZSgKLSAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJh
c2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBz
Y3JhdGNoR1BSOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYmFzZUZvckFj
Y2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHByb3BlcnR5
T3duZXJHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICB9IGVsc2UgaWYgKGhhc0FsdGVybmF0ZUJh
c2UoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgcHJvcGVydHlPd25lckdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZSBpZiAo
dmlhUHJveHkoKSAmJiBkb2VzUHJvcGVydHlTdG9yYWdlTG9hZHMpIHsKKyAgICAgICAgICAgIC8v
IFdlIG9ubHkgbmVlZCB0aGlzIHdoZW4gbG9hZGluZyBhbiBpbmxpbmUgb3Igb3V0IG9mIGxpbmUg
cHJvcGVydHkuIEZvciBjdXN0b21zIGFjY2Vzc29ycywKKyAgICAgICAgICAgIC8vIHdlIGNhbiBp
bnZva2Ugd2l0aCBhIHJlY2VpdmVyIHZhbHVlIHRoYXQgaXMgYSBKU1Byb3h5LiBGb3IgY3VzdG9t
IHZhbHVlcywgd2UgdW5ib3ggdG8gdGhlCisgICAgICAgICAgICAvLyBKU1Byb3h5J3MgdGFyZ2V0
LiBGb3IgZ2V0dGVycy9zZXR0ZXJzLCB3ZSdsbCBhbHNvIGludm9rZSB0aGVtIHdpdGggdGhlIEpT
UHJveHkgYXMgfHRoaXN8LAorICAgICAgICAgICAgLy8gYnV0IHdlIG5lZWQgdG8gbG9hZCB0aGUg
YWN0dWFsIEdldHRlclNldHRlciBjZWxsIGZyb20gdGhlIEpTUHJveHkncyB0YXJnZXQuCisKKyAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpCisgICAg
ICAgICAgICAgICAgcHJvcGVydHlPd25lckdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcHJvcGVydHlPd25lckdQUiA9IHZhbHVlUmVnc1BheWxvYWRH
UFI7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHByb3BlcnR5
T3duZXJHUFIpOworICAgICAgICB9IGVsc2UgaWYgKHZpYVByb3h5KCkgJiYgdGFrZXNQcm9wZXJ0
eU93bmVyQXNDRnVuY3Rpb25Bcmd1bWVudCkgeworICAgICAgICAgICAgcHJvcGVydHlPd25lckdQ
UiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBwcm9wZXJ0eU93bmVyR1BSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0
eU93bmVyR1BSID0gcmVjZWl2ZXJHUFI7CiAKICAgICAgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BS
ID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0b21WYWx1ZUdldHRl
ciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbVZh
bHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcikgeworICAgICAgICBp
ZiAoZG9lc1Byb3BlcnR5U3RvcmFnZUxvYWRzKSB7CiAgICAgICAgICAgICBpZiAobV90eXBlID09
IExvYWQgfHwgbV90eXBlID09IEdldEdldHRlcikKICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1
ZUdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNDcwLDEw
ICsxNDg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAog
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CiAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQobV9vZmZzZXQpKQotICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNj
ZXNzR1BSOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBwcm9wZXJ0eU93bmVyR1BSOwog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MocHJvcGVydHlPd25lckdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwogICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKICAgICAgICAgICAgIH0KQEAgLTE1MDksNyAr
MTUyNCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZURPTUpJVCgpICYmIGFjY2Vz
cy5kb21BdHRyaWJ1dGUoKS0+ZG9tSklUKSB7Ci0gICAgICAgICAgICAgICAgYWNjZXNzLmVtaXRE
T01KSVRHZXR0ZXIoc3RhdGUsIGFjY2Vzcy5kb21BdHRyaWJ1dGUoKS0+ZG9tSklULCBiYXNlRm9y
R2V0R1BSKTsKKyAgICAgICAgICAgICAgICBhY2Nlc3MuZW1pdERPTUpJVEdldHRlcihzdGF0ZSwg
YWNjZXNzLmRvbUF0dHJpYnV0ZSgpLT5kb21KSVQsIHJlY2VpdmVyR1BSKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE2ODQsNiArMTY5OSw3
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0
b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBl
ID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7
CisgICAgICAgICAgICBBU1NFUlQoIWRvZXNQcm9wZXJ0eVN0b3JhZ2VMb2Fkcyk7IC8vIE9yIHdl
IG5lZWQgYW4gZXh0cmEgcmVnaXN0ZXIuIFdlIHJlbHkgb24gcHJvcGVydHlPd25lckdQUiBiZWlu
ZyBjb3JyZWN0IGhlcmUuCiAKICAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSByb29tIGZvciB0
aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sgc3BpbGxhZ2UgaXNuJ3Qgb3ZlcndyaXR0ZW4u
IEl0J3MKICAgICAgICAgICAgIC8vIGhhcmQgdG8gdHJhY2sgaWYgc29tZW9uZSBkaWQgc3BpbGxh
Z2Ugb3Igbm90LCBzbyB3ZSBqdXN0IGFzc3VtZSB0aGF0IHdlIGFsd2F5cyBuZWVkCkBAIC0xNjkx
LDE0ICsxNzA3LDE0IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUK
ICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIAogICAgICAgICAg
ICAgLy8gQ2hlY2sgaWYgaXQgaXMgYSBzdXBlciBhY2Nlc3MKLSAgICAgICAgICAgIEdQUlJlZyBi
YXNlRm9yQ3VzdG9tR2V0R1BSID0gYmFzZUdQUiAhPSB0aGlzR1BSID8gdGhpc0dQUiA6IGJhc2VG
b3JHZXRHUFI7CisgICAgICAgICAgICBHUFJSZWcgcmVjZWl2ZXJGb3JDdXN0b21HZXRHUFIgPSBi
YXNlR1BSICE9IHRoaXNHUFIgPyB0aGlzR1BSIDogcmVjZWl2ZXJHUFI7CiAKICAgICAgICAgICAg
IC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
Ly8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSAgICAgICAgICAgIC8v
IEN1c3RvbSB2YWx1ZXMgYXJlIHBhc3NlZCB0aGUgc2xvdEJhc2UgKHRoZSBwcm9wZXJ0eSBob2xk
ZXIpLCBjdXN0b20gYWNjZXNzb3JzIGFyZSBwYXNzZWQgdGhlIHRoaXNWYXVsZSAocmVjaWV2ZXIp
LgorICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAo
dGhlIHByb3BlcnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhp
c1ZhdWxlIChyZWNlaXZlcikuCiAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlm
ZmVyZW5jZXMgaW4gY3VzdG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKLSAg
ICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tID0gbV90eXBlID09IEN1c3RvbVZhbHVlR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciA/IGJhc2VGb3JBY2Nlc3NHUFIgOiBi
YXNlRm9yQ3VzdG9tR2V0R1BSOyAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tID0g
dGFrZXNQcm9wZXJ0eU93bmVyQXNDRnVuY3Rpb25Bcmd1bWVudCA/IHByb3BlcnR5T3duZXJHUFIg
OiByZWNlaXZlckZvckN1c3RvbUdldEdQUjsgCiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgbmVl
ZCB0byBrZWVwIGdsb2JhbE9iamVjdCBhbGl2ZSBzaW5jZSB0aGUgb3duZXIgQ29kZUJsb2NrIChl
dmVuIGlmIEpTR2xvYmFsT2JqZWN0KiBpcyBvbmUgb2YgQ29kZUJsb2NrIHRoYXQgaXMgaW5saW5l
ZCBhbmQgaGVsZCBieSBERkcgQ29kZUJsb2NrKQogICAgICAgICAgICAgLy8gbXVzdCBrZWVwIGl0
IGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBt
X3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpIHsKQEAgLTE3MzksMTUgKzE3NTUsMjEgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNh
c2UgUmVwbGFjZTogeworICAgICAgICBHUFJSZWcgYmFzZSA9IGJhc2VHUFI7CisgICAgICAgIGlm
ICh2aWFQcm94eSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGFpbnQgcHJldHR5LCBidXQgdGhl
IHBhdGggdGhhdCBzdHJ1Y3R1cmUgY2hlY2tzIGxvYWRzIHRoZSByZWFsIGJhc2UgaW50byBzY3Jh
dGNoR1BSLgorICAgICAgICAgICAgYmFzZSA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0KKwogICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CiAgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSgKICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAg
ICAgICAgICAgICAgICBiYXNlLAogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0
b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAg
ICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKApAQCAtMTc1OCw2ICsxNzgwLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZQogICAgIH0KIAogICAgIGNhc2UgVHJhbnNpdGlvbjogeworICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOwogICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hv
dWxkIGhhdmUgcmV0dXJuZWQgbnVsbCBpZiB0aGlzIHdhc24ndCB0cnVlLgogICAgICAgICBSRUxF
QVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI2NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgs
MTEgKzY4LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXIKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNy
ZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNz
Q2hhaW4sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyLAotICAgIEpT
T2JqZWN0KiBjdXN0b21TbG90QmFzZSkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IHByb3RvdHlwZUFjY2Vzc0NoYWluLCBib29sIHZpYVByb3h5LCAKKyAgICBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IGN1c3RvbVNldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQog
ewogICAgIEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09IEN1c3RvbVZhbHVlU2V0dGVy
IHx8IHR5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uo
dm0sIG93bmVyLCB0eXBlLCBpZGVudGlmaWVyLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBmYWxzZSwgbnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+
IHJlc3VsdChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50
aWZpZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBudWxscHRy
LCBjdXN0b21TbG90QmFzZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpKTsKICAgICBy
ZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IgPSBjdXN0b21TZXR0ZXIgPyBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KGN1c3RvbVNldHRlcikgOiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHJldmlzaW9uIDI2NTU5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+LCBzdGQ6OnVuaXF1ZV9wdHI8
UG9seVByb3RvQWNjZXNzQ2hhaW4+KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJl
KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAgIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jiwgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vz
c0NoYWluPiwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBzdGQ6
OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+LCBib29sIHZpYVByb3h5ID0gZmFsc2Us
CiAgICAgICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY3VzdG9tU2V0dGVyID0gbnVs
bHB0ciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGR1
bXBJbXBsKFByaW50U3RyZWFtJiwgQ29tbWFQcmludGVyJikgY29uc3QgZmluYWw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vz
c0Nhc2UuY3BwCShyZXZpc2lvbiAyNjU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgUHJveHlhYmxlQWNjZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2FzZQogCiBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHks
IFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW4pCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0g
TG9hZCB8fCB0eXBlID09IE1pc3MgfHwgdHlwZSA9PSBHZXRHZXR0ZXIpOworICAgIEFTU0VSVCh0
eXBlID09IExvYWQgfHwgdHlwZSA9PSBNaXNzIHx8IHR5cGUgPT0gR2V0R2V0dGVyIHx8IHR5cGUg
PT0gUmVwbGFjZSk7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcg
UHJveHlhYmxlQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIGlkZW50aWZpZXIsIG9mZnNldCwg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0LCBXVEZNb3Zl
KHByb3RvdHlwZUFjY2Vzc0NoYWluKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2NTU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
OSw3ICs1ODksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgY29kZUJsb2NrLT5wdXRCeUlkQ29u
dGV4dCgpKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgp
ID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pIDogbnVsbHB0cjsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IENvbW1vblNsb3dQYXRoczo6b3JpZ2luYWxTdHJ1Y3R1cmVCZWZv
cmVQdXQodm0sIGJhc2VWYWx1ZSk7CiAgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmpl
Y3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAKICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgZmFsc2UsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKHZtKSA6IG51bGxwdHI7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBDb21tb25TbG93UGF0aHM6Om9yaWdpbmFsU3RydWN0dXJlQmVmb3JlUHV0KHZtLCBiYXNlVmFs
dWUpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFsdWUs
IHNsb3QpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHJldmlzaW9uIDI2NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw5ICs1OTEsMjYgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CiAg
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAKKyAgICAgICAg
Ym9vbCBpc1Byb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1
cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxK
U1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJh
c2VDZWxsOworICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdl
IGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpT
UHJveHkuIFdlIGRvbid0CisgICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNl
IGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAg
ICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJv
b2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQorICAgICAgICAgICAgICAg
IHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKTsKKyAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCiAgICAgICAgIGlmIChzbG90
LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAg
ICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5
KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBhc3NlcnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3
ZSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGRpc2FibGUgY2FjaGluZwpAQCAtNjA4LDcgKzYyNSw4
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6
OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAg
ICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShz
dHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKQEAgLTYxOSw4ICs2MzcsOSBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3Bl
cnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
b2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQ
cm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3Qo
KSkKQEAgLTcwNiw4ICs3MjUsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlECiAKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3Vz
dG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNz
Q2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAg
ICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pLCBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBi
YXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICBp
bnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
LCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUg
PyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKICAgICAgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CiAgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbjsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hl
ZE9mZnNldCgpOwpAQCAtNzQyLDcgKzc2Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFp
bikpOworICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0
ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RG
TW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCShyZXZpc2lvbiAyNjU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywx
NiBAQCBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tsCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogb3JpZ2luYWxTdHJ1Y3R1cmVC
ZWZvcmVQdXQoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNDZWxs
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh2YWx1ZS5hc0NlbGwoKS0+dHlw
ZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKQorICAgICAgICByZXR1cm4ganNDYXN0PEpT
UHJveHkqPih2YWx1ZSktPnRhcmdldCgpLT5zdHJ1Y3R1cmUodm0pOworICAgIHJldHVybiB2YWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKK30KKworCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIHB1dERpcmVjdFdpdGhSZWlmeShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZSoqIHJlc3VsdCA9IG51
bGxwdHIpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
MTQ1LDcgKzE1NSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0RGlyZWN0V2l0aFIK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSk7
CisgICAgICAgICpyZXN1bHQgPSBvcmlnaW5hbFN0cnVjdHVyZUJlZm9yZVB1dCh2bSwgYmFzZU9i
amVjdCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdCh2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNjU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
MSw3ICs4NDEsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqCiAg
ICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWNpZGUgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eSBiZWZv
cmUgd2UgcG90ZW50aWFsbHkgZXhlY3V0ZSBhcmliaXRyYXJ5IEpTLgotICAgICAgICAgICAgICAg
IGlmICghdGhpcy0+c3RydWN0dXJlKHZtKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLT5zdHJ1Y3R1cmUodm0pLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQog
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7
CiAKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0
LCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01B
TW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCkpOwpAQCAtODQ5LDYgKzg0OSw5IEBA
IGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coSlNHbG9iYWxPYmoKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGdzLmlzQ3Vz
dG9tR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG9ubHkgYmUgY2FjaGluZyB0aGVzZSBpZiB3ZSdyZSBub3QgYW4gdW5jYWNoZWFibGUgZGljdGlv
bmFyeToKKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE1MzQ3CisKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IHdlIGRlY2lkZSB0byBjYWNoZSB0aGlzIHByb3BlcnR5IGJlZm9yZSB3ZSBwb3RlbnRp
YWxseSBleGVjdXRlIGFyaWJpdHJhcnkgSlMuCiAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tQWNjZXNzb3Iob2JqLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVy
Kj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2NTU5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2
ICs1MTgsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAg
dihCb29sLCB1c2VMSUNNRnV6emluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
VW5zaWduZWQsIHNlZWRGb3JMSUNNRnV6emVyLCA0MjQyNDIsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoQm9vbCwgZXhwb3NlQ3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0
Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogCiBlbnVtIE9wdGlvbkVxdWl2
YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>