<?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>152844</bug_id>
          
          <creation_ts>2016-01-07 12:19:57 -0800</creation_ts>
          <short_desc>ES6: Implement lexical scoping for function definitions in strict mode</short_desc>
          <delta_ts>2016-03-09 18:04:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></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>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1153501</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-07 12:19:57 -0800</bug_when>
    <thetext>The current flavor of programs break because of function hoisting:
```

let cond = true
if (cond) {
    let h = 20;
    function bar() { 
        return h; // ReferenceError because bar is hoisted outside of &quot;if&quot; statement scope
    }
    baz();
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171897</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-07 19:08:51 -0800</bug_when>
    <thetext>Lets start with just implementing this in strict mode.
Then I think there is some algorithm defined in the spec
where where we can make the example listed here work
as long as we don&apos;t break backwards compatibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172348</commentid>
    <comment_count>2</comment_count>
      <attachid>273374</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-08 19:40:20 -0800</bug_when>
    <thetext>Created attachment 273374
WIP

I think most of the code is done.
Just need to write new tests and edit old tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172770</commentid>
    <comment_count>3</comment_count>
      <attachid>273480</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-09 14:30:56 -0800</bug_when>
    <thetext>Created attachment 273480
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172774</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-09 14:33:36 -0800</bug_when>
    <thetext>Attachment 273480 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1886:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172782</commentid>
    <comment_count>5</comment_count>
      <attachid>273480</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-09 14:36:46 -0800</bug_when>
    <thetext>Comment on attachment 273480
patch

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

r=me

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1897
&gt; +     * We can transform block scoped function declarations in strict mode like so:

This is more like a must than a can.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2638
&gt; +    HashSet&lt;UniquedStringImpl*&gt; functionsToRemove;

This should be a Vector with inline capacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172791</commentid>
    <comment_count>6</comment_count>
      <attachid>273480</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-09 14:51:40 -0800</bug_when>
    <thetext>Comment on attachment 273480
patch

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

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1897
&gt;&gt; +     * We can transform block scoped function declarations in strict mode like so:
&gt; 
&gt; This is more like a must than a can.

Indeed. Will change.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2638
&gt;&gt; +    HashSet&lt;UniquedStringImpl*&gt; functionsToRemove;
&gt; 
&gt; This should be a Vector with inline capacity.

Yeah of course. I don&apos;t know why I thought there could be duplicates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172935</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-09 18:04:25 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/197915</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273374</attachid>
            <date>2016-03-08 19:40:20 -0800</date>
            <delta_ts>2016-03-09 14:30:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>51078</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTc3ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTY2LDcgKzU2Niw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKIAogICAgIC8vIEFsbCAiYWRkVmFyKCkicyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlICJp
bml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNr
KCkiIGlzIGNhbGxlZAogICAgIC8vIGJlY2F1c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1l
dGVyIEV4cHJlc3Npb25Ob2RlcyB3aWxsIHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgotICAgIG1f
VERaU3RhY2suYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywg
ZmFsc2UpKTsKKyAgICBwdXNoVERaVmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywg
VERaQ2hlY2tPcHRpbWl6YXRpb246OkRvTm90T3B0aW1pemUpOwogICAgIGluaXRpYWxpemVEZWZh
dWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2socGFyYW1ldGVycywg
ZnVuY3Rpb25Ob2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5k
ZXgsIGNhcHR1cmVzKTsKICAgICAKICAgICAvLyBMb2FkaW5nIHx0aGlzfCBpbnNpZGUgYW4gYXJy
b3cgZnVuY3Rpb24gbXVzdCBiZSBkb25lIGFmdGVyIGluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVy
VmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soKQpAQCAtNTgyLDcgKzU4Miw4IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgZW1pdFB1dERl
cml2ZWRDb25zdHJ1Y3RvclRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgpOwogICAgIH0KIAot
ICAgIHB1c2hMZXhpY2FsU2NvcGUobV9zY29wZU5vZGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpP
cHRpbWl6ZSk7CisgICAgYm9vbCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMg
PSBmYWxzZTsgLy8gV2UgZ2VuZXJhdGUgdG9wLWxldmVsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBp
biA6OmdlbmVyYXRlKCkuCisgICAgcHVzaExleGljYWxTY29wZShtX3Njb3BlTm9kZSwgVERaQ2hl
Y2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBOZXN0ZWRTY29wZVR5cGU6OklzTm90TmVzdGVkLCBu
dWxscHRyLCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMpOwogfQogCiBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSogZXZhbE5v
ZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBjb25zdCBWYXJpYWJsZUVudmlyb25t
ZW50KiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKQEAgLTYyMyw3ICs2MjQsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgfQogICAgIGNvZGVCbG9jay0+
YWRvcHRWYXJpYWJsZXModmFyaWFibGVzKTsKIAotICAgIG1fVERaU3RhY2suYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgZmFsc2UpKTsKKyAgICBwdXNoVERa
VmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tPcHRpbWl6YXRpb246
OkRvTm90T3B0aW1pemUpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCgpICYmIGV2YWxOb2RlLT51c2VzVGhpcygpKQogICAgICAgICBlbWl0TG9hZFRoaXNGcm9t
QXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgpOwpAQCAtNjMzLDcgKzYzNCw4IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgZW1pdFB1dFRo
aXNUb0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKICAgICB9CiAgICAgCi0gICAgcHVzaExl
eGljYWxTY29wZShtX3Njb3BlTm9kZSwgVERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplKTsK
KyAgICBib29sIHNob3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucyA9IGZhbHNlOyAv
LyBXZSBnZW5lcmF0ZSB0b3AtbGV2ZWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIDo6Z2VuZXJh
dGUoKS4KKyAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCBURFpDaGVja09wdGltaXph
dGlvbjo6T3B0aW1pemUsIE5lc3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0ZWQsIG51bGxwdHIsIHNo
b3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucyk7CiB9CiAKIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIE1vZHVsZVByb2dyYW1Ob2RlKiBtb2R1bGVQ
cm9ncmFtTm9kZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIGNvbnN0
IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKQpAQCAtNzE1LDgg
KzcxNyw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBl
bHNlCiAgICAgICAgIGNvbnN0YW50U3ltYm9sVGFibGUgPSBhZGRDb25zdGFudFZhbHVlKG1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3ZtKSk7CiAKLSAgICBt
X1REWlN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihsZXhpY2FsVmFyaWFibGVzLCB0cnVlKSk7
Ci0gICAgbV9zeW1ib2xUYWJsZVN0YWNrLmFwcGVuZChTeW1ib2xUYWJsZVN0YWNrRW50cnkgeyBT
dHJvbmc8U3ltYm9sVGFibGU+KCptX3ZtLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKSwg
bV90b3BNb3N0U2NvcGUsIGZhbHNlLCBjb25zdGFudFN5bWJvbFRhYmxlLT5pbmRleCgpIH0pOwor
ICAgIHB1c2hURFpWYXJpYWJsZXMobGV4aWNhbFZhcmlhYmxlcywgVERaQ2hlY2tPcHRpbWl6YXRp
b246Ok9wdGltaXplKTsKKyAgICBib29sIGlzV2l0aFNjb3BlID0gZmFsc2U7CisgICAgbV9zeW1i
b2xUYWJsZVN0YWNrLmFwcGVuZChTeW1ib2xUYWJsZVN0YWNrRW50cnkgeyBTdHJvbmc8U3ltYm9s
VGFibGU+KCptX3ZtLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKSwgbV90b3BNb3N0U2Nv
cGUsIGlzV2l0aFNjb3BlLCBjb25zdGFudFN5bWJvbFRhYmxlLT5pbmRleCgpIH0pOwogICAgIGVt
aXRQcmVmaWxsU3RhY2tURFpWYXJpYWJsZXMobGV4aWNhbFZhcmlhYmxlcywgbW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZSk7CiAKICAgICAvLyBtYWtlRnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRo
ZXJlJ3MgY29ycmVjdCBURFogc3RhY2sgZW50cmllcy4KQEAgLTE3NDIsNyArMTc0NSw3IEBAIGJv
b2wgQnl0ZWNvZGVHZW5lcmF0b3I6Omluc3RhbnRpYXRlTGV4aWMKICAgICB7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbGV4aWNhbFZhcmlhYmxlcykgewotICAgICAgICAgICAgQVNTRVJU
KGVudHJ5LnZhbHVlLmlzTGV0KCkgfHwgZW50cnkudmFsdWUuaXNDb25zdCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChlbnRyeS52YWx1ZS5pc0xldCgpIHx8IGVudHJ5LnZhbHVlLmlzQ29uc3QoKSB8
fCBlbnRyeS52YWx1ZS5pc0Z1bmN0aW9uKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlbnRyeS52
YWx1ZS5pc1ZhcigpKTsKICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgc3ltYm9sVGFibGVF
bnRyeSA9IHN5bWJvbFRhYmxlLT5nZXQobG9ja2VyLCBlbnRyeS5rZXkuZ2V0KCkpOwogICAgICAg
ICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlRW50cnkuaXNOdWxsKCkpOwpAQCAtMTc4OSw2ICsxNzky
LDkgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByZWZpbGxTdGFjawogICAgICAgICBp
ZiAoZW50cnkudmFsdWUuaXNJbXBvcnRlZCgpICYmICFlbnRyeS52YWx1ZS5pc0ltcG9ydGVkTmFt
ZXNwYWNlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBpZiAoZW50cnkudmFs
dWUuaXNGdW5jdGlvbigpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBzeW1ib2xUYWJsZUVudHJ5ID0gc3ltYm9sVGFibGUtPmdldChlbnRyeS5rZXku
Z2V0KCkpOwogICAgICAgICBBU1NFUlQoIXN5bWJvbFRhYmxlRW50cnkuaXNOdWxsKCkpOwogICAg
ICAgICBWYXJPZmZzZXQgb2Zmc2V0ID0gc3ltYm9sVGFibGVFbnRyeS52YXJPZmZzZXQoKTsKQEAg
LTE4MDAsMTAgKzE4MDYsMTcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByZWZpbGxT
dGFjawogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29w
ZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSogbm9kZSwgVERaQ2hlY2tPcHRpbWl6YXRpb24gdGR6
Q2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSBuZXN0ZWRTY29wZVR5cGUsIFJlZ2lz
dGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0KQordm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSogbm9kZSwgVERaQ2hl
Y2tPcHRpbWl6YXRpb24gdGR6Q2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSBuZXN0
ZWRTY29wZVR5cGUsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0LCBib29s
IHNob3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucykKIHsKICAgICBWYXJpYWJsZUVu
dmlyb25tZW50JiBlbnZpcm9ubWVudCA9IG5vZGUtPmxleGljYWxWYXJpYWJsZXMoKTsKLSAgICBw
dXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIHRkekNoZWNrT3B0aW1pemF0aW9u
LCBuZXN0ZWRTY29wZVR5cGUsIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQsIFREWlJlcXVpcmVt
ZW50OjpVbmRlclREWiwgU2NvcGVUeXBlOjpMZXRDb25zdFNjb3BlLCBTY29wZVJlZ2lzdGVyVHlw
ZTo6QmxvY2spOworICAgIFJlZ2lzdGVySUQqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHRUZW1w
ID0gbnVsbHB0cjsKKyAgICBwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIHRk
ekNoZWNrT3B0aW1pemF0aW9uLCBuZXN0ZWRTY29wZVR5cGUsICZjb25zdGFudFN5bWJvbFRhYmxl
UmVzdWx0VGVtcCwgVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaLCBTY29wZVR5cGU6OkxldENvbnN0
U2NvcGUsIFNjb3BlUmVnaXN0ZXJUeXBlOjpCbG9jayk7CisKKyAgICBpZiAoc2hvdWxkSW5pdGlh
bGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zKQorICAgICAgICBpbml0aWFsaXplQmxvY2tTY29wZWRG
dW5jdGlvbnMoZW52aXJvbm1lbnQsIG5vZGUtPmZ1bmN0aW9uU3RhY2soKSwgY29uc3RhbnRTeW1i
b2xUYWJsZVJlc3VsdFRlbXApOworCisgICAgaWYgKGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQg
JiYgY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdFRlbXApCisgICAgICAgICpjb25zdGFudFN5bWJv
bFRhYmxlUmVzdWx0ID0gY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdFRlbXA7CiB9CiAKIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVudmly
b25tZW50JiBlbnZpcm9ubWVudCwgVERaQ2hlY2tPcHRpbWl6YXRpb24gdGR6Q2hlY2tPcHRpbWl6
YXRpb24sIE5lc3RlZFNjb3BlVHlwZSBuZXN0ZWRTY29wZVR5cGUsCkBAIC0xODY5LDE1ICsxODgy
LDYwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGUKICAgICAgICAg
cHVzaFNjb3BlZENvbnRyb2xGbG93Q29udGV4dCgpOwogICAgIH0KIAotICAgIG1fc3ltYm9sVGFi
bGVTdGFjay5hcHBlbmQoU3ltYm9sVGFibGVTdGFja0VudHJ5eyBzeW1ib2xUYWJsZSwgbmV3U2Nv
cGUsIGZhbHNlLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSk7Ci0gICAgYm9vbCBjYW5PcHRp
bWl6ZVREWkNoZWNrcyA9IHRkekNoZWNrT3B0aW1pemF0aW9uID09IFREWkNoZWNrT3B0aW1pemF0
aW9uOjpPcHRpbWl6ZTsKKyAgICBib29sIGlzV2l0aFNjb3BlID0gZmFsc2U7CisgICAgbV9zeW1i
b2xUYWJsZVN0YWNrLmFwcGVuZChTeW1ib2xUYWJsZVN0YWNrRW50cnl7IHN5bWJvbFRhYmxlLCBu
ZXdTY29wZSwgaXNXaXRoU2NvcGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KTsKICAgICBp
ZiAodGR6UmVxdWlyZW1lbnQgPT0gVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaKQotICAgICAgICBt
X1REWlN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihlbnZpcm9ubWVudCwgY2FuT3B0aW1pemVU
RFpDaGVja3MpKTsKKyAgICAgICAgcHVzaFREWlZhcmlhYmxlcyhlbnZpcm9ubWVudCwgdGR6Q2hl
Y2tPcHRpbWl6YXRpb24pOwogCiAgICAgaWYgKHRkelJlcXVpcmVtZW50ID09IFREWlJlcXVpcmVt
ZW50OjpVbmRlclREWikKICAgICAgICAgZW1pdFByZWZpbGxTdGFja1REWlZhcmlhYmxlcyhlbnZp
cm9ubWVudCwgc3ltYm9sVGFibGUuZ2V0KCkpOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
Ojppbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMoVmFyaWFibGVFbnZpcm9ubWVudCYgZW52
aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2ssIFJlZ2lzdGVySUQqIGNvbnN0
YW50U3ltYm9sVGFibGUpCit7CisgICAgLy8gV2UgY2FuIHRyZWF0IGJsb2NrIHNjb3BlZCB2YXJp
YWJsZXMgbGlrZSBzbzoKKyAgICAvKgorICAgICAqIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgKiAg
ICAgeworICAgICAqICAgICAgICAgICBmdW5jdGlvbiBmb28oKSB7fTsKKyAgICAgKiAgICAgfQor
ICAgICAqIH0KKyAgICAgKgorICAgICAqIGxpa2UgdGhpczoKKyAgICAgKgorICAgICAqIGZ1bmN0
aW9uIGZvbygpIHsKKyAgICAgKiAgICAgeworICAgICAqICAgICAgICAgbGV0IGZvbyA9IGZ1bmN0
aW9uIGZvbygpIHt9OworICAgICAqICAgICB9CisgICAgICogfQorICAgICovCisKKyAgICBpZiAo
IWVudmlyb25tZW50LnNpemUoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZnVuY3Rpb25T
dGFjay5zaXplKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFmdW5jdGlv
blN0YWNrLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gbV9zeW1ib2xUYWJsZVN0YWNrLmxhc3QoKS5tX3N5bWJvbFRhYmxlLmdldCgpOwor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAg
IFJlZ2lzdGVySUQqIHNjb3BlID0gbV9zeW1ib2xUYWJsZVN0YWNrLmxhc3QoKS5tX3Njb3BlOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgaW50IHN5
bWJvbFRhYmxlSW5kZXggPSBjb25zdGFudFN5bWJvbFRhYmxlID8gY29uc3RhbnRTeW1ib2xUYWJs
ZS0+aW5kZXgoKSA6IDA7CisgICAgZm9yIChGdW5jdGlvbk1ldGFkYXRhTm9kZSogZnVuY3Rpb24g
OiBmdW5jdGlvblN0YWNrKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUgPSBmdW5j
dGlvbi0+aWRlbnQoKTsKKyAgICAgICAgYXV0byBpdGVyID0gZW52aXJvbm1lbnQuZmluZChuYW1l
LmltcGwoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW52aXJvbm1lbnQuZW5k
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5pc0Z1bmN0aW9uKCkpOwor
ICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUtPmdldChsb2NrZXIs
IG5hbWUuaW1wbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsK
KyAgICAgICAgZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbkNvbW1vbih0ZW1wLmdldCgpLCBmdW5j
dGlvbik7CisgICAgICAgIGJvb2wgaXNMZXhpY2FsbHlTY29wZWQgPSB0cnVlOworICAgICAgICBl
bWl0UHV0VG9TY29wZShzY29wZSwgdmFyaWFibGVGb3JMb2NhbEVudHJ5KG5hbWUsIGVudHJ5LCBz
eW1ib2xUYWJsZUluZGV4LCBpc0xleGljYWxseVNjb3BlZCksIHRlbXAuZ2V0KCksIERvTm90VGhy
b3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbik7CisgICAgfQorfQorCiB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqIG5vZGUp
CiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQgPSBub2RlLT5sZXhpY2Fs
VmFyaWFibGVzKCk7CkBAIC0yNTUzLDggKzI2MTEsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpsaWZ0VERaQ2hlY2tJZlBvCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9URFpTdGFjay5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQgPSBt
X1REWlN0YWNrW2ldLmZpcnN0OwogICAgICAgICBpZiAoZW52aXJvbm1lbnQuY29udGFpbnMoaWRl
bnRpZmllcikpIHsKLSAgICAgICAgICAgIGJvb2wgaXNTeW50YWN0aWNhbGx5QWJsZVRvT3B0aW1p
emVURFogPSBtX1REWlN0YWNrW2ldLnNlY29uZDsKLSAgICAgICAgICAgIGlmIChpc1N5bnRhY3Rp
Y2FsbHlBYmxlVG9PcHRpbWl6ZVREWikgeworICAgICAgICAgICAgVERaQ2hlY2tPcHRpbWl6YXRp
b24gdGR6Q2hlY2tPcHRpbWl6YXRpb25DYXBhYmlsaXR5ID0gbV9URFpTdGFja1tpXS5zZWNvbmQ7
CisgICAgICAgICAgICBpZiAodGR6Q2hlY2tPcHRpbWl6YXRpb25DYXBhYmlsaXR5ID09IFREWkNo
ZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSkgewogICAgICAgICAgICAgICAgIGJvb2wgd2FzUmVt
b3ZlZCA9IGVudmlyb25tZW50LnJlbW92ZShpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCh3YXNSZW1vdmVkKTsKICAgICAgICAgICAgIH0KQEAgLTI1NjMsNiArMjYy
MSwyMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpsaWZ0VERaQ2hlY2tJZlBvCiAgICAgfQog
fQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoVERaVmFyaWFibGVzKFZhcmlhYmxlRW52
aXJvbm1lbnQgZW52aXJvbm1lbnQsIFREWkNoZWNrT3B0aW1pemF0aW9uIG9wdGltaXphdGlvbikK
K3sKKyAgICBpZiAoIWVudmlyb25tZW50LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGZ1bmN0aW9uc1RvUmVtb3ZlOworICAgIGZvciAo
YXV0byBlbnRyeSA6IGVudmlyb25tZW50KSB7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS5pc0Z1
bmN0aW9uKCkpCisgICAgICAgICAgICBmdW5jdGlvbnNUb1JlbW92ZS5hZGQoZW50cnkua2V5Lmdl
dCgpKTsKKyAgICB9CisKKyAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBmdW5jdGlvbiA6IGZ1
bmN0aW9uc1RvUmVtb3ZlKQorICAgICAgICBlbnZpcm9ubWVudC5yZW1vdmUoZnVuY3Rpb24pOwor
CisgICAgbV9URFpTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZShlbnZpcm9ubWVu
dCksIG9wdGltaXphdGlvbikpOworfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZXRWYXJp
YWJsZXNVbmRlclREWihWYXJpYWJsZUVudmlyb25tZW50JiByZXN1bHQpCiB7CiAgICAgZm9yIChh
dXRvJiBwYWlyIDogbV9URFpTdGFjaykgewpAQCAtMjY4Myw5ICsyNzU4LDggQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdSZQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb25Db21tb24oUmVn
aXN0ZXJJRCogZHN0LCBCYXNlRnVuY0V4cHJOb2RlKiBmdW5jKQordm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbkNvbW1vbihSZWdpc3RlcklEKiBkc3QsIEZ1
bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbikKIHsKLSAgICBGdW5jdGlvbk1ldGFkYXRhTm9k
ZSogZnVuY3Rpb24gPSBmdW5jLT5tZXRhZGF0YSgpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9j
b2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwcihtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKTsKIAogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gb3BfbmV3X2Z1bmNfZXhwOwpAQCAtMjcxMSwxNCArMjc4NSwx
NCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FCiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVy
SUQqIGRzdCwgRnVuY0V4cHJOb2RlKiBmdW5jKQogewotICAgIGVtaXROZXdGdW5jdGlvbkV4cHJl
c3Npb25Db21tb24oZHN0LCBmdW5jKTsKKyAgICBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uQ29t
bW9uKGRzdCwgZnVuYy0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihS
ZWdpc3RlcklEKiBkc3QsIEFycm93RnVuY0V4cHJOb2RlKiBmdW5jKQogewogICAgIEFTU0VSVChm
dW5jLT5tZXRhZGF0YSgpLT5wYXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVu
Y3Rpb25Nb2RlKTsgICAgCi0gICAgZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbkNvbW1vbihkc3Qs
IGZ1bmMpOworICAgIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb25Db21tb24oZHN0LCBmdW5jLT5t
ZXRhZGF0YSgpKTsKICAgICByZXR1cm4gZHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZp
c2lvbiAxOTc3ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwOSw2ICs3MDksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgZW51bSBjbGFzcyBTY29wZVR5cGUgeyBDYXRjaFNjb3BlLCBMZXRD
b25zdFNjb3BlLCBGdW5jdGlvbk5hbWVTY29wZSB9OwogICAgICAgICBlbnVtIGNsYXNzIFNjb3Bl
UmVnaXN0ZXJUeXBlIHsgVmFyLCBCbG9jayB9OwogICAgICAgICB2b2lkIHB1c2hMZXhpY2FsU2Nv
cGVJbnRlcm5hbChWYXJpYWJsZUVudmlyb25tZW50JiwgVERaQ2hlY2tPcHRpbWl6YXRpb24sIE5l
c3RlZFNjb3BlVHlwZSwgUmVnaXN0ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQsIFRE
WlJlcXVpcmVtZW50LCBTY29wZVR5cGUsIFNjb3BlUmVnaXN0ZXJUeXBlKTsKKyAgICAgICAgdm9p
ZCBpbml0aWFsaXplQmxvY2tTY29wZWRGdW5jdGlvbnMoVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1
bmN0aW9uU3RhY2smLCBSZWdpc3RlcklEKiBjb25zdGFudFN5bWJvbFRhYmxlKTsKICAgICAgICAg
dm9pZCBwb3BMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVudmlyb25tZW50JiwgVERaUmVx
dWlyZW1lbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb29rVXBWYXJLaW5kRnVuY3Rv
cj4KICAgICAgICAgYm9vbCBpbnN0YW50aWF0ZUxleGljYWxWYXJpYWJsZXMoY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCYsIFN5bWJvbFRhYmxlKiwgU2NvcGVSZWdpc3RlclR5cGUsIExvb2tVcFZh
cktpbmRGdW5jdG9yKTsKQEAgLTcxNiw3ICs3MTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0UG9wU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQYXJlbnRTY29wZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNj
b3BlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgYm9vbCBp
c0NhcHR1cmVkKTsKLSAgICAgICAgdm9pZCBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uQ29tbW9u
KFJlZ2lzdGVySUQqLCBCYXNlRnVuY0V4cHJOb2RlKik7CisgICAgICAgIHZvaWQgZW1pdE5ld0Z1
bmN0aW9uRXhwcmVzc2lvbkNvbW1vbihSZWdpc3RlcklEKiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUq
KTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNOZXdUYXJnZXRVc2VkSW5Jbm5lckFycm93RnVu
Y3Rpb24oKTsKICAgICAgICAgYm9vbCBpc1N1cGVyVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7
CkBAIC03MjUsNyArNzI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAg
ICBib29sIGlzU3VwZXJDYWxsVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7CiAgICAgICAgIGJv
b2wgaXNUaGlzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7Ci0gICAgICAgIHZvaWQgcHVzaExl
eGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSosIFREWkNoZWNrT3B0aW1pemF0aW9u
LCBOZXN0ZWRTY29wZVR5cGUgPSBOZXN0ZWRTY29wZVR5cGU6OklzTm90TmVzdGVkLCBSZWdpc3Rl
cklEKiogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCA9IG51bGxwdHIpOworICAgICAgICB2b2lk
IHB1c2hMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqLCBURFpDaGVja09wdGlt
aXphdGlvbiwgTmVzdGVkU2NvcGVUeXBlID0gTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwg
UmVnaXN0ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQgPSBudWxscHRyLCBib29sIHNo
b3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucyA9IHRydWUpOwogICAgICAgICB2b2lk
IHBvcExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSopOwogICAgICAgICB2b2lk
IHByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlvbihWYXJpYWJsZUVudmly
b25tZW50Tm9kZSosIFJlZ2lzdGVySUQqIGxvb3BTeW1ib2xUYWJsZSk7CiAgICAgICAgIGludCBs
YWJlbFNjb3BlRGVwdGgoKSBjb25zdDsKQEAgLTg1OSw3ICs4NjAsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGludCBtX3N5bWJvbFRhYmxlQ29uc3RhbnRJbmRleDsKICAgICAgICAg
fTsKICAgICAgICAgVmVjdG9yPFN5bWJvbFRhYmxlU3RhY2tFbnRyeT4gbV9zeW1ib2xUYWJsZVN0
YWNrOwotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFZhcmlhYmxlRW52aXJvbm1lbnQsIGJvb2w+
PiBtX1REWlN0YWNrOworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFZhcmlhYmxlRW52aXJvbm1l
bnQsIFREWkNoZWNrT3B0aW1pemF0aW9uPj4gbV9URFpTdGFjazsKKyAgICAgICAgdm9pZCBwdXNo
VERaVmFyaWFibGVzKFZhcmlhYmxlRW52aXJvbm1lbnQsIFREWkNoZWNrT3B0aW1pemF0aW9uKTsK
IAogICAgICAgICBTY29wZU5vZGUqIGNvbnN0IG1fc2NvcGVOb2RlOwogICAgICAgICBTdHJvbmc8
VW5saW5rZWRDb2RlQmxvY2s+IG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE5Nzc4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyAr
MTMzLDYgQEAgcHVibGljOgogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNl
RWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVu
dHMoKTsgfQogCi0gICAgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmNEZWNs
YXJhdGlvbnMoKSB7IHJldHVybiBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9uczsgfQogICAgIGlu
dCBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUubV9mZWF0dXJlczsgfQogICAgIGlu
dCBudW1Db25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLm1fbnVtQ29uc3RhbnRzOyB9
CiAKQEAgLTQ3NSw3ICs0NzQsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3NvdXJjZUNvZGUt
PnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5k
T2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uYm9keVN0YXJ0Q29s
dW1uKSk7CiAgICAgICAgIGlmICgqZnVuY3Rpb25JbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+YXJndW1lbnRzKQogICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwotICAgICAgICBt
X3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9ucy5hcHBlbmQoZGVjbC0+bWV0YWRhdGEoKSk7CiAgICAg
ICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVu
Y3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQpOwogICAgICAgICByZXR1cm4gZGVjbDsKICAgICB9CkBAIC00ODksOSArNDg3LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZGVjbDsKICAgICB9CiAKLSAgICBTdGF0ZW1lbnRO
b2RlKiBjcmVhdGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBlbGVtZW50cywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExp
bmUsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgSlNDOjpTb3VyY2VFbGVtZW50cyogZWxlbWVudHMsIGludCBzdGFydExpbmUsIGludCBlbmRM
aW5lLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBEZWNsYXJhdGlvblN0
YWNrczo6RnVuY3Rpb25TdGFjayYmIGZ1bmN0aW9uU3RhY2spCiAgICAgewotICAgICAgICBCbG9j
a05vZGUqIGJsb2NrID0gbmV3IChtX3BhcnNlckFyZW5hKSBCbG9ja05vZGUobG9jYXRpb24sIGVs
ZW1lbnRzLCBsZXhpY2FsVmFyaWFibGVzKTsKKyAgICAgICAgQmxvY2tOb2RlKiBibG9jayA9IG5l
dyAobV9wYXJzZXJBcmVuYSkgQmxvY2tOb2RlKGxvY2F0aW9uLCBlbGVtZW50cywgbGV4aWNhbFZh
cmlhYmxlcywgV1RGTW92ZShmdW5jdGlvblN0YWNrKSk7CiAgICAgICAgIGJsb2NrLT5zZXRMb2Mo
c3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0
YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KQEAgLTYyMSwxMCArNjE5
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBTdGF0
ZW1lbnROb2RlKiBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIENsYXVzZUxpc3ROb2RlKiBmaXJzdENsYXVz
ZXMsIENhc2VDbGF1c2VOb2RlKiBkZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSogc2Vjb25k
Q2xhdXNlcywgaW50IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIFZhcmlhYmxlRW52aXJvbm1lbnQm
IGxleGljYWxWYXJpYWJsZXMpCisgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlU3dpdGNoU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBDbGF1c2VMaXN0Tm9kZSogZmlyc3RDbGF1c2VzLCBDYXNlQ2xhdXNlTm9kZSogZGVmYXVsdENs
YXVzZSwgQ2xhdXNlTGlzdE5vZGUqIHNlY29uZENsYXVzZXMsIGludCBzdGFydExpbmUsIGludCBl
bmRMaW5lLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBEZWNsYXJhdGlv
blN0YWNrczo6RnVuY3Rpb25TdGFjayYmIGZ1bmN0aW9uU3RhY2spCiAgICAgewogICAgICAgICBD
YXNlQmxvY2tOb2RlKiBjYXNlcyA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQ2FzZUJsb2NrTm9kZShm
aXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMpOwotICAgICAgICBTd2l0
Y2hOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFN3aXRjaE5vZGUobG9jYXRpb24s
IGV4cHIsIGNhc2VzLCBsZXhpY2FsVmFyaWFibGVzKTsKKyAgICAgICAgU3dpdGNoTm9kZSogcmVz
dWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBTd2l0Y2hOb2RlKGxvY2F0aW9uLCBleHByLCBjYXNl
cywgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShmdW5jdGlvblN0YWNrKSk7CiAgICAgICAgIHJl
c3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxv
Y2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtOTI4LDcgKzkyNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIG1fbnVtQ29uc3RhbnRz
KDApCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICBEZWNsYXJhdGlvblN0YWNrczo6RnVu
Y3Rpb25TdGFjayBtX2Z1bmNEZWNsYXJhdGlvbnM7CiAgICAgICAgIGludCBtX2ZlYXR1cmVzOwog
ICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxOTc3ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTI5LDcgKzkyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5s
aW5lIENsYXNzRXhwck5vZGU6OkNsYXNzRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgVmFyaWFibGVFbnZpcm9ubWVudCYgY2xh
c3NFbnZpcm9ubWVudCwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRXhwcmVzc2lvbiwgRXhw
cmVzc2lvbk5vZGUqIGNsYXNzSGVyaXRhZ2UsIFByb3BlcnR5TGlzdE5vZGUqIGluc3RhbmNlTWV0
aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcykKICAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShsb2NhdGlvbikKLSAgICAgICAgLCBWYXJpYWJsZUVudmlyb25tZW50Tm9kZShjbGFz
c0Vudmlyb25tZW50KQorICAgICAgICAsIFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKGNsYXNzRW52
aXJvbm1lbnQpIC8vIEZJWE1FOiB3aGF0IGlzIHRoaXM/CiAgICAgICAgICwgbV9uYW1lKG5hbWUp
CiAgICAgICAgICwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24oY29uc3RydWN0b3JFeHByZXNzaW9u
KQogICAgICAgICAsIG1fY2xhc3NIZXJpdGFnZShjbGFzc0hlcml0YWdlKQpAQCAtOTY0LDE3ICs5
NjQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBTd2l0
Y2hOb2RlOjpTd2l0Y2hOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBleHByLCBDYXNlQmxvY2tOb2RlKiBibG9jaywgVmFyaWFibGVFbnZpcm9ubWVu
dCYgbGV4aWNhbFZhcmlhYmxlcykKKyAgICBpbmxpbmUgU3dpdGNoTm9kZTo6U3dpdGNoTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2Fz
ZUJsb2NrTm9kZSogYmxvY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMs
IEZ1bmN0aW9uU3RhY2smJiBmdW5jdGlvblN0YWNrKQogICAgICAgICA6IFN0YXRlbWVudE5vZGUo
bG9jYXRpb24pCi0gICAgICAgICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4aWNhbFZhcmlh
YmxlcykKKyAgICAgICAgLCBWYXJpYWJsZUVudmlyb25tZW50Tm9kZShsZXhpY2FsVmFyaWFibGVz
LCBXVEZNb3ZlKGZ1bmN0aW9uU3RhY2spKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAg
ICAsIG1fYmxvY2soYmxvY2spCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBCbG9ja05vZGU6
OkJsb2NrTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTb3VyY2VFbGVtZW50
cyogc3RhdGVtZW50cywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKKyAg
ICBpbmxpbmUgQmxvY2tOb2RlOjpCbG9ja05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgU291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxl
eGljYWxWYXJpYWJsZXMsIEZ1bmN0aW9uU3RhY2smJiBmdW5jdGlvblN0YWNrKQogICAgICAgICA6
IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCi0gICAgICAgICwgVmFyaWFibGVFbnZpcm9ubWVudE5v
ZGUobGV4aWNhbFZhcmlhYmxlcykKKyAgICAgICAgLCBWYXJpYWJsZUVudmlyb25tZW50Tm9kZShs
ZXhpY2FsVmFyaWFibGVzLCBXVEZNb3ZlKGZ1bmN0aW9uU3RhY2spKQogICAgICAgICAsIG1fc3Rh
dGVtZW50cyhzdGF0ZW1lbnRzKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTk3Nzg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEwICs5NCwxMCBA
QCBTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyCiB7CiB9CiAKLVNjb3Bl
Tm9kZTo6U2NvcGVOb2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
aWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smIGZ1bmNTdGFj
aywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgQ29kZUZlYXR1cmVzIGZl
YXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9u
Q29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorU2NvcGVOb2RlOjpTY29wZU5vZGUoUGFy
c2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRp
b24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2
YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9u
bWVudCYgbGV4aWNhbFZhcmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93
RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQogICAgIDogU3RhdGVtZW50Tm9kZShlbmRMb2NhdGlvbikKICAgICAsIFBh
cnNlckFyZW5hUm9vdChwYXJzZXJBcmVuYSkKLSAgICAsIFZhcmlhYmxlRW52aXJvbm1lbnROb2Rl
KGxleGljYWxWYXJpYWJsZXMpCisgICAgLCBWYXJpYWJsZUVudmlyb25tZW50Tm9kZShsZXhpY2Fs
VmFyaWFibGVzLCBXVEZNb3ZlKGZ1bmNTdGFjaykpCiAgICAgLCBtX3N0YXJ0TGluZU51bWJlcihz
dGFydExvY2F0aW9uLmxpbmUpCiAgICAgLCBtX3N0YXJ0U3RhcnRPZmZzZXQoc3RhcnRMb2NhdGlv
bi5zdGFydE9mZnNldCkKICAgICAsIG1fc3RhcnRMaW5lU3RhcnRPZmZzZXQoc3RhcnRMb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQpCkBAIC0xMDgsNyArMTA4LDYgQEAgU2NvcGVOb2RlOjpTY29wZU5v
ZGUoUGFyc2VyQXJlbmEmIHBhcnNlcgogICAgICwgbV9zdGF0ZW1lbnRzKGNoaWxkcmVuKQogewog
ICAgIG1fdmFyRGVjbGFyYXRpb25zLnN3YXAodmFyRW52aXJvbm1lbnQpOwotICAgIG1fZnVuY3Rp
b25TdGFjay5zd2FwKGZ1bmNTdGFjayk7CiB9CiAKIFN0YXRlbWVudE5vZGUqIFNjb3BlTm9kZTo6
c2luZ2xlU3RhdGVtZW50KCkgY29uc3QKQEAgLTExOCw4ICsxMTcsOCBAQCBTdGF0ZW1lbnROb2Rl
KiBTY29wZU5vZGU6OnNpbmdsZVN0YXRlbWVuCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Qcm9n
cmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1
bmN0aW9uU3RhY2smIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlh
YmxlcywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5v
ZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxk
cmVuLCB2YXJFbnZpcm9ubWVudCwgZnVuY1N0YWNrLCBsZXhpY2FsVmFyaWFibGVzLCBmZWF0dXJl
cywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0
aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJs
ZXMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2Rl
KHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJl
biwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywg
ZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgbnVtQ29uc3RhbnRzKQog
ICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENv
bHVtbikKIHsKQEAgLTEyNyw4ICsxMjYsOCBAQCBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFy
c2VyQXJlbmEmIHBhCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb2R1bGVQ
cm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Nb2R1bGVQcm9ncmFt
Tm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
TG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQs
IEZ1bmN0aW9uU3RhY2smIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZh
cmlhYmxlcywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5l
ckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29w
ZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNo
aWxkcmVuLCB2YXJFbnZpcm9ubWVudCwgZnVuY1N0YWNrLCBsZXhpY2FsVmFyaWFibGVzLCBmZWF0
dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitNb2R1
bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5h
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1
bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52
aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQm
IGxleGljYWxWYXJpYWJsZXMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVh
dHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQor
ICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4
aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywg
bnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1f
ZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKQEAgLTEzNiw4ICsxMzUsOCBAQCBNb2R1bGVQcm9ncmFt
Tm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FdmFsTm9k
ZTo6RXZhbE5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
aWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smIGZ1bmNTdGFj
aywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0
TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVudCwg
ZnVuY1N0YWNrLCBsZXhpY2FsVmFyaWFibGVzLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9u
Q29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitFdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRD
b2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFy
RW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1l
bnQmIGxleGljYWxWYXJpYWJsZXMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KQorICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwg
bGV4aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogewogfQpAQCAt
MTgyLDggKzE4MSw4IEBAIHZvaWQgRnVuY3Rpb25NZXRhZGF0YU5vZGU6OnNldEVuZFBvc2l0aW8K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1GdW5jdGlvbk5vZGU6OkZ1bmN0aW9uTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYgZnVuY1N0YWNrLCBW
YXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBGdW5jdGlvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKLSAgICA6IFNjb3BlTm9kZShwYXJzZXJB
cmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2
YXJFbnZpcm9ubWVudCwgZnVuY1N0YWNrLCBsZXhpY2FsVmFyaWFibGVzLCBmZWF0dXJlcywgaW5u
ZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitGdW5jdGlvbk5vZGU6
OkZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25T
dGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywg
RnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAg
OiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3Vy
Y2VDb2RlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4
aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywg
bnVtQ29uc3RhbnRzKQogICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCiAgICAgLCBtX3N0
YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQpAQCAt
MjAyLDQgKzIwMSwxMCBAQCBWYXJpYWJsZUVudmlyb25tZW50Tm9kZTo6VmFyaWFibGVFbnZpcm9u
CiAgICAgbV9sZXhpY2FsVmFyaWFibGVzLnN3YXAobGV4aWNhbFZhcmlhYmxlcyk7CiB9CiAKK1Zh
cmlhYmxlRW52aXJvbm1lbnROb2RlOjpWYXJpYWJsZUVudmlyb25tZW50Tm9kZShWYXJpYWJsZUVu
dmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBGdW5jdGlvblN0YWNrJiYgZnVuY3Rpb25TdGFj
aykKK3sKKyAgICBtX2xleGljYWxWYXJpYWJsZXMuc3dhcChsZXhpY2FsVmFyaWFibGVzKTsKKyAg
ICBtX2Z1bmN0aW9uU3RhY2sgPSBXVEZNb3ZlKGZ1bmN0aW9uU3RhY2spOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlz
aW9uIDE5Nzc4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE0LDE2ICsyMTQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBWYXJpYWJsZUVudmlyb25tZW50Tm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYURlbGV0YWJs
ZSB7CiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5j
dGlvblN0YWNrIEZ1bmN0aW9uU3RhY2s7CisKICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudE5v
ZGUoKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50
Tm9kZShWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsRGVjbGFyZWRWYXJpYWJsZXMpOworICAg
ICAgICBWYXJpYWJsZUVudmlyb25tZW50Tm9kZShWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2Fs
RGVjbGFyZWRWYXJpYWJsZXMsIEZ1bmN0aW9uU3RhY2smJik7CiAKICAgICAgICAgVmFyaWFibGVF
bnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcygpIHsgcmV0dXJuIG1fbGV4aWNhbFZhcmlhYmxl
czsgfQorICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1cm4gbV9m
dW5jdGlvblN0YWNrOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFZhcmlhYmxlRW52aXJv
bm1lbnQgbV9sZXhpY2FsVmFyaWFibGVzOworICAgICAgICBGdW5jdGlvblN0YWNrIG1fZnVuY3Rp
b25TdGFjazsKICAgICB9OwogCiAgICAgY2xhc3MgQ29uc3RhbnROb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKQEAgLTEzMDMsNyArMTMwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1
YmxpYzoKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldzsK
IAotICAgICAgICBCbG9ja05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgU291cmNlRWxlbWVu
dHMqLCBWYXJpYWJsZUVudmlyb25tZW50Jik7CisgICAgICAgIEJsb2NrTm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5j
dGlvblN0YWNrJiYpOwogCiAgICAgICAgIFN0YXRlbWVudE5vZGUqIHNpbmdsZVN0YXRlbWVudCgp
IGNvbnN0OwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBsYXN0U3RhdGVtZW50KCkgY29uc3Q7CkBA
IC0xNTUxLDEwICsxNTU2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTY29wZU5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFBhcnNlckFyZW5hUm9vdCwgcHVibGlj
IFZhcmlhYmxlRW52aXJvbm1lbnROb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYg
RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKIAogICAgICAg
ICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAg
ICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBWYXJpYWJsZUVudmly
b25tZW50JiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOworICAgICAgICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3Qg
U291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0
aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB1c2lu
ZyBQYXJzZXJBcmVuYVJvb3Q6Om9wZXJhdG9yIG5ldzsKIApAQCAtMTU5Myw3ICsxNTk3LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpIHsgcmV0dXJuIGNhcHR1cmVzKGlkZW50LmltcGwoKSk7IH0KIAogICAgICAgICBWYXJp
YWJsZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX3ZhckRlY2xhcmF0
aW9uczsgfQotICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1cm4g
bV9mdW5jdGlvblN0YWNrOyB9CiAKICAgICAgICAgaW50IG5lZWRlZENvbnN0YW50cygpCiAgICAg
ICAgIHsKQEAgLTE2MTgsMTQgKzE2MjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBtX2lubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlczsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgVmFyaWFibGVFbnZp
cm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKLSAgICAgICAgRnVuY3Rpb25TdGFjayBtX2Z1bmN0
aW9uU3RhY2s7CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICAgICAgU291cmNlRWxl
bWVudHMqIG1fc3RhdGVtZW50czsKICAgICB9OwogCiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBw
dWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFBhcnNl
ckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBWYXJpYWJs
ZUVudmlyb25tZW50JiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENv
ZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmly
b25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25Q
YXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1
bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICB1bnNpZ25l
ZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KICAgICAgICAg
dW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE2
NDAsNyArMTY0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbE5vZGUgOiBw
dWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxOb2RlKFBhcnNlckFy
ZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBWYXJpYWJsZUVu
dmlyb25tZW50JiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVG
ZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
KTsKKyAgICAgICAgRXZhbE5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50
JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9u
Q29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBBTFdBWVNfSU5MSU5F
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgICAgICB1bnNp
Z25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQpAQCAtMTY1NSw3
ICsxNjU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBNb2R1bGVQcm9ncmFtTm9k
ZSA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgTW9kdWxlUHJvZ3Jh
bU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFj
ayYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMpOworICAgICAgICBNb2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJv
bm1lbnQmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOwog
CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENv
bHVtbjsgfQogICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2Vu
ZENvbHVtbjsgfQpAQCAtMTg5NCw3ICsxODk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIEZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1l
bnQmLCBGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uUGFyYW1l
dGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEZ1bmN0aW9uTm9kZShQ
YXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBT
b3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZh
cmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogCkBAIC0yMjAwLDcgKzIyMDIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRh
YmxlOjpvcGVyYXRvciBuZXc7CiAKLSAgICAgICAgU3dpdGNoTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSosIENhc2VCbG9ja05vZGUqLCBWYXJpYWJsZUVudmlyb25t
ZW50Jik7CisgICAgICAgIFN3aXRjaE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqLCBDYXNlQmxvY2tOb2RlKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9u
U3RhY2smJik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxOTc3ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
NiwxNyArMzM2LDE3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb24K
ICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBOREVCVUcKLSAgICBkaWRGaW5pc2hQYXJzaW5n
KHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgdmFyRGVjbGFyYXRp
b25zLCBmZWF0dXJlcywgY29udGV4dC5udW1Db25zdGFudHMoKSk7CisgICAgZGlkRmluaXNoUGFy
c2luZyhzb3VyY2VFbGVtZW50cywgc2NvcGUtPnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpLCB2
YXJEZWNsYXJhdGlvbnMsIGZlYXR1cmVzLCBjb250ZXh0Lm51bUNvbnN0YW50cygpKTsKIAogICAg
IHJldHVybiBwYXJzZUVycm9yOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgot
dm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyog
c291cmNlRWxlbWVudHMsIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jU3Rh
Y2ssIAordm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVt
ZW50cyogc291cmNlRWxlbWVudHMsIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiYg
ZnVuY1N0YWNrLCAKICAgICBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMsIENv
ZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKICAgICBtX3NvdXJjZUVs
ZW1lbnRzID0gc291cmNlRWxlbWVudHM7Ci0gICAgbV9mdW5jRGVjbGFyYXRpb25zLnN3YXAoZnVu
Y1N0YWNrKTsKKyAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPSBXVEZNb3ZlKGZ1bmNTdGFjayk7CiAg
ICAgbV92YXJEZWNsYXJhdGlvbnMuc3dhcCh2YXJEZWNsYXJhdGlvbnMpOwogICAgIG1fZmVhdHVy
ZXMgPSBmZWF0dXJlczsKICAgICBtX251bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKQEAgLTE0
MjQsNyArMTQyNCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUK
ICAgICBlbmRTd2l0Y2goKTsKICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0Us
ICJ9IiwgImVuZCIsICJib2R5IG9mIGEgJ3N3aXRjaCciKTsKICAgICAKLSAgICBUcmVlU3RhdGVt
ZW50IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGxvY2F0aW9uLCBleHBy
LCBmaXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMsIHN0YXJ0TGluZSwg
ZW5kTGluZSwgbGV4aWNhbFNjb3BlLT5maW5hbGl6ZUxleGljYWxFbnZpcm9ubWVudCgpKTsKKyAg
ICBUcmVlU3RhdGVtZW50IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGxv
Y2F0aW9uLCBleHByLCBmaXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMs
IHN0YXJ0TGluZSwgZW5kTGluZSwgbGV4aWNhbFNjb3BlLT5maW5hbGl6ZUxleGljYWxFbnZpcm9u
bWVudCgpLCBsZXhpY2FsU2NvcGUtPnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpKTsKICAgICBw
b3BTY29wZShsZXhpY2FsU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8p
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTYyLDExICsxNTYyLDEyIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICBpbnQgc3RhcnRPZmZzZXQgPSBt
X3Rva2VuLm1fZGF0YS5vZmZzZXQ7CiAgICAgaW50IHN0YXJ0ID0gdG9rZW5MaW5lKCk7CiAgICAg
VmFyaWFibGVFbnZpcm9ubWVudCBlbXB0eUVudmlyb25tZW50OworICAgIERlY2xhcmF0aW9uU3Rh
Y2tzOjpGdW5jdGlvblN0YWNrIGVtcHR5RnVuY3Rpb25TdGFjazsKICAgICBuZXh0KCk7CiAgICAg
aWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBtX3Rva2Vu
Lm1fZGF0YS5vZmZzZXQ7CiAgICAgICAgIG5leHQoKTsKLSAgICAgICAgVHJlZVN0YXRlbWVudCBy
ZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwg
bV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBzaG91bGRQdXNoTGV4aWNhbFNjb3BlID8gY3Vy
cmVudFNjb3BlKCktPmZpbmFsaXplTGV4aWNhbEVudmlyb25tZW50KCkgOiBlbXB0eUVudmlyb25t
ZW50KTsKKyAgICAgICAgVHJlZVN0YXRlbWVudCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUJsb2Nr
U3RhdGVtZW50KGxvY2F0aW9uLCAwLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5l
LCBzaG91bGRQdXNoTGV4aWNhbFNjb3BlID8gY3VycmVudFNjb3BlKCktPmZpbmFsaXplTGV4aWNh
bEVudmlyb25tZW50KCkgOiBlbXB0eUVudmlyb25tZW50LCBzaG91bGRQdXNoTGV4aWNhbFNjb3Bl
ID8gY3VycmVudFNjb3BlKCktPnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpIDogV1RGTW92ZShl
bXB0eUZ1bmN0aW9uU3RhY2spKTsKICAgICAgICAgY29udGV4dC5zZXRTdGFydE9mZnNldChyZXN1
bHQsIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQocmVzdWx0LCBl
bmRPZmZzZXQpOwogICAgICAgICBpZiAoc2hvdWxkUHVzaExleGljYWxTY29wZSkKQEAgLTE1Nzgs
NyArMTU3OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAg
ICBtYXRjaE9yRmFpbChDTE9TRUJSQUNFLCAiRXhwZWN0ZWQgYSBjbG9zaW5nICd9JyBhdCB0aGUg
ZW5kIG9mIGEgYmxvY2sgc3RhdGVtZW50Iik7CiAgICAgaW50IGVuZE9mZnNldCA9IG1fdG9rZW4u
bV9kYXRhLm9mZnNldDsKICAgICBuZXh0KCk7Ci0gICAgVHJlZVN0YXRlbWVudCByZXN1bHQgPSBj
b250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9uLCBzdWJ0cmVlLCBzdGFydCwgbV9s
YXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBzaG91bGRQdXNoTGV4aWNhbFNjb3BlID8gY3VycmVu
dFNjb3BlKCktPmZpbmFsaXplTGV4aWNhbEVudmlyb25tZW50KCkgOiBlbXB0eUVudmlyb25tZW50
KTsKKyAgICBUcmVlU3RhdGVtZW50IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlQmxvY2tTdGF0ZW1l
bnQobG9jYXRpb24sIHN1YnRyZWUsIHN0YXJ0LCBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uLmxpbmUs
IHNob3VsZFB1c2hMZXhpY2FsU2NvcGUgPyBjdXJyZW50U2NvcGUoKS0+ZmluYWxpemVMZXhpY2Fs
RW52aXJvbm1lbnQoKSA6IGVtcHR5RW52aXJvbm1lbnQsIHNob3VsZFB1c2hMZXhpY2FsU2NvcGUg
PyBjdXJyZW50U2NvcGUoKS0+dGFrZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgOiBXVEZNb3ZlKGVt
cHR5RnVuY3Rpb25TdGFjaykpOwogICAgIGNvbnRleHQuc2V0U3RhcnRPZmZzZXQocmVzdWx0LCBz
dGFydE9mZnNldCk7CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQocmVzdWx0LCBlbmRPZmZzZXQp
OwogICAgIGlmIChzaG91bGRQdXNoTGV4aWNhbFNjb3BlKQpAQCAtMTYwNyw3ICsxNjA4LDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAgICByZXN1bHQg
PSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgRGVjbGFyYXRpb25UeXBlOjpWYXJE
ZWNsYXJhdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRlVOQ1RJT046Ci0gICAgICAg
IGZhaWxJZkZhbHNlSWZTdHJpY3QobV9zdGF0ZW1lbnREZXB0aCA9PSAxLCAiU3RyaWN0IG1vZGUg
ZG9lcyBub3QgYWxsb3cgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIGEgbGV4aWNhbGx5IG5lc3Rl
ZCBzdGF0ZW1lbnQiKTsKKyAgICAgICAgLy9mYWlsSWZGYWxzZUlmU3RyaWN0KG1fc3RhdGVtZW50
RGVwdGggPT0gMSwgIlN0cmljdCBtb2RlIGRvZXMgbm90IGFsbG93IGZ1bmN0aW9uIGRlY2xhcmF0
aW9ucyBpbiBhIGxleGljYWxseSBuZXN0ZWQgc3RhdGVtZW50Iik7CiAgICAgICAgIHJlc3VsdCA9
IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTRU1JQ09MT046IHsKQEAgLTIxMjEsNiArMjEyMiw5IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggRnVuY3Rpb25NZXRhZGF0YU5vZGUqIGdldE1ldGFkYXRhKFBh
cnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorc3RhdGljIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBnZXRNZXRhZGF0YShQYXJz
ZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8pIHsgcmV0dXJuIGluZm8uYm9keTsgfQor
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEV4cG9ydFR5cGUgZXhwb3J0VHlwZSkKIHsKQEAg
LTIxMzcsNyArMjE0MSw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWUKICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25O
ZWVkc05hbWUsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJp
bmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVu
Y3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1
bmN0aW9uIik7CiAgICAgZmFpbElmRmFsc2UoZnVuY3Rpb25JbmZvLm5hbWUsICJGdW5jdGlvbiBz
dGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKIAotICAgIERlY2xhcmF0aW9uUmVzdWx0TWFz
ayBkZWNsYXJhdGlvblJlc3VsdCA9IGRlY2xhcmVWYXJpYWJsZShmdW5jdGlvbkluZm8ubmFtZSk7
CisgICAgc3RkOjpwYWlyPERlY2xhcmF0aW9uUmVzdWx0TWFzaywgU2NvcGVSZWY+IGZ1bmN0aW9u
RGVjbGFyYXRpb24gPSBkZWNsYXJlRnVuY3Rpb24oZnVuY3Rpb25JbmZvLm5hbWUpOworICAgIERl
Y2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGZ1bmN0aW9uRGVjbGFyYXRp
b24uZmlyc3Q7CiAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGRlY2xhcmF0aW9uUmVzdWx0ICYgRGVj
bGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlLCAiQ2Fubm90IGRlY2xhcmUgYSBmdW5j
dGlvbiBuYW1lZCAnIiwgZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaW4gc3RyaWN0IG1v
ZGUiKTsKICAgICBpZiAoZGVjbGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52
YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uKQogICAgICAgICBpbnRlcm5hbEZhaWxXaXRoTWVzc2Fn
ZShmYWxzZSwgIkNhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2Nv
bnN0L2NsYXNzIHZhcmlhYmxlICciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpbiBz
dHJpY3QgbW9kZSIpOwpAQCAtMjE0NSw3ICsyMTUwLDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShleHBvcnRO
YW1lKCpmdW5jdGlvbkluZm8ubmFtZSksICJDYW5ub3QgZXhwb3J0IGEgZHVwbGljYXRlIGZ1bmN0
aW9uIG5hbWU6ICciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyIpOwogICAgICAgICBj
dXJyZW50U2NvcGUoKS0+bW9kdWxlU2NvcGVEYXRhKCkuZXhwb3J0QmluZGluZygqZnVuY3Rpb25J
bmZvLm5hbWUpOwogICAgIH0KLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRl
bWVudChsb2NhdGlvbiwgZnVuY3Rpb25JbmZvKTsKKworICAgIFRyZWVTdGF0ZW1lbnQgcmVzdWx0
ID0gY29udGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgZnVuY3Rpb25JbmZv
KTsKKyAgICBpZiAoVHJlZUJ1aWxkZXI6OkNyZWF0ZXNBU1QpCisgICAgICAgIGZ1bmN0aW9uRGVj
bGFyYXRpb24uc2Vjb25kLT5hcHBlbmRGdW5jdGlvbihnZXRNZXRhZGF0YShmdW5jdGlvbkluZm8p
KTsKKyAgICAgICAgLy9mdW5jdGlvbkRlY2xhcmF0aW9uLnNlY29uZC0+YXBwZW5kRnVuY3Rpb24o
Z2V0TWV0YWRhdGEocmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTI3NjcsOCArMjc3NywxMSBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG9j
YWxOYW1lKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goRlVOQ1RJT04pKQorICAgICAgICAgICAg
aWYgKG1hdGNoKEZVTkNUSU9OKSkgeworICAgICAgICAgICAgICAgIERlcHRoTWFuYWdlciBzdGF0
ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZW1l
bnREZXB0aCA9IDE7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKGNvbnRleHQpOworICAgICAgICAgICAgfQogI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lO
VEFYKQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG1hdGNoKENM
QVNTVE9LRU4pKTsKQEAgLTI4NzgsOSArMjg5MSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oY29udGV4dCwgRGVjbGFyYXRpb25UeXBlOjpMZXREZWNsYXJhdGlvbiwgRXhwb3J0
VHlwZTo6RXhwb3J0ZWQpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBGVU5D
VElPTjoKKyAgICAgICAgY2FzZSBGVU5DVElPTjogeworICAgICAgICAgICAgRGVwdGhNYW5hZ2Vy
IHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKKyAgICAgICAgICAgIG1fc3RhdGVt
ZW50RGVwdGggPSAxOwogICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKGNvbnRleHQsIEV4cG9ydFR5cGU6OkV4cG9ydGVkKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKICAgICAgICAgY2FzZSBD
TEFTU1RPS0VOOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAxOTc3ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDMxIEBAIHN0cnVjdCBTY29wZSB7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xh
cmVGdW5jdGlvbihjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgYm9vbCBkZWNsYXJlQXNWYXIpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9hbGxvd3NWYXJEZWNsYXJhdGlvbnMgfHwgbV9hbGxvd3NM
ZXhpY2FsRGVjbGFyYXRpb25zKTsKKyAgICAgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIHJlc3Vs
dCA9IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZDsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0
TW9kZSA9ICFpc0V2YWxPckFyZ3VtZW50c0lkZW50aWZpZXIobV92bSwgaWRlbnQpOworICAgICAg
ICBtX2lzVmFsaWRTdHJpY3RNb2RlID0gbV9pc1ZhbGlkU3RyaWN0TW9kZSAmJiBpc1ZhbGlkU3Ry
aWN0TW9kZTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBkZWNsYXJlQXNWYXIgPyBtX2RlY2xh
cmVkVmFyaWFibGVzLmFkZChpZGVudC0+aW1wbCgpKSA6IG1fbGV4aWNhbFZhcmlhYmxlcy5hZGQo
aWRlbnQtPmltcGwoKSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0SXNG
dW5jdGlvbigpOworICAgICAgICBpZiAoZGVjbGFyZUFzVmFyKQorICAgICAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc1ZhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldElzTGV0KCk7CisgICAgICAgIGlmICghaXNW
YWxpZFN0cmljdE1vZGUpCisgICAgICAgICAgICByZXN1bHQgfD0gRGVjbGFyYXRpb25SZXN1bHQ6
OkludmFsaWRTdHJpY3RNb2RlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHZvaWQgYXBwZW5kRnVuY3Rpb24oRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG5vZGUpCisgICAgeyAK
KyAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zLmFw
cGVuZChub2RlKTsKKyAgICB9CisgICAgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sm
JiB0YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnMpOyB9CisgICAgCisKICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFy
ZUxleGljYWxWYXJpYWJsZShjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgYm9vbCBpc0NvbnN0YW50
LCBEZWNsYXJhdGlvbkltcG9ydFR5cGUgaW1wb3J0VHlwZSA9IERlY2xhcmF0aW9uSW1wb3J0VHlw
ZTo6Tm90SW1wb3J0ZWQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hbGxvd3NMZXhpY2FsRGVj
bGFyYXRpb25zKTsKQEAgLTY5MSw2ICs3MTYsNyBAQCBwcml2YXRlOgogICAgIElkZW50aWZpZXJT
ZXQgbV9jbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXM7CiAgICAgSWRlbnRpZmllclNldCBtX3dyaXR0
ZW5WYXJpYWJsZXM7CiAgICAgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4gbV9tb2R1bGVTY29wZURh
dGEgeyB9OworICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIG1fZnVuY3Rpb25E
ZWNsYXJhdGlvbnM7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxTY29wZSwgMTA+IFNjb3BlU3RhY2s7
CkBAIC05MjMsNiArOTQ5LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBTY29wZVJlZigm
bV9zY29wZVN0YWNrLCBpKTsKICAgICB9CiAKKyAgICBTY29wZVJlZiBjdXJyZW50TGV4aWNhbERl
Y2xhcmF0aW9uU2NvcGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaSA9IG1fc2NvcGVTdGFj
ay5zaXplKCkgLSAxOworICAgICAgICBBU1NFUlQoaSA8IG1fc2NvcGVTdGFjay5zaXplKCkpOwor
ICAgICAgICB3aGlsZSAoIW1fc2NvcGVTdGFja1tpXS5hbGxvd3NMZXhpY2FsRGVjbGFyYXRpb25z
KCkpIHsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgbV9zY29wZVN0
YWNrLnNpemUoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU2NvcGVSZWYoJm1fc2Nv
cGVTdGFjaywgaSk7CisgICAgfQorCiAgICAgU2NvcGVSZWYgY3VycmVudEZ1bmN0aW9uU2NvcGUo
KQogICAgIHsKICAgICAgICAgdW5zaWduZWQgaSA9IG1fc2NvcGVTdGFjay5zaXplKCkgLSAxOwpA
QCAtOTU5LDcgKzk5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc2NvcGVTdGFjay5hcHBlbmQo
U2NvcGUobV92bSwgaXNGdW5jdGlvbiwgaXNHZW5lcmF0b3IsIGlzU3RyaWN0LCBpc0Fycm93RnVu
Y3Rpb24pKTsKICAgICAgICAgcmV0dXJuIGN1cnJlbnRTY29wZSgpOwogICAgIH0KLSAgICAKKwog
ICAgIHZvaWQgcG9wU2NvcGVJbnRlcm5hbChTY29wZVJlZiYgc2NvcGUsIGJvb2wgc2hvdWxkVHJh
Y2tDbG9zZWRWYXJpYWJsZXMpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBz
Y29wZS5pbmRleCgpID09IG1fc2NvcGVTdGFjay5zaXplKCkgLSAxKTsKQEAgLTEwMDEsMjIgKzEw
MzksMjcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHR5cGUgPT0gRGVjbGFyYXRpb25UeXBlOjpW
YXJEZWNsYXJhdGlvbikKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFyaWFibGVTY29wZSgp
LT5kZWNsYXJlVmFyaWFibGUoaWRlbnQpOwogCi0gICAgICAgIHVuc2lnbmVkIGkgPSBtX3Njb3Bl
U3RhY2suc2l6ZSgpIC0gMTsKLSAgICAgICAgQVNTRVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgp
KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRGVjbGFyYXRpb25UeXBlOjpMZXREZWNsYXJhdGlv
biB8fCB0eXBlID09IERlY2xhcmF0aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlvbik7Ci0KLSAgICAg
ICAgLy8gTGV4aWNhbCB2YXJpYWJsZXMgZGVjbGFyZWQgYXQgYSB0b3AgbGV2ZWwgc2NvcGUgdGhh
dCBzaGFkb3cgYXJndW1lbnRzIG9yIHZhcnMgYXJlIG5vdCBhbGxvd2VkLgogICAgICAgICBpZiAo
bV9zdGF0ZW1lbnREZXB0aCA9PSAxICYmIChoYXNEZWNsYXJlZFBhcmFtZXRlcigqaWRlbnQpIHx8
IGhhc0RlY2xhcmVkVmFyaWFibGUoKmlkZW50KSkpCiAgICAgICAgICAgICByZXR1cm4gRGVjbGFy
YXRpb25SZXN1bHQ6OkludmFsaWREdXBsaWNhdGVEZWNsYXJhdGlvbjsKIAotICAgICAgICB3aGls
ZSAoIW1fc2NvcGVTdGFja1tpXS5hbGxvd3NMZXhpY2FsRGVjbGFyYXRpb25zKCkpIHsKLSAgICAg
ICAgICAgIGktLTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9zY29wZVN0YWNrLnNpemUoKSk7
CisgICAgICAgIHJldHVybiBjdXJyZW50TGV4aWNhbERlY2xhcmF0aW9uU2NvcGUoKS0+ZGVjbGFy
ZUxleGljYWxWYXJpYWJsZShpZGVudCwgdHlwZSA9PSBEZWNsYXJhdGlvblR5cGU6OkNvbnN0RGVj
bGFyYXRpb24sIGltcG9ydFR5cGUpOworICAgIH0KKworICAgIHN0ZDo6cGFpcjxEZWNsYXJhdGlv
blJlc3VsdE1hc2ssIFNjb3BlUmVmPiBkZWNsYXJlRnVuY3Rpb24oY29uc3QgSWRlbnRpZmllciog
aWRlbnQpCisgICAgeworICAgICAgICBpZiAoIXN0cmljdE1vZGUoKSB8fCBtX3N0YXRlbWVudERl
cHRoID09IDEpIHsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9ucyBnZXQgZGVjbGFyZWQgYXQgdGhl
IHRvcC1tb3N0IHNjb3BlLgorICAgICAgICAgICAgYm9vbCBkZWNsYXJlQXNWYXIgPSB0cnVlOwor
ICAgICAgICAgICAgU2NvcGVSZWYgdmFyaWFibGVTY29wZSA9IGN1cnJlbnRWYXJpYWJsZVNjb3Bl
KCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodmFyaWFibGVTY29wZS0+ZGVj
bGFyZUZ1bmN0aW9uKGlkZW50LCBkZWNsYXJlQXNWYXIpLCB2YXJpYWJsZVNjb3BlKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHJldHVybiBtX3Njb3BlU3RhY2tbaV0uZGVjbGFyZUxleGljYWxWYXJp
YWJsZShpZGVudCwgdHlwZSA9PSBEZWNsYXJhdGlvblR5cGU6OkNvbnN0RGVjbGFyYXRpb24sIGlt
cG9ydFR5cGUpOworICAgICAgICBib29sIGRlY2xhcmVBc1ZhciA9IGZhbHNlOworICAgICAgICBT
Y29wZVJlZiBsZXhpY2FsVmFyaWFibGVTY29wZSA9IGN1cnJlbnRMZXhpY2FsRGVjbGFyYXRpb25T
Y29wZSgpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobGV4aWNhbFZhcmlhYmxlU2Nv
cGUtPmRlY2xhcmVGdW5jdGlvbihpZGVudCwgZGVjbGFyZUFzVmFyKSwgbGV4aWNhbFZhcmlhYmxl
U2NvcGUpOwogICAgIH0KLSAgICAKKwogICAgIE5FVkVSX0lOTElORSBib29sIGhhc0RlY2xhcmVk
VmFyaWFibGUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgewogICAgICAgICB1bnNpZ25l
ZCBpID0gbV9zY29wZVN0YWNrLnNpemUoKSAtIDE7CkBAIC0xMDYxLDcgKzExMDQsNyBAQCBwcml2
YXRlOgogICAgIFBhcnNlcigpOwogICAgIFN0cmluZyBwYXJzZUlubmVyKGNvbnN0IElkZW50aWZp
ZXImLCBTb3VyY2VQYXJzZU1vZGUpOwogCi0gICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJj
ZUVsZW1lbnRzKiwgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smLCBWYXJpYWJsZUVu
dmlyb25tZW50JiwgQ29kZUZlYXR1cmVzLCBpbnQpOworICAgIHZvaWQgZGlkRmluaXNoUGFyc2lu
ZyhTb3VyY2VFbGVtZW50cyosIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiYsIFZh
cmlhYmxlRW52aXJvbm1lbnQmLCBDb2RlRmVhdHVyZXMsIGludCk7CiAKICAgICAvLyBVc2VkIHRv
IGRldGVybWluZSB0eXBlIG9mIGVycm9yIHRvIHJlcG9ydC4KICAgICBib29sIGlzRnVuY3Rpb25N
ZXRhZGF0YU5vZGUoU2NvcGVOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NDMsNyArMTU4
Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbHVtbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdURk1vdmUobV9mdW5jRGVjbGFyYXRpb25zKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5maW5hbGl6ZUxleGljYWxF
bnZpcm9ubWVudCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJh
bWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1fc291cmNlLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJl
dmlzaW9uIDE5Nzc4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hl
Y2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiWWFyclN5
bnRheENoZWNrZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNsYXNzIFN5bnRheENo
ZWNrZXIgewogcHVibGljOgogICAgIHN0cnVjdCBCaW5hcnlFeHByQ29udGV4dCB7CkBAIC0yMzAs
NyArMjMwLDcgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tl
cj4mKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQ2xhc3NEZWNs
U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIENsYXNzRXhwcmVzc2lvbiwKICAgICAg
ICAgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGludCwgaW50
KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBpbnQgY3JlYXRlQmxvY2tTdGF0ZW1l
bnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgVmFyaWFibGVFbnZpcm9u
bWVudCYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQorICAgIGludCBjcmVhdGVCbG9ja1N0
YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBWYXJpYWJsZUVu
dmlyb25tZW50JiwgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smJikgeyByZXR1cm4g
U3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9
CiAgICAgaW50IGNyZWF0ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0
ZUlmU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwg
aW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KQEAgLTI0NSw3ICsyNDUsNyBAQCBwdWJs
aWM6CiAgICAgaW50IGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRl
Q29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmll
ciosIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRl
VHJ5U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwg
aW50LCBpbnQsIFZhcmlhYmxlRW52aXJvbm1lbnQmKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7
IH0KLSAgICBpbnQgY3JlYXRlU3dpdGNoU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFZhcmlhYmxlRW52aXJvbm1lbnQmKSB7IHJl
dHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlU3dpdGNoU3RhdGVtZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFZhcmlh
YmxlRW52aXJvbm1lbnQmLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYmKSB7IHJl
dHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlV2hpbGVTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1l
bnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlV2l0aFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRS
ZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRG9XaGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmly
b25tZW50LmgJKHJldmlzaW9uIDE5Nzc4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFeHBvcnRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0cyAmIElzRXhwb3J0ZWQ7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJbXBv
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAmIElzSW1wb3J0ZWQ7IH0KICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNJbXBvcnRlZE5hbWVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAm
IElzSW1wb3J0ZWROYW1lc3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyAmIElzRnVuY3Rpb247IH0KIAogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXRJc0NhcHR1cmVkKCkgeyBtX2JpdHMgfD0gSXNDYXB0dXJlZDsgfQogICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJc0NvbnN0KCkgeyBtX2JpdHMgfD0gSXNDb25zdDsgfQpA
QCAtNDgsMTggKzQ5LDIwIEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SXNF
eHBvcnRlZCgpIHsgbV9iaXRzIHw9IElzRXhwb3J0ZWQ7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0SXNJbXBvcnRlZCgpIHsgbV9iaXRzIHw9IElzSW1wb3J0ZWQ7IH0KICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0SXNJbXBvcnRlZE5hbWVzcGFjZSgpIHsgbV9iaXRzIHw9IElzSW1wb3J0
ZWROYW1lc3BhY2U7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SXNGdW5jdGlvbigpIHsg
bV9iaXRzIHw9IElzRnVuY3Rpb247IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcklz
VmFyKCkgeyBtX2JpdHMgJj0gfklzVmFyOyB9CiAKIHByaXZhdGU6Ci0gICAgZW51bSBUcmFpdHMg
eworICAgIGVudW0gVHJhaXRzIDogdWludDhfdCB7CiAgICAgICAgIElzQ2FwdHVyZWQgPSAxIDw8
IDAsCiAgICAgICAgIElzQ29uc3QgPSAxIDw8IDEsCiAgICAgICAgIElzVmFyID0gMSA8PCAyLAog
ICAgICAgICBJc0xldCA9IDEgPDwgMywKICAgICAgICAgSXNFeHBvcnRlZCA9IDEgPDwgNCwKICAg
ICAgICAgSXNJbXBvcnRlZCA9IDEgPDwgNSwKLSAgICAgICAgSXNJbXBvcnRlZE5hbWVzcGFjZSA9
IDEgPDwgNgorICAgICAgICBJc0ltcG9ydGVkTmFtZXNwYWNlID0gMSA8PCA2LAorICAgICAgICBJ
c0Z1bmN0aW9uID0gMSA8PCA3CiAgICAgfTsKICAgICB1aW50OF90IG1fYml0cyB7IDAgfTsKIH07
CkBAIC03Miw2ICs3NSwxNSBAQCBjbGFzcyBWYXJpYWJsZUVudmlyb25tZW50IHsKIHByaXZhdGU6
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFZhcmlhYmxl
RW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVu
aXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFpdHM+IE1h
cDsKIHB1YmxpYzoKKyAgICBWYXJpYWJsZUVudmlyb25tZW50KCkKKyAgICB7IH0KKyAgICBWYXJp
YWJsZUVudmlyb25tZW50KFZhcmlhYmxlRW52aXJvbm1lbnQmJiBvdGhlcikKKyAgICAgICAgOiBt
X21hcChXVEZNb3ZlKG90aGVyLm1fbWFwKSkKKyAgICAgICAgLCBtX2lzRXZlcnl0aGluZ0NhcHR1
cmVkKG90aGVyLm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQpCisgICAgeyB9CisgICAgVmFyaWFibGVF
bnZpcm9ubWVudChjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBvdGhlcikgPSBkZWZhdWx0Owor
ICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIG9wZXJhdG9yPShjb25zdCBWYXJpYWJsZUVudmlyb25t
ZW50JiBvdGhlcikgPSBkZWZhdWx0OworCiAgICAgQUxXQVlTX0lOTElORSBNYXA6Oml0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQogICAgIEFMV0FZU19JTkxJTkUgTWFw
OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgTWFwOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2lu
KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273480</attachid>
            <date>2016-03-09 14:30:56 -0800</date>
            <delta_ts>2016-03-09 14:36:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>82558</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MyBA
QAorMjAxNi0wMy0wOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBFUzY6IEltcGxlbWVudCBsZXhpY2FsIHNjb3BpbmcgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25z
IGluIHN0cmljdCBtb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI4NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYmxvY2sgc2NvcGluZyBmb3IgZnVuY3Rpb24g
ZGVmaW5pdGlvbnMKKyAgICAgICAgaW4gc3RyaWN0IG1vZGUuIFRoZSBpbXBsZW1lbnRhdGlvbiB3
b3JrcyBhcyBmb2xsb3dzOgorICAgICAgICAKKyAgICAgICAgLSBJZiB3ZSdyZSBpbiBzbG9wcHkg
bW9kZSwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdvcmsgZXhhY3RseQorICAgICAgICAgIGFzIHRo
ZXkgZGlkIGJlZm9yZSB0aGlzIHBhdGNoLiBJLmUsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUg
aG9pc3RlZAorICAgICAgICAgIGFuZCBkZWNsYXJlZCBsaWtlICJ2YXIiIHZhcmlhYmxlcy4KKyAg
ICAgICAgCisgICAgICAgIC0gSWYgeW91J3JlIGluIHN0cmljdCBtb2RlIGFuZCBhdCB0aGUgdG9w
IG9mIGEgZnVuY3Rpb24gc2NvcGUgb3IgcHJvZ3JhbQorICAgICAgICAgIHNjb3BlLCBmdW5jdGlv
biBkZWNsYXJhdGlvbnMgc3RpbGwgd29yayBsaWtlIHRoZXkgdXNlZCB0by4gVGhleSBhcmUgZGVm
aW5lZAorICAgICAgICAgIGxpa2UgInZhciIgdmFyaWFibGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBm
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICBiZWNhdXNlIEVTNSBzdHJpY3Qg
bW9kZSBhbGxvd2VkIGR1cGxpY2F0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlCisgICAg
ICAgICAgdG9wLW1vc3Qgc2NvcGUgb2YgYSBwcm9ncmFtL2Z1bmN0aW9uLgorICAgICAgICAKKyAg
ICAgICAgLSBJZiB5b3UncmUgaW4gc3RyaWN0IG1vZGUgYW5kIGluc2lkZSBhIGJsb2NrIHN0YXRl
bWVudCBvciBhIHN3aXRjaCBzdGF0ZW1lbnQsCisgICAgICAgICAgZnVuY3Rpb24gZGVjbGFyYXRp
b25zIGFyZSBub3cgYmxvY2sgc2NvcGVkLiBBbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdpdGhp
bgorICAgICAgICAgIGEgYmxvY2sgYXJlIGhvaXN0ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg
YmxvY2suIFRoZXkgYXJlIG5vdCBob2lzdGVkIG91dCBvZiB0aGUgCisgICAgICAgICAgYmxvY2sg
bGlrZSB0aGV5IGFyZSBpbiBzbG9wcHkgbW9kZS4gVGhpcyBhbGxvd3MgZm9yIHRoZSBmb2xsb3dp
bmcgdHlwZXMgb2YKKyAgICAgICAgICBwcm9ncmFtczoKKyAgICAgICAgICBgYGAKKyAgICAgICAg
ICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgICAgICAgIGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJu
IDIwOyB9CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJhcigp
IHsgcmV0dXJuIDMwOyB9CisgICAgICAgICAgICAgICAgICBiYXIoKTsgLy8gMzAKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICBiYXIoKTsgLy8gMjAKKyAgICAgICAgICB9CisgICAgICAg
ICAgYGBgCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5zdGFudGlhdGVMZXhpY2FsVmFyaWFibGVz
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcmVmaWxsU3RhY2tURFpW
YXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaExleGljYWxT
Y29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3Bl
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cExleGljYWxTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpsaWZ0VERa
Q2hlY2tJZlBvc3NpYmxlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hU
RFpWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2V0VmFyaWFi
bGVzVW5kZXJURFopOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld1Jl
Z0V4cCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25F
eHByZXNzaW9uQ29tbW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdGdW5jdGlvbkV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAg
ICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTb3VyY2VFbGVtZW50cyk6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6OmZlYXR1cmVzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6bnVt
Q29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY0RlY2xTdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVDbGFzc0RlY2xTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCbG9ja1N0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRyeVN0YXRlbWVudCk6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN3aXRjaFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFT
VEJ1aWxkZXI6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmZ1bmNE
ZWNsYXJhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
Lmg6CisgICAgICAgIChKU0M6OkNhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUpOgorICAgICAg
ICAoSlNDOjpTd2l0Y2hOb2RlOjpTd2l0Y2hOb2RlKToKKyAgICAgICAgKEpTQzo6QmxvY2tOb2Rl
OjpCbG9ja05vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OlNjb3BlTm9kZTo6U2NvcGVOb2RlKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpzaW5nbGVT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgorICAg
ICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUpOgorICAgICAg
ICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5vZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6
OkZ1bmN0aW9uTm9kZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRW52aXJvbm1lbnROb2RlOjpW
YXJpYWJsZUVudmlyb25tZW50Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAg
ICAgIChKU0M6OlZhcmlhYmxlRW52aXJvbm1lbnROb2RlOjpWYXJpYWJsZUVudmlyb25tZW50Tm9k
ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRW52aXJvbm1lbnROb2RlOjpsZXhpY2FsVmFyaWFi
bGVzKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVFbnZpcm9ubWVudE5vZGU6OmZ1bmN0aW9uU3Rh
Y2spOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OmNhcHR1cmVzKToKKyAgICAgICAgKEpTQzo6
U2NvcGVOb2RlOjp2YXJEZWNsYXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6Om5l
ZWRlZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpzdGFydENvbHVtbik6
CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbmRDb2x1bW4pOgorICAgICAgICAoSlNDOjpF
dmFsTm9kZTo6c3RhcnRDb2x1bW4pOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6ZW5kQ29sdW1u
KToKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbU5vZGU6OnN0YXJ0Q29sdW1uKToKKyAgICAg
ICAgKEpTQzo6TW9kdWxlUHJvZ3JhbU5vZGU6OmVuZENvbHVtbik6CisgICAgICAgIChKU0M6OlNj
b3BlTm9kZTo6ZnVuY3Rpb25TdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogcGFyc2VyL1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OmRpZEZpbmlzaFBhcnNpbmcpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN3aXRjaFN0YXRlbWVudCk6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJsb2NrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6
Z2V0TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
RXhwb3J0RGVjbGFyYXRpb24pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAg
KEpTQzo6U2NvcGU6OmRlY2xhcmVWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OlNjb3BlOjpkZWNs
YXJlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpTY29wZTo6YXBwZW5kRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpTY29wZTo6dGFrZUZ1bmN0aW9uRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEpT
Qzo6U2NvcGU6OmRlY2xhcmVMZXhpY2FsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OmN1cnJlbnRWYXJpYWJsZVNjb3BlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpjdXJyZW50TGV4
aWNhbERlY2xhcmF0aW9uU2NvcGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmN1cnJlbnRGdW5j
dGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwdXNoU2NvcGUpOgorICAgICAgICAo
SlNDOjpQYXJzZXI6OnBvcFNjb3BlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmRl
Y2xhcmVWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFyZUZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6UGFyc2VyOjpoYXNEZWNsYXJlZFZhcmlhYmxlKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjppc0Z1bmN0aW9uTWV0YWRhdGFOb2RlKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgor
ICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVGdW5jRGVjbFN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudCk6Cisg
ICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUJsb2NrU3RhdGVtZW50KToKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRXhwclN0YXRlbWVudCk6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUlmU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6U3lu
dGF4Q2hlY2tlcjo6Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50
YXhDaGVja2VyOjpjcmVhdGVUcnlTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVj
a2VyOjpjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpjcmVhdGVXaGlsZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNy
ZWF0ZVdpdGhTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVE
b1doaWxlU3RhdGVtZW50KToKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5o
OgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OmlzRXhwb3J0ZWQpOgor
ICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OmlzSW1wb3J0ZWQpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OmlzSW1wb3J0ZWROYW1lc3BhY2Up
OgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OmlzRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OnNldElzQ2FwdHVyZWQpOgor
ICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OnNldElzQ29uc3QpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OnNldElzRXhwb3J0ZWQpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OnNldElzSW1wb3J0ZWQpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OnNldElzSW1wb3J0ZWROYW1lc3Bh
Y2UpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OnNldElzRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OmNsZWFySXNWYXIp
OgorICAgICAgICAoSlNDOjpWYXJpYWJsZUVudmlyb25tZW50OjpWYXJpYWJsZUVudmlyb25tZW50
KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVFbnZpcm9ubWVudDo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpWYXJpYWJsZUVudmlyb25tZW50OjplbmQpOgorICAgICAgICAqIHRlc3RzL2VzNi55YW1s
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9ibG9jay1zY29wZWQtZnVuY3Rpb24tZGVjbGFyYXRp
b25zLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0KToKKyAgICAg
ICAgKGYuZm9vLmJhcik6CisgICAgICAgIChmLmZvby4pOgorICAgICAgICAoZi5mb28pOgorICAg
ICAgICAoZik6CisgICAgICAgIChhc3NlcnQuZm9vLik6CisgICAgICAgIChhc3NlcnQuZm9vKToK
KyAgICAgICAgKGFzc2VydC5mb28uZm9vKToKKyAgICAgICAgKGFzc2VydC5mb28uYmFyKToKKyAg
ICAgICAgKGFzc2VydC5mb28uc3dpdGNoLmNhc2UuMSk6CisgICAgICAgIChhc3NlcnQuZm9vLnN3
aXRjaC5jYXNlLjIpOgorICAgICAgICAoYXNzZXJ0LmZvby5zd2l0Y2guZm9vKToKKyAgICAgICAg
KGFzc2VydC5mb28uc3dpdGNoLmJhcik6CisKIDIwMTYtMDMtMDkgIE9saXZlciBIdW50ICA8b2xp
dmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggb2xkIGlPUwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDE5Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjYsNyArNTY2LDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgLy8gQWxs
ICJhZGRWYXIoKSJzIG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgImluaXRpYWxpemVEZWZhdWx0UGFy
YW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soKSIgaXMgY2FsbGVkCiAgICAg
Ly8gYmVjYXVzZSBhIGZ1bmN0aW9uJ3MgZGVmYXVsdCBwYXJhbWV0ZXIgRXhwcmVzc2lvbk5vZGVz
IHdpbGwgdXNlIHRlbXBvcmFyeSByZWdpc3RlcnMuCi0gICAgbV9URFpTdGFjay5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoKnBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBmYWxzZSkpOworICAgIHB1c2hU
RFpWYXJpYWJsZXMoKnBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlv
bjo6RG9Ob3RPcHRpbWl6ZSk7CiAgICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNB
bmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayhwYXJhbWV0ZXJzLCBmdW5jdGlvbk5vZGUsIGZ1bmN0
aW9uU3ltYm9sVGFibGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY2FwdHVyZXMpOwogICAg
IAogICAgIC8vIExvYWRpbmcgfHRoaXN8IGluc2lkZSBhbiBhcnJvdyBmdW5jdGlvbiBtdXN0IGJl
IGRvbmUgYWZ0ZXIgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0
aW9uU2NvcGVTdGFjaygpCkBAIC01ODIsNyArNTgyLDggQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBlbWl0UHV0RGVyaXZlZENvbnN0cnVjdG9yVG9B
cnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7CiAgICAgfQogCi0gICAgcHVzaExleGljYWxTY29w
ZShtX3Njb3BlTm9kZSwgVERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplKTsKKyAgICBib29s
IHNob3VsZEluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucyA9IGZhbHNlOyAvLyBXZSBnZW5l
cmF0ZSB0b3AtbGV2ZWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIDo6Z2VuZXJhdGUoKS4KKyAg
ICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCBURFpDaGVja09wdGltaXphdGlvbjo6T3B0
aW1pemUsIE5lc3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0ZWQsIG51bGxwdHIsIHNob3VsZEluaXRp
YWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucyk7CiB9CiAKIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9k
ZSBwcm9maWxlck1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERa
VmFyaWFibGVzKQpAQCAtNjIzLDcgKzYyNCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKICAgICB9CiAgICAgY29kZUJsb2NrLT5hZG9wdFZhcmlhYmxlcyh2YXJp
YWJsZXMpOwogCi0gICAgbV9URFpTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoKnBhcmVudFNj
b3BlVERaVmFyaWFibGVzLCBmYWxzZSkpOworICAgIHB1c2hURFpWYXJpYWJsZXMoKnBhcmVudFNj
b3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRpbWl6ZSk7CiAK
ICAgICBpZiAoY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgJiYgZXZhbE5vZGUt
PnVzZXNUaGlzKCkpCiAgICAgICAgIGVtaXRMb2FkVGhpc0Zyb21BcnJvd0Z1bmN0aW9uTGV4aWNh
bEVudmlyb25tZW50KCk7CkBAIC02MzMsNyArNjM0LDggQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBlbWl0UHV0VGhpc1RvQXJyb3dGdW5jdGlvbkNv
bnRleHRTY29wZSgpOwogICAgIH0KICAgICAKLSAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVO
b2RlLCBURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUpOworICAgIGJvb2wgc2hvdWxkSW5p
dGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRvcC1s
ZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gOjpnZW5lcmF0ZSgpLgorICAgIHB1c2hMZXhp
Y2FsU2NvcGUobV9zY29wZU5vZGUsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVz
dGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2Nr
U2NvcGVkRnVuY3Rpb25zKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFZNJiB2bSwgTW9kdWxlUHJvZ3JhbU5vZGUqIG1vZHVsZVByb2dyYW1Ob2RlLCBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVu
dCogcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpCkBAIC03MTUsOCArNzE3LDkgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGVsc2UKICAgICAgICAgY29uc3Rh
bnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUobW9kdWxlRW52aXJvbm1lbnRTeW1ib2xU
YWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKIAotICAgIG1fVERaU3RhY2suYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKGxleGljYWxWYXJpYWJsZXMsIHRydWUpKTsKLSAgICBtX3N5bWJvbFRhYmxl
U3RhY2suYXBwZW5kKFN5bWJvbFRhYmxlU3RhY2tFbnRyeSB7IFN0cm9uZzxTeW1ib2xUYWJsZT4o
Km1fdm0sIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUpLCBtX3RvcE1vc3RTY29wZSwgZmFs
c2UsIGNvbnN0YW50U3ltYm9sVGFibGUtPmluZGV4KCkgfSk7CisgICAgcHVzaFREWlZhcmlhYmxl
cyhsZXhpY2FsVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUpOworICAg
IGJvb2wgaXNXaXRoU2NvcGUgPSBmYWxzZTsKKyAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5k
KFN5bWJvbFRhYmxlU3RhY2tFbnRyeSB7IFN0cm9uZzxTeW1ib2xUYWJsZT4oKm1fdm0sIG1vZHVs
ZUVudmlyb25tZW50U3ltYm9sVGFibGUpLCBtX3RvcE1vc3RTY29wZSwgaXNXaXRoU2NvcGUsIGNv
bnN0YW50U3ltYm9sVGFibGUtPmluZGV4KCkgfSk7CiAgICAgZW1pdFByZWZpbGxTdGFja1REWlZh
cmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKTsK
IAogICAgIC8vIG1ha2VGdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlcmUncyBjb3JyZWN0IFREWiBz
dGFjayBlbnRyaWVzLgpAQCAtMTc0Miw3ICsxNzQ1LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRv
cjo6aW5zdGFudGlhdGVMZXhpYwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBs
ZXhpY2FsVmFyaWFibGVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZW50cnkudmFsdWUuaXNMZXQo
KSB8fCBlbnRyeS52YWx1ZS5pc0NvbnN0KCkpOworICAgICAgICAgICAgQVNTRVJUKGVudHJ5LnZh
bHVlLmlzTGV0KCkgfHwgZW50cnkudmFsdWUuaXNDb25zdCgpIHx8IGVudHJ5LnZhbHVlLmlzRnVu
Y3Rpb24oKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LnZhbHVlLmlzVmFyKCkpOwogICAg
ICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBzeW1ib2xUYWJsZUVudHJ5ID0gc3ltYm9sVGFibGUt
PmdldChsb2NrZXIsIGVudHJ5LmtleS5nZXQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3ltYm9s
VGFibGVFbnRyeS5pc051bGwoKSk7CkBAIC0xNzg5LDYgKzE3OTIsOSBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHJlZmlsbFN0YWNrCiAgICAgICAgIGlmIChlbnRyeS52YWx1ZS5pc0lt
cG9ydGVkKCkgJiYgIWVudHJ5LnZhbHVlLmlzSW1wb3J0ZWROYW1lc3BhY2UoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCisgICAgICAgIGlmIChlbnRyeS52YWx1ZS5pc0Z1bmN0aW9uKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IHN5bWJvbFRh
YmxlRW50cnkgPSBzeW1ib2xUYWJsZS0+Z2V0KGVudHJ5LmtleS5nZXQoKSk7CiAgICAgICAgIEFT
U0VSVCghc3ltYm9sVGFibGVFbnRyeS5pc051bGwoKSk7CiAgICAgICAgIFZhck9mZnNldCBvZmZz
ZXQgPSBzeW1ib2xUYWJsZUVudHJ5LnZhck9mZnNldCgpOwpAQCAtMTgwMCwxMCArMTgwNiwxNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHJlZmlsbFN0YWNrCiAgICAgfQogfQogCi12
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlKFZhcmlhYmxlRW52aXJvbm1l
bnROb2RlKiBub2RlLCBURFpDaGVja09wdGltaXphdGlvbiB0ZHpDaGVja09wdGltaXphdGlvbiwg
TmVzdGVkU2NvcGVUeXBlIG5lc3RlZFNjb3BlVHlwZSwgUmVnaXN0ZXJJRCoqIGNvbnN0YW50U3lt
Ym9sVGFibGVSZXN1bHQpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3Bl
KFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKiBub2RlLCBURFpDaGVja09wdGltaXphdGlvbiB0ZHpD
aGVja09wdGltaXphdGlvbiwgTmVzdGVkU2NvcGVUeXBlIG5lc3RlZFNjb3BlVHlwZSwgUmVnaXN0
ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQsIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJs
b2NrU2NvcGVkRnVuY3Rpb25zKQogewogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25t
ZW50ID0gbm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpOwotICAgIHB1c2hMZXhpY2FsU2NvcGVJbnRl
cm5hbChlbnZpcm9ubWVudCwgdGR6Q2hlY2tPcHRpbWl6YXRpb24sIG5lc3RlZFNjb3BlVHlwZSwg
Y29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCwgVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaLCBTY29w
ZVR5cGU6OkxldENvbnN0U2NvcGUsIFNjb3BlUmVnaXN0ZXJUeXBlOjpCbG9jayk7CisgICAgUmVn
aXN0ZXJJRCogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdFRlbXAgPSBudWxscHRyOworICAgIHB1
c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChlbnZpcm9ubWVudCwgdGR6Q2hlY2tPcHRpbWl6YXRpb24s
IG5lc3RlZFNjb3BlVHlwZSwgJmNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHRUZW1wLCBURFpSZXF1
aXJlbWVudDo6VW5kZXJURFosIFNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgU2NvcGVSZWdpc3Rl
clR5cGU6OkJsb2NrKTsKKworICAgIGlmIChzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5j
dGlvbnMpCisgICAgICAgIGluaXRpYWxpemVCbG9ja1Njb3BlZEZ1bmN0aW9ucyhlbnZpcm9ubWVu
dCwgbm9kZS0+ZnVuY3Rpb25TdGFjaygpLCBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0VGVtcCk7
CisKKyAgICBpZiAoY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCAmJiBjb25zdGFudFN5bWJvbFRh
YmxlUmVzdWx0VGVtcCkKKyAgICAgICAgKmNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQgPSBjb25z
dGFudFN5bWJvbFRhYmxlUmVzdWx0VGVtcDsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaExleGljYWxTY29wZUludGVybmFsKFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50
LCBURFpDaGVja09wdGltaXphdGlvbiB0ZHpDaGVja09wdGltaXphdGlvbiwgTmVzdGVkU2NvcGVU
eXBlIG5lc3RlZFNjb3BlVHlwZSwKQEAgLTE4NjksMTUgKzE4ODIsNjkgQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6cHVzaExleGljYWxTY29wZQogICAgICAgICBwdXNoU2NvcGVkQ29udHJvbEZs
b3dDb250ZXh0KCk7CiAgICAgfQogCi0gICAgbV9zeW1ib2xUYWJsZVN0YWNrLmFwcGVuZChTeW1i
b2xUYWJsZVN0YWNrRW50cnl7IHN5bWJvbFRhYmxlLCBuZXdTY29wZSwgZmFsc2UsIHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCB9KTsKLSAgICBib29sIGNhbk9wdGltaXplVERaQ2hlY2tzID0gdGR6
Q2hlY2tPcHRpbWl6YXRpb24gPT0gVERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplOworICAg
IGJvb2wgaXNXaXRoU2NvcGUgPSBmYWxzZTsKKyAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5k
KFN5bWJvbFRhYmxlU3RhY2tFbnRyeXsgc3ltYm9sVGFibGUsIG5ld1Njb3BlLCBpc1dpdGhTY29w
ZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4IH0pOwogICAgIGlmICh0ZHpSZXF1aXJlbWVudCA9
PSBURFpSZXF1aXJlbWVudDo6VW5kZXJURFopCi0gICAgICAgIG1fVERaU3RhY2suYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKGVudmlyb25tZW50LCBjYW5PcHRpbWl6ZVREWkNoZWNrcykpOworICAgICAg
ICBwdXNoVERaVmFyaWFibGVzKGVudmlyb25tZW50LCB0ZHpDaGVja09wdGltaXphdGlvbik7CiAK
ICAgICBpZiAodGR6UmVxdWlyZW1lbnQgPT0gVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaKQogICAg
ICAgICBlbWl0UHJlZmlsbFN0YWNrVERaVmFyaWFibGVzKGVudmlyb25tZW50LCBzeW1ib2xUYWJs
ZS5nZXQoKSk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVCbG9ja1Nj
b3BlZEZ1bmN0aW9ucyhWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCwgRnVuY3Rpb25T
dGFjayYgZnVuY3Rpb25TdGFjaywgUmVnaXN0ZXJJRCogY29uc3RhbnRTeW1ib2xUYWJsZSkKK3sK
KyAgICAvKgorICAgICAqIFdlIGNhbiB0cmFuc2Zvcm0gYmxvY2sgc2NvcGVkIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9ucyBpbiBzdHJpY3QgbW9kZSBsaWtlIHNvOgorICAgICAqCisgICAgICogZnVuY3Rp
b24gZm9vKCkgeworICAgICAqICAgICBpZiAoYykgeworICAgICAqICAgICAgICAgICBmdW5jdGlv
biBmb28oKSB7IC4uLiB9CisgICAgICogICAgICAgICAgIGlmIChiYXIpIHsgLi4uIH0KKyAgICAg
KiAgICAgICAgICAgZWxzZSB7IC4uLiB9CisgICAgICogICAgICAgICAgIGZ1bmN0aW9uIGJheigp
IHsgLi4uIH0KKyAgICAgKiAgICAgfQorICAgICAqIH0KKyAgICAgKgorICAgICAqIHRvOgorICAg
ICAqCisgICAgICogZnVuY3Rpb24gZm9vKCkgeworICAgICAqICAgICBpZiAoYykgeworICAgICAq
ICAgICAgICAgbGV0IGZvbyA9IGZ1bmN0aW9uIGZvbygpIHsgLi4uIH0KKyAgICAgKiAgICAgICAg
IGxldCBiYXogPSBmdW5jdGlvbiBiYXooKSB7IC4uLiB9CisgICAgICogICAgICAgICBpZiAoYmFy
KSB7IC4uLiB9CisgICAgICogICAgICAgICBlbHNlIHsgLi4uIH0KKyAgICAgKiAgICAgfQorICAg
ICAqIH0KKyAgICAgKiAKKyAgICAgKiBCdXQgd2l0aG91dCB0aGUgVERaIGNoZWNrcy4KKyAgICAq
LworCisgICAgaWYgKCFlbnZpcm9ubWVudC5zaXplKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWZ1bmN0aW9uU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghZnVuY3Rpb25TdGFjay5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fc3ltYm9sVGFibGVTdGFjay5sYXN0KCkubV9zeW1ib2xU
YWJsZS5nZXQoKTsKKyAgICBSZWdpc3RlcklEKiBzY29wZSA9IG1fc3ltYm9sVGFibGVTdGFjay5s
YXN0KCkubV9zY29wZTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFy
eSgpOworICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gY29uc3RhbnRTeW1ib2xUYWJsZSA/IGNv
bnN0YW50U3ltYm9sVGFibGUtPmluZGV4KCkgOiAwOworICAgIGZvciAoRnVuY3Rpb25NZXRhZGF0
YU5vZGUqIGZ1bmN0aW9uIDogZnVuY3Rpb25TdGFjaykgeworICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBuYW1lID0gZnVuY3Rpb24tPmlkZW50KCk7CisgICAgICAgIGF1dG8gaXRlciA9IGVudmly
b25tZW50LmZpbmQobmFtZS5pbXBsKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9
IGVudmlyb25tZW50LmVuZCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUu
aXNGdW5jdGlvbigpKTsKKyAgICAgICAgLy8gV2UgcHVycG9zZWZ1bGx5IGRvbid0IGhvbGQgdGhl
IHN5bWJvbCB0YWJsZSBsb2NrIGFyb3VuZCB0aGlzIGxvb3AgYmVjYXVzZSBlbWl0TmV3RnVuY3Rp
b25FeHByZXNzaW9uQ29tbW9uIG1heSBHQy4KKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRy
eSA9IHN5bWJvbFRhYmxlLT5nZXQobmFtZS5pbXBsKCkpOyAKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWVudHJ5LmlzTnVsbCgpKTsKKyAgICAgICAgZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbkNv
bW1vbih0ZW1wLmdldCgpLCBmdW5jdGlvbik7CisgICAgICAgIGJvb2wgaXNMZXhpY2FsbHlTY29w
ZWQgPSB0cnVlOworICAgICAgICBlbWl0UHV0VG9TY29wZShzY29wZSwgdmFyaWFibGVGb3JMb2Nh
bEVudHJ5KG5hbWUsIGVudHJ5LCBzeW1ib2xUYWJsZUluZGV4LCBpc0xleGljYWxseVNjb3BlZCks
IHRlbXAuZ2V0KCksIERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbik7CisgICAg
fQorfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGUoVmFyaWFibGVF
bnZpcm9ubWVudE5vZGUqIG5vZGUpCiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJv
bm1lbnQgPSBub2RlLT5sZXhpY2FsVmFyaWFibGVzKCk7CkBAIC0yNTUzLDggKzI2MjAsOCBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpsaWZ0VERaQ2hlY2tJZlBvCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9URFpTdGFjay5zaXplKCk7IGktLTspIHsKICAgICAgICAgVmFyaWFibGVFbnZpcm9u
bWVudCYgZW52aXJvbm1lbnQgPSBtX1REWlN0YWNrW2ldLmZpcnN0OwogICAgICAgICBpZiAoZW52
aXJvbm1lbnQuY29udGFpbnMoaWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgIGJvb2wgaXNTeW50
YWN0aWNhbGx5QWJsZVRvT3B0aW1pemVURFogPSBtX1REWlN0YWNrW2ldLnNlY29uZDsKLSAgICAg
ICAgICAgIGlmIChpc1N5bnRhY3RpY2FsbHlBYmxlVG9PcHRpbWl6ZVREWikgeworICAgICAgICAg
ICAgVERaQ2hlY2tPcHRpbWl6YXRpb24gdGR6Q2hlY2tPcHRpbWl6YXRpb25DYXBhYmlsaXR5ID0g
bV9URFpTdGFja1tpXS5zZWNvbmQ7CisgICAgICAgICAgICBpZiAodGR6Q2hlY2tPcHRpbWl6YXRp
b25DYXBhYmlsaXR5ID09IFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSkgewogICAgICAg
ICAgICAgICAgIGJvb2wgd2FzUmVtb3ZlZCA9IGVudmlyb25tZW50LnJlbW92ZShpZGVudGlmaWVy
KTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3YXNSZW1vdmVkKTsKICAgICAgICAg
ICAgIH0KQEAgLTI1NjMsNiArMjYzMCwyMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpsaWZ0
VERaQ2hlY2tJZlBvCiAgICAgfQogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoVERa
VmFyaWFibGVzKFZhcmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIFREWkNoZWNrT3B0aW1p
emF0aW9uIG9wdGltaXphdGlvbikKK3sKKyAgICBpZiAoIWVudmlyb25tZW50LnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGZ1bmN0aW9u
c1RvUmVtb3ZlOworICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBlbnZpcm9ubWVudCkgewor
ICAgICAgICBpZiAoZW50cnkudmFsdWUuaXNGdW5jdGlvbigpKQorICAgICAgICAgICAgZnVuY3Rp
b25zVG9SZW1vdmUuYWRkKGVudHJ5LmtleS5nZXQoKSk7CisgICAgfQorCisgICAgZm9yIChVbmlx
dWVkU3RyaW5nSW1wbCogZnVuY3Rpb24gOiBmdW5jdGlvbnNUb1JlbW92ZSkKKyAgICAgICAgZW52
aXJvbm1lbnQucmVtb3ZlKGZ1bmN0aW9uKTsKKworICAgIG1fVERaU3RhY2suYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKFdURk1vdmUoZW52aXJvbm1lbnQpLCBvcHRpbWl6YXRpb24pKTsKK30KKwogdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6Z2V0VmFyaWFibGVzVW5kZXJURFooVmFyaWFibGVFbnZpcm9u
bWVudCYgcmVzdWx0KQogewogICAgIGZvciAoYXV0byYgcGFpciA6IG1fVERaU3RhY2spIHsKQEAg
LTI2ODMsOSArMjc2Nyw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3
UmUKICAgICByZXR1cm4gZHN0OwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3
RnVuY3Rpb25FeHByZXNzaW9uQ29tbW9uKFJlZ2lzdGVySUQqIGRzdCwgQmFzZUZ1bmNFeHByTm9k
ZSogZnVuYykKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Np
b25Db21tb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogZnVuY3Rpb24p
CiB7Ci0gICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIGZ1bmN0aW9uID0gZnVuYy0+bWV0YWRhdGEo
KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIobWFr
ZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IG9wX25ld19m
dW5jX2V4cDsKQEAgLTI3MTEsMTQgKzI3OTQsMTQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld0Z1bmN0aW9uRQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmNFeHByTm9kZSogZnVuYykK
IHsKLSAgICBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uQ29tbW9uKGRzdCwgZnVuYyk7CisgICAg
ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbkNvbW1vbihkc3QsIGZ1bmMtPm1ldGFkYXRhKCkpOwog
ICAgIHJldHVybiBkc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCogZHN0LCBBcnJvd0Z1bmNFeHBy
Tm9kZSogZnVuYykKIHsKICAgICBBU1NFUlQoZnVuYy0+bWV0YWRhdGEoKS0+cGFyc2VNb2RlKCkg
PT0gU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSk7ICAgIAotICAgIGVtaXROZXdG
dW5jdGlvbkV4cHJlc3Npb25Db21tb24oZHN0LCBmdW5jKTsKKyAgICBlbWl0TmV3RnVuY3Rpb25F
eHByZXNzaW9uQ29tbW9uKGRzdCwgZnVuYy0+bWV0YWRhdGEoKSk7CiAgICAgcmV0dXJuIGRzdDsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk3ODY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MDksNiArNzA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gY2xhc3Mg
U2NvcGVUeXBlIHsgQ2F0Y2hTY29wZSwgTGV0Q29uc3RTY29wZSwgRnVuY3Rpb25OYW1lU2NvcGUg
fTsKICAgICAgICAgZW51bSBjbGFzcyBTY29wZVJlZ2lzdGVyVHlwZSB7IFZhciwgQmxvY2sgfTsK
ICAgICAgICAgdm9pZCBwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwoVmFyaWFibGVFbnZpcm9ubWVu
dCYsIFREWkNoZWNrT3B0aW1pemF0aW9uLCBOZXN0ZWRTY29wZVR5cGUsIFJlZ2lzdGVySUQqKiBj
b25zdGFudFN5bWJvbFRhYmxlUmVzdWx0LCBURFpSZXF1aXJlbWVudCwgU2NvcGVUeXBlLCBTY29w
ZVJlZ2lzdGVyVHlwZSk7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rp
b25zKFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiwgUmVnaXN0ZXJJRCogY29u
c3RhbnRTeW1ib2xUYWJsZSk7CiAgICAgICAgIHZvaWQgcG9wTGV4aWNhbFNjb3BlSW50ZXJuYWwo
VmFyaWFibGVFbnZpcm9ubWVudCYsIFREWlJlcXVpcmVtZW50KTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTG9va1VwVmFyS2luZEZ1bmN0b3I+CiAgICAgICAgIGJvb2wgaW5zdGFudGlhdGVM
ZXhpY2FsVmFyaWFibGVzKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmLCBTeW1ib2xUYWJsZSos
IFNjb3BlUmVnaXN0ZXJUeXBlLCBMb29rVXBWYXJLaW5kRnVuY3Rvcik7CkBAIC03MTYsNyArNzE3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogc2NvcGUpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0
UGFyZW50U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSk7CiAgICAgICAg
IHZvaWQgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eSwgUmVnaXN0ZXJJRCogdmFsdWUsIGJvb2wgaXNDYXB0dXJlZCk7Ci0gICAgICAgIHZvaWQgZW1p
dE5ld0Z1bmN0aW9uRXhwcmVzc2lvbkNvbW1vbihSZWdpc3RlcklEKiwgQmFzZUZ1bmNFeHByTm9k
ZSopOworICAgICAgICB2b2lkIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb25Db21tb24oUmVnaXN0
ZXJJRCosIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKik7CiAgICAgICAgIAogICAgICAgICBib29sIGlz
TmV3VGFyZ2V0VXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCk7CiAgICAgICAgIGJvb2wgaXNTdXBl
clVzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpOwpAQCAtNzI1LDcgKzcyNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc1N1cGVyQ2FsbFVzZWRJbklubmVy
QXJyb3dGdW5jdGlvbigpOwogICAgICAgICBib29sIGlzVGhpc1VzZWRJbklubmVyQXJyb3dGdW5j
dGlvbigpOwotICAgICAgICB2b2lkIHB1c2hMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVu
dE5vZGUqLCBURFpDaGVja09wdGltaXphdGlvbiwgTmVzdGVkU2NvcGVUeXBlID0gTmVzdGVkU2Nv
cGVUeXBlOjpJc05vdE5lc3RlZCwgUmVnaXN0ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1
bHQgPSBudWxscHRyKTsKKyAgICAgICAgdm9pZCBwdXNoTGV4aWNhbFNjb3BlKFZhcmlhYmxlRW52
aXJvbm1lbnROb2RlKiwgVERaQ2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSA9IE5l
c3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0ZWQsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRh
YmxlUmVzdWx0ID0gbnVsbHB0ciwgYm9vbCBzaG91bGRJbml0aWFsaXplQmxvY2tTY29wZWRGdW5j
dGlvbnMgPSB0cnVlKTsKICAgICAgICAgdm9pZCBwb3BMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZp
cm9ubWVudE5vZGUqKTsKICAgICAgICAgdm9pZCBwcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZv
ckxvb3BJdGVyYXRpb24oVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqLCBSZWdpc3RlcklEKiBsb29w
U3ltYm9sVGFibGUpOwogICAgICAgICBpbnQgbGFiZWxTY29wZURlcHRoKCkgY29uc3Q7CkBAIC04
NTksNyArODYwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpbnQgbV9zeW1ib2xU
YWJsZUNvbnN0YW50SW5kZXg7CiAgICAgICAgIH07CiAgICAgICAgIFZlY3RvcjxTeW1ib2xUYWJs
ZVN0YWNrRW50cnk+IG1fc3ltYm9sVGFibGVTdGFjazsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxWYXJpYWJsZUVudmlyb25tZW50LCBib29sPj4gbV9URFpTdGFjazsKKyAgICAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxWYXJpYWJsZUVudmlyb25tZW50LCBURFpDaGVja09wdGltaXphdGlvbj4+IG1f
VERaU3RhY2s7CisgICAgICAgIHZvaWQgcHVzaFREWlZhcmlhYmxlcyhWYXJpYWJsZUVudmlyb25t
ZW50LCBURFpDaGVja09wdGltaXphdGlvbik7CiAKICAgICAgICAgU2NvcGVOb2RlKiBjb25zdCBt
X3Njb3BlTm9kZTsKICAgICAgICAgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiBtX2NvZGVCbG9j
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZp
c2lvbiAxOTc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw2IEBAIHB1YmxpYzoKIAogICAgIEpTQzo6
U291cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KIAotICAgIERlY2xhcmF0aW9uU3Rh
Y2tzOjpGdW5jdGlvblN0YWNrJiBmdW5jRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9zY29wZS5t
X2Z1bmNEZWNsYXJhdGlvbnM7IH0KICAgICBpbnQgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlLm1fZmVhdHVyZXM7IH0KICAgICBpbnQgbnVtQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9zY29wZS5tX251bUNvbnN0YW50czsgfQogCkBAIC00ODIsNyArNDgxLDYgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5z
dGFydE9mZnNldCwgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGlu
ZSwgZnVuY3Rpb25JbmZvLmJvZHlTdGFydENvbHVtbikpOwogICAgICAgICBpZiAoKmZ1bmN0aW9u
SW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykKICAgICAgICAgICAg
IHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAgbV9zY29wZS5tX2Z1bmNEZWNsYXJhdGlvbnMuYXBw
ZW5kKGRlY2wtPm1ldGFkYXRhKCkpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0TG9j
KGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5lbmRMaW5lLCBsb2NhdGlvbi5z
dGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIGRl
Y2w7CiAgICAgfQpAQCAtNDk2LDkgKzQ5NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGRl
Y2w7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VFbGVtZW50cyogZWxlbWVu
dHMsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhp
Y2FsVmFyaWFibGVzKQorICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJsb2NrU3RhdGVtZW50KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEpTQzo6U291cmNlRWxlbWVudHMqIGVsZW1l
bnRzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4
aWNhbFZhcmlhYmxlcywgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smJiBmdW5jdGlv
blN0YWNrKQogICAgIHsKLSAgICAgICAgQmxvY2tOb2RlKiBibG9jayA9IG5ldyAobV9wYXJzZXJB
cmVuYSkgQmxvY2tOb2RlKGxvY2F0aW9uLCBlbGVtZW50cywgbGV4aWNhbFZhcmlhYmxlcyk7Cisg
ICAgICAgIEJsb2NrTm9kZSogYmxvY2sgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEJsb2NrTm9kZShs
b2NhdGlvbiwgZWxlbWVudHMsIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoZnVuY3Rpb25TdGFj
aykpOwogICAgICAgICBibG9jay0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24u
c3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiBi
bG9jazsKICAgICB9CkBAIC02MjgsMTAgKzYyNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlU3dpdGNoU3RhdGVt
ZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHBy
LCBDbGF1c2VMaXN0Tm9kZSogZmlyc3RDbGF1c2VzLCBDYXNlQ2xhdXNlTm9kZSogZGVmYXVsdENs
YXVzZSwgQ2xhdXNlTGlzdE5vZGUqIHNlY29uZENsYXVzZXMsIGludCBzdGFydExpbmUsIGludCBl
bmRMaW5lLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQorICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQ2xhdXNlTGlzdE5vZGUqIGZpcnN0Q2xhdXNl
cywgQ2FzZUNsYXVzZU5vZGUqIGRlZmF1bHRDbGF1c2UsIENsYXVzZUxpc3ROb2RlKiBzZWNvbmRD
bGF1c2VzLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgVmFyaWFibGVFbnZpcm9ubWVudCYg
bGV4aWNhbFZhcmlhYmxlcywgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smJiBmdW5j
dGlvblN0YWNrKQogICAgIHsKICAgICAgICAgQ2FzZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1f
cGFyc2VyQXJlbmEpIENhc2VCbG9ja05vZGUoZmlyc3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBz
ZWNvbmRDbGF1c2VzKTsKLSAgICAgICAgU3dpdGNoTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNl
ckFyZW5hKSBTd2l0Y2hOb2RlKGxvY2F0aW9uLCBleHByLCBjYXNlcywgbGV4aWNhbFZhcmlhYmxl
cyk7CisgICAgICAgIFN3aXRjaE5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgU3dp
dGNoTm9kZShsb2NhdGlvbiwgZXhwciwgY2FzZXMsIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUo
ZnVuY3Rpb25TdGFjaykpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExp
bmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTkzNSw3ICs5MzMsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLCBtX251bUNvbnN0YW50cygwKQogICAgICAgICB7CiAgICAgICAgIH0KLSAg
ICAgICAgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sgbV9mdW5jRGVjbGFyYXRpb25z
OwogICAgICAgICBpbnQgbV9mZWF0dXJlczsKICAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3Rv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAkocmV2aXNpb24gMTk3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2NCwxNyArOTY0LDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgU3dpdGNoTm9k
ZTo6U3dpdGNoTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgQ2FzZUJsb2NrTm9kZSogYmxvY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxl
eGljYWxWYXJpYWJsZXMpCisgICAgaW5saW5lIFN3aXRjaE5vZGU6OlN3aXRjaE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIENhc2VCbG9j
a05vZGUqIGJsb2NrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBGdW5j
dGlvblN0YWNrJiYgZnVuY3Rpb25TdGFjaykKICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0
aW9uKQotICAgICAgICAsIFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKGxleGljYWxWYXJpYWJsZXMp
CisgICAgICAgICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4aWNhbFZhcmlhYmxlcywgV1RG
TW92ZShmdW5jdGlvblN0YWNrKSkKICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBt
X2Jsb2NrKGJsb2NrKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQmxvY2tOb2RlOjpCbG9j
a05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIHN0
YXRlbWVudHMsIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgaW5s
aW5lIEJsb2NrTm9kZTo6QmxvY2tOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IFNvdXJjZUVsZW1lbnRzKiBzdGF0ZW1lbnRzLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2Fs
VmFyaWFibGVzLCBGdW5jdGlvblN0YWNrJiYgZnVuY3Rpb25TdGFjaykKICAgICAgICAgOiBTdGF0
ZW1lbnROb2RlKGxvY2F0aW9uKQotICAgICAgICAsIFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKGxl
eGljYWxWYXJpYWJsZXMpCisgICAgICAgICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4aWNh
bFZhcmlhYmxlcywgV1RGTW92ZShmdW5jdGlvblN0YWNrKSkKICAgICAgICAgLCBtX3N0YXRlbWVu
dHMoc3RhdGVtZW50cykKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE5Nzg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMTAgQEAgU2Nv
cGVOb2RlOjpTY29wZU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlcgogewogfQogCi1TY29wZU5vZGU6
OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxl
RW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiBmdW5jU3RhY2ssIFZh
cmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKFBhcnNlckFy
ZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52
aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQm
IGxleGljYWxWYXJpYWJsZXMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0
aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cykKICAgICA6IFN0YXRlbWVudE5vZGUoZW5kTG9jYXRpb24pCiAgICAgLCBQYXJzZXJB
cmVuYVJvb3QocGFyc2VyQXJlbmEpCi0gICAgLCBWYXJpYWJsZUVudmlyb25tZW50Tm9kZShsZXhp
Y2FsVmFyaWFibGVzKQorICAgICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4aWNhbFZhcmlh
YmxlcywgV1RGTW92ZShmdW5jU3RhY2spKQogICAgICwgbV9zdGFydExpbmVOdW1iZXIoc3RhcnRM
b2NhdGlvbi5saW5lKQogICAgICwgbV9zdGFydFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24uc3Rh
cnRPZmZzZXQpCiAgICAgLCBtX3N0YXJ0TGluZVN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0KQpAQCAtMTA4LDcgKzEwOCw2IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKFBh
cnNlckFyZW5hJiBwYXJzZXIKICAgICAsIG1fc3RhdGVtZW50cyhjaGlsZHJlbikKIHsKICAgICBt
X3ZhckRlY2xhcmF0aW9ucy5zd2FwKHZhckVudmlyb25tZW50KTsKLSAgICBtX2Z1bmN0aW9uU3Rh
Y2suc3dhcChmdW5jU3RhY2spOwogfQogCiBTdGF0ZW1lbnROb2RlKiBTY29wZU5vZGU6OnNpbmds
ZVN0YXRlbWVudCgpIGNvbnN0CkBAIC0xMTgsOCArMTE3LDggQEAgU3RhdGVtZW50Tm9kZSogU2Nv
cGVOb2RlOjpzaW5nbGVTdGF0ZW1lbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUHJvZ3JhbU5v
ZGU6OlByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlv
blN0YWNrJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMs
IEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1
bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2NvcGVOb2RlKHBh
cnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwg
dmFyRW52aXJvbm1lbnQsIGZ1bmNTdGFjaywgbGV4aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMsIGlu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorUHJvZ3JhbU5vZGU6
OlByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyog
Y2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0
YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBG
dW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJl
cyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5j
dGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAgICA6IFNjb3BlTm9kZShwYXJz
ZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZh
ckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIGZlYXR1
cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNvbnN0YW50cykKICAgICAs
IG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4p
CiB7CkBAIC0xMjcsOCArMTI2LDggQEAgUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKFBhcnNlckFy
ZW5hJiBwYQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTW9kdWxlUHJvZ3Jh
bU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTW9kdWxlUHJvZ3JhbU5vZGU6
Ok1vZHVsZVByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0
aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5j
dGlvblN0YWNrJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJs
ZXMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2NvcGVOb2Rl
KHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJl
biwgdmFyRW52aXJvbm1lbnQsIGZ1bmNTdGFjaywgbGV4aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMs
IGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorTW9kdWxlUHJv
Z3JhbU5vZGU6Ok1vZHVsZVByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25t
ZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhp
Y2FsVmFyaWFibGVzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVz
IGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAgICA6
IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJj
ZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxW
YXJpYWJsZXMsIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNv
bnN0YW50cykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgLCBtX2VuZENv
bHVtbihlbmRDb2x1bW4pCiB7CkBAIC0xMzYsOCArMTM1LDggQEAgTW9kdWxlUHJvZ3JhbU5vZGU6
Ok1vZHVsZVByb2dyYW1Ob2RlKFBhcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRXZhbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRXZhbE5vZGU6OkV2
YWxOb2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxl
RW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiBmdW5jU3RhY2ssIFZh
cmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIEZ1bmN0aW9uUGFyYW1ldGVycyos
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIGZ1bmNT
dGFjaywgbGV4aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorRXZhbE5vZGU6OkV2YWxOb2RlKFBhcnNlckFyZW5hJiBw
YXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCwgdW5zaWduZWQgZW5kQ29sdW1u
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmly
b25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsVmFyaWFibGVzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKKyAg
ICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGlj
YWxWYXJpYWJsZXMsIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51
bUNvbnN0YW50cykKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KQEAgLTE4Miw4
ICsxODEsOCBAQCB2b2lkIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOjpzZXRFbmRQb3NpdGlvCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbk5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotRnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZp
cm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smIGZ1bmNTdGFjaywgVmFyaWFi
bGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEs
IHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyRW52
aXJvbm1lbnQsIGZ1bmNTdGFjaywgbGV4aWNhbFZhcmlhYmxlcywgZmVhdHVyZXMsIGlubmVyQXJy
b3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorRnVuY3Rpb25Ob2RlOjpGdW5j
dGlvbk5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
IHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2sm
JiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIEZ1bmN0
aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5u
ZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDogU2Nv
cGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29k
ZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxW
YXJpYWJsZXMsIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNv
bnN0YW50cykKICAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQogICAgICwgbV9zdGFydENv
bHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKQEAgLTIwMiw0
ICsyMDEsMTAgQEAgVmFyaWFibGVFbnZpcm9ubWVudE5vZGU6OlZhcmlhYmxlRW52aXJvbgogICAg
IG1fbGV4aWNhbFZhcmlhYmxlcy5zd2FwKGxleGljYWxWYXJpYWJsZXMpOwogfQogCitWYXJpYWJs
ZUVudmlyb25tZW50Tm9kZTo6VmFyaWFibGVFbnZpcm9ubWVudE5vZGUoVmFyaWFibGVFbnZpcm9u
bWVudCYgbGV4aWNhbFZhcmlhYmxlcywgRnVuY3Rpb25TdGFjayYmIGZ1bmN0aW9uU3RhY2spCit7
CisgICAgbV9sZXhpY2FsVmFyaWFibGVzLnN3YXAobGV4aWNhbFZhcmlhYmxlcyk7CisgICAgbV9m
dW5jdGlvblN0YWNrID0gV1RGTW92ZShmdW5jdGlvblN0YWNrKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAx
OTc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNCwxNiArMjE0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
VmFyaWFibGVFbnZpcm9ubWVudE5vZGUgOiBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgewog
ICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25T
dGFjayBGdW5jdGlvblN0YWNrOworCiAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKCkK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUo
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xhcmVkVmFyaWFibGVzKTsKKyAgICAgICAg
VmFyaWFibGVFbnZpcm9ubWVudE5vZGUoVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbERlY2xh
cmVkVmFyaWFibGVzLCBGdW5jdGlvblN0YWNrJiYpOwogCiAgICAgICAgIFZhcmlhYmxlRW52aXJv
bm1lbnQmIGxleGljYWxWYXJpYWJsZXMoKSB7IHJldHVybiBtX2xleGljYWxWYXJpYWJsZXM7IH0K
KyAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25TdGFjazsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50
IG1fbGV4aWNhbFZhcmlhYmxlczsKKyAgICAgICAgRnVuY3Rpb25TdGFjayBtX2Z1bmN0aW9uU3Rh
Y2s7CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnN0YW50Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CkBAIC0xMzAzLDcgKzEzMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBuZXc7CiAKLSAg
ICAgICAgQmxvY2tOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwg
VmFyaWFibGVFbnZpcm9ubWVudCYpOworICAgICAgICBCbG9ja05vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25T
dGFjayYmKTsKIAogICAgICAgICBTdGF0ZW1lbnROb2RlKiBzaW5nbGVTdGF0ZW1lbnQoKSBjb25z
dDsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbGFzdFN0YXRlbWVudCgpIGNvbnN0OwpAQCAtMTU1
MSwxMCArMTU1Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU2NvcGVOb2RlIDog
cHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBQYXJzZXJBcmVuYVJvb3QsIHB1YmxpYyBWYXJp
YWJsZUVudmlyb25tZW50Tm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIERlY2xh
cmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIEZ1bmN0aW9uU3RhY2s7CiAKICAgICAgICAgU2Nv
cGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgU2Nv
cGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyos
IFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVt
Q29uc3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0
YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5j
dGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdXNpbmcgUGFy
c2VyQXJlbmFSb290OjpvcGVyYXRvciBuZXc7CiAKQEAgLTE1OTMsNyArMTU5Nyw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElkZW50aWZpZXImIGlkZW50
KSB7IHJldHVybiBjYXB0dXJlcyhpZGVudC5pbXBsKCkpOyB9CiAKICAgICAgICAgVmFyaWFibGVF
bnZpcm9ubWVudCYgdmFyRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV92YXJEZWNsYXJhdGlvbnM7
IH0KLSAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25TdGFjazsgfQogCiAgICAgICAgIGludCBuZWVkZWRDb25zdGFudHMoKQogICAgICAgICB7
CkBAIC0xNjE4LDE0ICsxNjIxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgbV9pbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXM7
CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgbV92YXJEZWNsYXJhdGlvbnM7Ci0gICAgICAgIEZ1bmN0aW9uU3RhY2sgbV9mdW5jdGlvblN0
YWNrOwogICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CiAgICAgICAgIFNvdXJjZUVsZW1lbnRz
KiBtX3N0YXRlbWVudHM7CiAgICAgfTsKIAogICAgIGNsYXNzIFByb2dyYW1Ob2RlIDogcHVibGlj
IFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBQcm9ncmFtTm9kZShQYXJzZXJBcmVu
YSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZp
cm9ubWVudCYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7
CisgICAgICAgIFByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uUGFyYW1l
dGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdW5zaWduZWQgc3Rh
cnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgICAgIHVuc2ln
bmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CkBAIC0xNjQwLDcg
KzE2NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGlj
IFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsTm9kZShQYXJzZXJBcmVuYSYs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZpcm9u
bWVudCYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVy
ZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7Cisg
ICAgICAgIEV2YWxOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFy
dCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNp
Z25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1
bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uUGFyYW1ldGVycyos
IGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAgICAgdW5zaWduZWQg
ZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE2NTUsNyArMTY1
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTW9kdWxlUHJvZ3JhbU5vZGUgOiBw
dWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Ob2Rl
KFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBW
YXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29k
ZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVt
Q29uc3RhbnRzKTsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBW
YXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50
JiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywg
SW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAg
ICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47
IH0KICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1
bW47IH0KQEAgLTE4OTcsNyArMTg5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
RnVuY3Rpb25Ob2RlIGZpbmFsIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBGdW5jdGlvbk5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50Jiwg
RnVuY3Rpb25TdGFjayYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblBhcmFtZXRlcnMq
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBGdW5jdGlvbk5vZGUoUGFyc2Vy
QXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNl
RWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJs
ZUVudmlyb25tZW50JiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENv
ZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3Rh
bnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7
IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KIApAQCAtMjIwMyw3ICsyMjA1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB1c2luZyBQYXJzZXJBcmVuYURlbGV0YWJsZTo6
b3BlcmF0b3IgbmV3OwogCi0gICAgICAgIFN3aXRjaE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqLCBDYXNlQmxvY2tOb2RlKiwgVmFyaWFibGVFbnZpcm9ubWVudCYp
OworICAgICAgICBTd2l0Y2hOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiwgQ2FzZUJsb2NrTm9kZSosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNr
JiYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTk3ODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsMTcg
KzMzNiwxNyBAQCBTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uCiAgICAg
ICAgIH0KICAgICB9CiAjZW5kaWYgLy8gTkRFQlVHCi0gICAgZGlkRmluaXNoUGFyc2luZyhzb3Vy
Y2VFbGVtZW50cywgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIHZhckRlY2xhcmF0aW9ucywg
ZmVhdHVyZXMsIGNvbnRleHQubnVtQ29uc3RhbnRzKCkpOworICAgIGRpZEZpbmlzaFBhcnNpbmco
c291cmNlRWxlbWVudHMsIHNjb3BlLT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwgdmFyRGVj
bGFyYXRpb25zLCBmZWF0dXJlcywgY29udGV4dC5udW1Db25zdGFudHMoKSk7CiAKICAgICByZXR1
cm4gcGFyc2VFcnJvcjsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXZvaWQg
UGFyc2VyPExleGVyVHlwZT46OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJj
ZUVsZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY1N0YWNrLCAK
K3ZvaWQgUGFyc2VyPExleGVyVHlwZT46OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMq
IHNvdXJjZUVsZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYmIGZ1bmNT
dGFjaywgCiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRGVjbGFyYXRpb25zLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiB7CiAgICAgbV9zb3VyY2VFbGVtZW50
cyA9IHNvdXJjZUVsZW1lbnRzOwotICAgIG1fZnVuY0RlY2xhcmF0aW9ucy5zd2FwKGZ1bmNTdGFj
ayk7CisgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gV1RGTW92ZShmdW5jU3RhY2spOwogICAgIG1f
dmFyRGVjbGFyYXRpb25zLnN3YXAodmFyRGVjbGFyYXRpb25zKTsKICAgICBtX2ZlYXR1cmVzID0g
ZmVhdHVyZXM7CiAgICAgbV9udW1Db25zdGFudHMgPSBudW1Db25zdGFudHM7CkBAIC01NzEsNiAr
NTcxLDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogICAgICAg
ICByZXN1bHQgPSBwYXJzZUNsYXNzRGVjbGFyYXRpb24oY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogI2VuZGlmCisgICAgY2FzZSBGVU5DVElPTjoKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uKGNvbnRleHQpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBtX3N0YXRlbWVudERlcHRoLS07IC8vIHBhcnNlU3RhdGVtZW50KCkgaW5jcmVtZW50
cyB0aGUgZGVwdGguCiAgICAgICAgIHJlc3VsdCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQsIGRp
cmVjdGl2ZSwgZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCk7CkBAIC0xNDI0LDcgKzE0MjcsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgZW5kU3dpdGNoKCk7
CiAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNFLCAifSIsICJlbmQiLCAiYm9k
eSBvZiBhICdzd2l0Y2gnIik7CiAgICAgCi0gICAgVHJlZVN0YXRlbWVudCByZXN1bHQgPSBjb250
ZXh0LmNyZWF0ZVN3aXRjaFN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgZmlyc3RDbGF1c2VzLCBk
ZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzLCBzdGFydExpbmUsIGVuZExpbmUsIGxleGljYWxT
Y29wZS0+ZmluYWxpemVMZXhpY2FsRW52aXJvbm1lbnQoKSk7CisgICAgVHJlZVN0YXRlbWVudCBy
ZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVN3aXRjaFN0YXRlbWVudChsb2NhdGlvbiwgZXhwciwgZmly
c3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzLCBzdGFydExpbmUsIGVuZExp
bmUsIGxleGljYWxTY29wZS0+ZmluYWxpemVMZXhpY2FsRW52aXJvbm1lbnQoKSwgbGV4aWNhbFNj
b3BlLT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSk7CiAgICAgcG9wU2NvcGUobGV4aWNhbFNj
b3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTU2MiwxMSArMTU2NSwxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2RhdGEub2Zm
c2V0OwogICAgIGludCBzdGFydCA9IHRva2VuTGluZSgpOwogICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgZW1wdHlFbnZpcm9ubWVudDsKKyAgICBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFj
ayBlbXB0eUZ1bmN0aW9uU3RhY2s7CiAgICAgbmV4dCgpOwogICAgIGlmIChtYXRjaChDTE9TRUJS
QUNFKSkgewogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbV90b2tlbi5tX2RhdGEub2Zmc2V0Owog
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgIFRyZWVTdGF0ZW1lbnQgcmVzdWx0ID0gY29udGV4dC5j
cmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlvbiwgMCwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9z
aXRpb24ubGluZSwgc2hvdWxkUHVzaExleGljYWxTY29wZSA/IGN1cnJlbnRTY29wZSgpLT5maW5h
bGl6ZUxleGljYWxFbnZpcm9ubWVudCgpIDogZW1wdHlFbnZpcm9ubWVudCk7CisgICAgICAgIFRy
ZWVTdGF0ZW1lbnQgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVCbG9ja1N0YXRlbWVudChsb2NhdGlv
biwgMCwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSwgc2hvdWxkUHVzaExleGlj
YWxTY29wZSA/IGN1cnJlbnRTY29wZSgpLT5maW5hbGl6ZUxleGljYWxFbnZpcm9ubWVudCgpIDog
ZW1wdHlFbnZpcm9ubWVudCwgc2hvdWxkUHVzaExleGljYWxTY29wZSA/IGN1cnJlbnRTY29wZSgp
LT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSA6IFdURk1vdmUoZW1wdHlGdW5jdGlvblN0YWNr
KSk7CiAgICAgICAgIGNvbnRleHQuc2V0U3RhcnRPZmZzZXQocmVzdWx0LCBzdGFydE9mZnNldCk7
CiAgICAgICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0KHJlc3VsdCwgZW5kT2Zmc2V0KTsKICAgICAg
ICAgaWYgKHNob3VsZFB1c2hMZXhpY2FsU2NvcGUpCkBAIC0xNTc4LDcgKzE1ODIsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgbWF0Y2hPckZhaWwoQ0xP
U0VCUkFDRSwgIkV4cGVjdGVkIGEgY2xvc2luZyAnfScgYXQgdGhlIGVuZCBvZiBhIGJsb2NrIHN0
YXRlbWVudCIpOwogICAgIGludCBlbmRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7CiAg
ICAgbmV4dCgpOwotICAgIFRyZWVTdGF0ZW1lbnQgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVCbG9j
a1N0YXRlbWVudChsb2NhdGlvbiwgc3VidHJlZSwgc3RhcnQsIG1fbGFzdFRva2VuRW5kUG9zaXRp
b24ubGluZSwgc2hvdWxkUHVzaExleGljYWxTY29wZSA/IGN1cnJlbnRTY29wZSgpLT5maW5hbGl6
ZUxleGljYWxFbnZpcm9ubWVudCgpIDogZW1wdHlFbnZpcm9ubWVudCk7CisgICAgVHJlZVN0YXRl
bWVudCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZUJsb2NrU3RhdGVtZW50KGxvY2F0aW9uLCBzdWJ0
cmVlLCBzdGFydCwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lLCBzaG91bGRQdXNoTGV4aWNh
bFNjb3BlID8gY3VycmVudFNjb3BlKCktPmZpbmFsaXplTGV4aWNhbEVudmlyb25tZW50KCkgOiBl
bXB0eUVudmlyb25tZW50LCBzaG91bGRQdXNoTGV4aWNhbFNjb3BlID8gY3VycmVudFNjb3BlKCkt
PnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpIDogV1RGTW92ZShlbXB0eUZ1bmN0aW9uU3RhY2sp
KTsKICAgICBjb250ZXh0LnNldFN0YXJ0T2Zmc2V0KHJlc3VsdCwgc3RhcnRPZmZzZXQpOwogICAg
IGNvbnRleHQuc2V0RW5kT2Zmc2V0KHJlc3VsdCwgZW5kT2Zmc2V0KTsKICAgICBpZiAoc2hvdWxk
UHVzaExleGljYWxTY29wZSkKQEAgLTE2MDcsOCArMTYxMSwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIHJlc3VsdCA9IHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbihjb250ZXh0LCBEZWNsYXJhdGlvblR5cGU6OlZhckRlY2xhcmF0aW9uKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGVU5DVElPTjoKLSAgICAgICAgZmFpbElmRmFsc2VJZlN0
cmljdChtX3N0YXRlbWVudERlcHRoID09IDEsICJTdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyBm
dW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBsZXhpY2FsbHkgbmVzdGVkIHN0YXRlbWVudCIpOwot
ICAgICAgICByZXN1bHQgPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29udGV4dCk7CisgICAg
ICAgIGlmICghc3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uKGNvbnRleHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWlsV2l0
aE1lc3NhZ2UoIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluc2lkZSBi
bG9ja3Mgb3Igc3dpdGNoIHN0YXRlbWVudHMgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTRU1JQ09MT046IHsKICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0
aW9uKHRva2VuTG9jYXRpb24oKSk7CkBAIC0yMTIxLDYgKzIxMjcsOSBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBnZXRNZXRhZGF0
YShQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mKSB7IFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KK3N0YXRpYyBGdW5jdGlvbk1ldGFkYXRhTm9kZSogZ2V0TWV0YWRhdGEo
UGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvKSB7IHJldHVybiBpbmZvLmJvZHk7
IH0KKwogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBFeHBvcnRUeXBlIGV4cG9ydFR5cGUpCiB7
CkBAIC0yMTM3LDE1ICsyMTQ2LDIwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWUKICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVu
Y3Rpb25OZWVkc05hbWUsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBT
dXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5m
bywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0
aGlzIGZ1bmN0aW9uIik7CiAgICAgZmFpbElmRmFsc2UoZnVuY3Rpb25JbmZvLm5hbWUsICJGdW5j
dGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKIAotICAgIERlY2xhcmF0aW9uUmVz
dWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRlY2xhcmVWYXJpYWJsZShmdW5jdGlvbkluZm8u
bmFtZSk7CisgICAgc3RkOjpwYWlyPERlY2xhcmF0aW9uUmVzdWx0TWFzaywgU2NvcGVSZWY+IGZ1
bmN0aW9uRGVjbGFyYXRpb24gPSBkZWNsYXJlRnVuY3Rpb24oZnVuY3Rpb25JbmZvLm5hbWUpOwor
ICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGZ1bmN0aW9uRGVj
bGFyYXRpb24uZmlyc3Q7CiAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGRlY2xhcmF0aW9uUmVzdWx0
ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlLCAiQ2Fubm90IGRlY2xhcmUg
YSBmdW5jdGlvbiBuYW1lZCAnIiwgZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaW4gc3Ry
aWN0IG1vZGUiKTsKICAgICBpZiAoZGVjbGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3Vs
dDo6SW52YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uKQotICAgICAgICBpbnRlcm5hbEZhaWxXaXRo
TWVzc2FnZShmYWxzZSwgIkNhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEg
bGV0L2NvbnN0L2NsYXNzIHZhcmlhYmxlICciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOworICAgICAgICBpbnRlcm5hbEZhaWxXaXRoTWVzc2FnZShmYWxz
ZSwgIkNhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2Ns
YXNzL2Z1bmN0aW9uIHZhcmlhYmxlICciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBp
biBzdHJpY3QgbW9kZSIpOwogICAgIGlmIChleHBvcnRUeXBlID09IEV4cG9ydFR5cGU6OkV4cG9y
dGVkKSB7CiAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoZXhwb3J0TmFtZSgqZnVuY3Rpb25J
bmZvLm5hbWUpLCAiQ2Fubm90IGV4cG9ydCBhIGR1cGxpY2F0ZSBmdW5jdGlvbiBuYW1lOiAnIiwg
ZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIiciKTsKICAgICAgICAgY3VycmVudFNjb3BlKCkt
Pm1vZHVsZVNjb3BlRGF0YSgpLmV4cG9ydEJpbmRpbmcoKmZ1bmN0aW9uSW5mby5uYW1lKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24s
IGZ1bmN0aW9uSW5mbyk7CisKKyAgICBUcmVlU3RhdGVtZW50IHJlc3VsdCA9IGNvbnRleHQuY3Jl
YXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIGZ1bmN0aW9uSW5mbyk7CisgICAgaWYgKFRy
ZWVCdWlsZGVyOjpDcmVhdGVzQVNUKQorICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uLnNlY29u
ZC0+YXBwZW5kRnVuY3Rpb24oZ2V0TWV0YWRhdGEoZnVuY3Rpb25JbmZvKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTI3NjcsOCAr
Mjc4MSwxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobG9jYWxOYW1lKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2go
RlVOQ1RJT04pKQorICAgICAgICAgICAgaWYgKG1hdGNoKEZVTkNUSU9OKSkgeworICAgICAgICAg
ICAgICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7Cisg
ICAgICAgICAgICAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDE7CiAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGNvbnRleHQpOworICAgICAgICAgICAgfQog
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1hdGNoKENMQVNTVE9LRU4pKTsKQEAgLTI4NzgsOSArMjg5NSwxMiBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgICAgICBy
ZXN1bHQgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgRGVjbGFyYXRpb25UeXBl
OjpMZXREZWNsYXJhdGlvbiwgRXhwb3J0VHlwZTo6RXhwb3J0ZWQpOwogICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgY2FzZSBGVU5DVElPTjoKKyAgICAgICAgY2FzZSBGVU5DVElPTjogewor
ICAgICAgICAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRo
KTsKKyAgICAgICAgICAgIG1fc3RhdGVtZW50RGVwdGggPSAxOwogICAgICAgICAgICAgcmVzdWx0
ID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGNvbnRleHQsIEV4cG9ydFR5cGU6OkV4cG9ydGVk
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKICAgICAgICAgY2FzZSBDTEFTU1RPS0VOOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxOTc4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDM3IEBA
IHN0cnVjdCBTY29wZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgRGVj
bGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmVGdW5jdGlvbihjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCwgYm9vbCBkZWNsYXJlQXNWYXIpCisgICAgeworICAgICAgICBBU1NFUlQobV9hbGxvd3NWYXJE
ZWNsYXJhdGlvbnMgfHwgbV9hbGxvd3NMZXhpY2FsRGVjbGFyYXRpb25zKTsKKyAgICAgICAgRGVj
bGFyYXRpb25SZXN1bHRNYXNrIHJlc3VsdCA9IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZDsKKyAg
ICAgICAgYm9vbCBpc1ZhbGlkU3RyaWN0TW9kZSA9ICFpc0V2YWxPckFyZ3VtZW50c0lkZW50aWZp
ZXIobV92bSwgaWRlbnQpOworICAgICAgICBpZiAoIWlzVmFsaWRTdHJpY3RNb2RlKQorICAgICAg
ICAgICAgcmVzdWx0IHw9IERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9kZTsKKyAg
ICAgICAgbV9pc1ZhbGlkU3RyaWN0TW9kZSA9IG1faXNWYWxpZFN0cmljdE1vZGUgJiYgaXNWYWxp
ZFN0cmljdE1vZGU7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZGVjbGFyZUFzVmFyID8gbV9k
ZWNsYXJlZFZhcmlhYmxlcy5hZGQoaWRlbnQtPmltcGwoKSkgOiBtX2xleGljYWxWYXJpYWJsZXMu
YWRkKGlkZW50LT5pbXBsKCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNl
dElzRnVuY3Rpb24oKTsKKyAgICAgICAgaWYgKGRlY2xhcmVBc1ZhcikgeworICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc1ZhcigpOworICAgICAgICAgICAgaWYgKG1f
bGV4aWNhbFZhcmlhYmxlcy5jb250YWlucyhpZGVudC0+aW1wbCgpKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgfD0gRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWREdXBsaWNhdGVEZWNsYXJhdGlv
bjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuc2V0SXNMZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fZGVjbGFy
ZWRWYXJpYWJsZXMuc2l6ZSgpLCAiV2Ugc2hvdWxkIG9ubHkgZGVjbGFyZSBhIGZ1bmN0aW9uIGFz
IGEgbGV4aWNhbGx5IHNjb3BlZCB2YXJpYWJsZSBpbiBzY29wZXMgd2hlcmUgdmFyIGRlY2xhcmF0
aW9ucyBhcmVuJ3QgYWxsb3dlZC4gSS5lLCBpbiBzdHJpY3QgbW9kZSBhbmQgbm90IGF0IHRoZSB0
b3AtbGV2ZWwgc2NvcGUgb2YgYSBmdW5jdGlvbiBvciBwcm9ncmFtLiIpOworICAgICAgICAgICAg
aWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgCisgICAgICAgICAgICAgICAgcmVzdWx0IHw9IERl
Y2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb247CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEZ1bmN0aW9u
KEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBub2RlKQorICAgIHsgCisgICAgICAgIEFTU0VSVChub2Rl
KTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQobm9kZSk7CisgICAgfQor
ICAgIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiYgdGFrZUZ1bmN0aW9uRGVjbGFy
YXRpb25zKCkgeyByZXR1cm4gV1RGTW92ZShtX2Z1bmN0aW9uRGVjbGFyYXRpb25zKTsgfQorICAg
IAorCiAgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmVMZXhpY2FsVmFyaWFibGUoY29u
c3QgSWRlbnRpZmllciogaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgRGVjbGFyYXRpb25JbXBvcnRU
eXBlIGltcG9ydFR5cGUgPSBEZWNsYXJhdGlvbkltcG9ydFR5cGU6Ok5vdEltcG9ydGVkKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fYWxsb3dzTGV4aWNhbERlY2xhcmF0aW9ucyk7CkBAIC02OTEs
NiArNzIyLDcgQEAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyU2V0IG1fY2xvc2VkVmFyaWFibGVD
YW5kaWRhdGVzOwogICAgIElkZW50aWZpZXJTZXQgbV93cml0dGVuVmFyaWFibGVzOwogICAgIFJl
ZlB0cjxNb2R1bGVTY29wZURhdGE+IG1fbW9kdWxlU2NvcGVEYXRhIHsgfTsKKyAgICBEZWNsYXJh
dGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOwogfTsKIAog
dHlwZWRlZiBWZWN0b3I8U2NvcGUsIDEwPiBTY29wZVN0YWNrOwpAQCAtOTIzLDYgKzk1NSwxOCBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gU2NvcGVSZWYoJm1fc2NvcGVTdGFjaywgaSk7CiAg
ICAgfQogCisgICAgU2NvcGVSZWYgY3VycmVudExleGljYWxEZWNsYXJhdGlvblNjb3BlKCkKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGkgPSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMTsKKyAgICAg
ICAgQVNTRVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgd2hpbGUgKCFtX3Nj
b3BlU3RhY2tbaV0uYWxsb3dzTGV4aWNhbERlY2xhcmF0aW9ucygpKSB7CisgICAgICAgICAgICBp
LS07CisgICAgICAgICAgICBBU1NFUlQoaSA8IG1fc2NvcGVTdGFjay5zaXplKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFNjb3BlUmVmKCZtX3Njb3BlU3RhY2ssIGkpOworICAgIH0K
KwogICAgIFNjb3BlUmVmIGN1cnJlbnRGdW5jdGlvblNjb3BlKCkKICAgICB7CiAgICAgICAgIHVu
c2lnbmVkIGkgPSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMTsKQEAgLTk1OSw3ICsxMDAzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9zY29wZVN0YWNrLmFwcGVuZChTY29wZShtX3ZtLCBpc0Z1bmN0
aW9uLCBpc0dlbmVyYXRvciwgaXNTdHJpY3QsIGlzQXJyb3dGdW5jdGlvbikpOwogICAgICAgICBy
ZXR1cm4gY3VycmVudFNjb3BlKCk7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBwb3BTY29wZUlu
dGVybmFsKFNjb3BlUmVmJiBzY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3NlZFZhcmlhYmxlcykK
ICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmluZGV4KCkgPT0gbV9z
Y29wZVN0YWNrLnNpemUoKSAtIDEpOwpAQCAtMTAwMSwyMiArMTA0NSwzMCBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAodHlwZSA9PSBEZWNsYXJhdGlvblR5cGU6OlZhckRlY2xhcmF0aW9uKQogICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYXJpYWJsZVNjb3BlKCktPmRlY2xhcmVWYXJpYWJsZShp
ZGVudCk7CiAKLSAgICAgICAgdW5zaWduZWQgaSA9IG1fc2NvcGVTdGFjay5zaXplKCkgLSAxOwot
ICAgICAgICBBU1NFUlQoaSA8IG1fc2NvcGVTdGFjay5zaXplKCkpOwogICAgICAgICBBU1NFUlQo
dHlwZSA9PSBEZWNsYXJhdGlvblR5cGU6OkxldERlY2xhcmF0aW9uIHx8IHR5cGUgPT0gRGVjbGFy
YXRpb25UeXBlOjpDb25zdERlY2xhcmF0aW9uKTsKLQogICAgICAgICAvLyBMZXhpY2FsIHZhcmlh
YmxlcyBkZWNsYXJlZCBhdCBhIHRvcCBsZXZlbCBzY29wZSB0aGF0IHNoYWRvdyBhcmd1bWVudHMg
b3IgdmFycyBhcmUgbm90IGFsbG93ZWQuCiAgICAgICAgIGlmIChtX3N0YXRlbWVudERlcHRoID09
IDEgJiYgKGhhc0RlY2xhcmVkUGFyYW1ldGVyKCppZGVudCkgfHwgaGFzRGVjbGFyZWRWYXJpYWJs
ZSgqaWRlbnQpKSkKICAgICAgICAgICAgIHJldHVybiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxp
ZER1cGxpY2F0ZURlY2xhcmF0aW9uOwogCi0gICAgICAgIHdoaWxlICghbV9zY29wZVN0YWNrW2ld
LmFsbG93c0xleGljYWxEZWNsYXJhdGlvbnMoKSkgewotICAgICAgICAgICAgaS0tOwotICAgICAg
ICAgICAgQVNTRVJUKGkgPCBtX3Njb3BlU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGN1
cnJlbnRMZXhpY2FsRGVjbGFyYXRpb25TY29wZSgpLT5kZWNsYXJlTGV4aWNhbFZhcmlhYmxlKGlk
ZW50LCB0eXBlID09IERlY2xhcmF0aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlvbiwgaW1wb3J0VHlw
ZSk7CisgICAgfQorCisgICAgc3RkOjpwYWlyPERlY2xhcmF0aW9uUmVzdWx0TWFzaywgU2NvcGVS
ZWY+IGRlY2xhcmVGdW5jdGlvbihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3N0YXRlbWVudERlcHRoID09IDEgfHwgIXN0cmljdE1vZGUoKSkgeworICAgICAg
ICAgICAgLy8gRnVuY3Rpb25zIGRlY2xhcmVkIGF0IHRoZSB0b3AtbW9zdCBzY29wZSAoYm90aCBp
biBzbG9wcHkgYW5kIHN0cmljdCBtb2RlKSBhcmUgZGVjbGFyZWQgYXMgdmFycworICAgICAgICAg
ICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGlzIGFsbG93cyB1cyB0byBkZWNs
YXJlIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgbW9yZSB0aGFuIG9uY2UuCisgICAgICAg
ICAgICAvLyBJbiBzbG9wcHkgbW9kZSwgd2UgYWx3YXlzIGRlY2xhcmUgZnVuY3Rpb25zIGFzIHZh
cnMuCisgICAgICAgICAgICBib29sIGRlY2xhcmVBc1ZhciA9IHRydWU7CisgICAgICAgICAgICBT
Y29wZVJlZiB2YXJpYWJsZVNjb3BlID0gY3VycmVudFZhcmlhYmxlU2NvcGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih2YXJpYWJsZVNjb3BlLT5kZWNsYXJlRnVuY3Rpb24o
aWRlbnQsIGRlY2xhcmVBc1ZhciksIHZhcmlhYmxlU2NvcGUpOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIG1fc2NvcGVTdGFja1tpXS5kZWNsYXJlTGV4aWNhbFZhcmlhYmxlKGlkZW50LCB0
eXBlID09IERlY2xhcmF0aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlvbiwgaW1wb3J0VHlwZSk7Cisg
ICAgICAgIGJvb2wgZGVjbGFyZUFzVmFyID0gZmFsc2U7CisgICAgICAgIFNjb3BlUmVmIGxleGlj
YWxWYXJpYWJsZVNjb3BlID0gY3VycmVudExleGljYWxEZWNsYXJhdGlvblNjb3BlKCk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZXhpY2FsVmFyaWFibGVTY29wZS0+ZGVjbGFyZUZ1
bmN0aW9uKGlkZW50LCBkZWNsYXJlQXNWYXIpLCBsZXhpY2FsVmFyaWFibGVTY29wZSk7CiAgICAg
fQotICAgIAorCiAgICAgTkVWRVJfSU5MSU5FIGJvb2wgaGFzRGVjbGFyZWRWYXJpYWJsZShjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBtX3Njb3Bl
U3RhY2suc2l6ZSgpIC0gMTsKQEAgLTEwNjEsNyArMTExMyw3IEBAIHByaXZhdGU6CiAgICAgUGFy
c2VyKCk7CiAgICAgU3RyaW5nIHBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmllciYsIFNvdXJjZVBh
cnNlTW9kZSk7CiAKLSAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBE
ZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBD
b2RlRmVhdHVyZXMsIGludCk7CisgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1l
bnRzKiwgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9u
bWVudCYsIENvZGVGZWF0dXJlcywgaW50KTsKIAogICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHR5
cGUgb2YgZXJyb3IgdG8gcmVwb3J0LgogICAgIGJvb2wgaXNGdW5jdGlvbk1ldGFkYXRhTm9kZShT
Y29wZU5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTU0Myw3ICsxNTk1LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlcgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kQ29sdW1uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zb3VyY2VFbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFyRGVjbGFyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9mdW5jRGVjbGFyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV1RGTW92ZShtX2Z1bmNEZWNsYXJhdGlvbnMpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPmZpbmFsaXplTGV4aWNhbEVudmlyb25tZW50KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFtZXRlcnMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTk3ODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJZYXJyU3ludGF4Q2hlY2tlci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICAKKwogY2xhc3MgU3ludGF4Q2hlY2tlciB7CiBwdWJs
aWM6CiAgICAgc3RydWN0IEJpbmFyeUV4cHJDb250ZXh0IHsKQEAgLTIzMCw3ICsyMzAsNyBAQCBw
dWJsaWM6CiAgICAgaW50IGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYpIHsgcmV0dXJu
IFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVDbGFzc0RlY2xTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgQ2xhc3NFeHByZXNzaW9uLAogICAgICAgICBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIFN0
YXRlbWVudFJlc3VsdDsgfQotICAgIGludCBjcmVhdGVCbG9ja1N0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50LCBWYXJpYWJsZUVudmlyb25tZW50JikgeyByZXR1
cm4gU3RhdGVtZW50UmVzdWx0OyB9CisgICAgaW50IGNyZWF0ZUJsb2NrU3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBpbnQsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBE
ZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYmKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1
bHQ7IH0KICAgICBpbnQgY3JlYXRlRXhwclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3Jl
YXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50
KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlSWZTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJu
IFN0YXRlbWVudFJlc3VsdDsgfQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHB1YmxpYzoKICAgICBpbnQg
Y3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQp
IHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVDb250aW51ZVN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50LCBpbnQp
IHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVUcnlTdGF0ZW1lbnQo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgVmFy
aWFibGVFbnZpcm9ubWVudCYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQotICAgIGludCBj
cmVhdGVTd2l0Y2hTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgVmFyaWFibGVFbnZpcm9ubWVudCYpIHsgcmV0dXJuIFN0YXRlbWVu
dFJlc3VsdDsgfQorICAgIGludCBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiYpIHsgcmV0dXJuIFN0YXRlbWVu
dFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVXaGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQog
ICAgIGludCBjcmVhdGVXaXRoU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAg
IGludCBjcmVhdGVEb1doaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAkocmV2
aXNpb24gMTk3ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVu
dmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgcHVibGljOgogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc0V4cG9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYg
SXNFeHBvcnRlZDsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0ltcG9ydGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRzICYgSXNJbXBvcnRlZDsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0ltcG9ydGVkTmFtZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgSXNJbXBvcnRlZE5h
bWVzcGFjZTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRzICYgSXNGdW5jdGlvbjsgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dElzQ2FwdHVyZWQoKSB7IG1fYml0cyB8PSBJc0NhcHR1cmVkOyB9CiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldElzQ29uc3QoKSB7IG1fYml0cyB8PSBJc0NvbnN0OyB9CkBAIC00OCwxOCArNDks
MjAgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJc0V4cG9ydGVkKCkgeyBt
X2JpdHMgfD0gSXNFeHBvcnRlZDsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJc0ltcG9y
dGVkKCkgeyBtX2JpdHMgfD0gSXNJbXBvcnRlZDsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXRJc0ltcG9ydGVkTmFtZXNwYWNlKCkgeyBtX2JpdHMgfD0gSXNJbXBvcnRlZE5hbWVzcGFjZTsg
fQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJc0Z1bmN0aW9uKCkgeyBtX2JpdHMgfD0gSXNG
dW5jdGlvbjsgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFySXNWYXIoKSB7IG1fYml0
cyAmPSB+SXNWYXI7IH0KIAogcHJpdmF0ZToKLSAgICBlbnVtIFRyYWl0cyB7CisgICAgZW51bSBU
cmFpdHMgOiB1aW50OF90IHsKICAgICAgICAgSXNDYXB0dXJlZCA9IDEgPDwgMCwKICAgICAgICAg
SXNDb25zdCA9IDEgPDwgMSwKICAgICAgICAgSXNWYXIgPSAxIDw8IDIsCiAgICAgICAgIElzTGV0
ID0gMSA8PCAzLAogICAgICAgICBJc0V4cG9ydGVkID0gMSA8PCA0LAogICAgICAgICBJc0ltcG9y
dGVkID0gMSA8PCA1LAotICAgICAgICBJc0ltcG9ydGVkTmFtZXNwYWNlID0gMSA8PCA2CisgICAg
ICAgIElzSW1wb3J0ZWROYW1lc3BhY2UgPSAxIDw8IDYsCisgICAgICAgIElzRnVuY3Rpb24gPSAx
IDw8IDcKICAgICB9OwogICAgIHVpbnQ4X3QgbV9iaXRzIHsgMCB9OwogfTsKQEAgLTcyLDYgKzc1
LDE1IEBAIGNsYXNzIFZhcmlhYmxlRW52aXJvbm1lbnQgewogcHJpdmF0ZToKICAgICB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgVmFyaWFibGVFbnZpcm9ubWVudEVu
dHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8VW5pcXVlZFN0cmluZ0lt
cGw+PiwgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5SGFzaFRyYWl0cz4gTWFwOwogcHVibGljOgor
ICAgIFZhcmlhYmxlRW52aXJvbm1lbnQoKQorICAgIHsgfQorICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQoVmFyaWFibGVFbnZpcm9ubWVudCYmIG90aGVyKQorICAgICAgICA6IG1fbWFwKFdURk1vdmUo
b3RoZXIubV9tYXApKQorICAgICAgICAsIG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQob3RoZXIubV9p
c0V2ZXJ5dGhpbmdDYXB0dXJlZCkKKyAgICB7IH0KKyAgICBWYXJpYWJsZUVudmlyb25tZW50KGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIG90aGVyKSA9IGRlZmF1bHQ7CisgICAgVmFyaWFibGVF
bnZpcm9ubWVudCYgb3BlcmF0b3I9KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIG90aGVyKSA9
IGRlZmF1bHQ7CisKICAgICBBTFdBWVNfSU5MSU5FIE1hcDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgQUxXQVlTX0lOTElORSBNYXA6Oml0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBNYXA6OmNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAkocmV2aXNpb24gMTk3ODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC03NTMs
NyArNzUzLDcgQEAKIC0gcGF0aDogZXM2L2Fycm93X2Z1bmN0aW9uc19ub19wcm90b3R5cGVfcHJv
cGVydHkuanMKICAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvYmxvY2stbGV2ZWxf
ZnVuY3Rpb25fZGVjbGFyYXRpb24uanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5F
UzYgOm5vcm1hbAogLSBwYXRoOiBlczYvZGVzdHJ1Y3R1cmluZ19jb21wdXRlZF9wcm9wZXJ0aWVz
LmpzCiAgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L2Rlc3RydWN0dXJpbmdfZGVm
YXVsdHNfaW5fcGFyYW1ldGVyc19zZXBhcmF0ZV9zY29wZS5qcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9ibG9jay1zY29wZWQtZnVuY3Rpb24tZGVjbGFyYXRpb25z
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmxv
Y2stc2NvcGVkLWZ1bmN0aW9uLWRlY2xhcmF0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmxvY2stc2NvcGVkLWZ1bmN0aW9uLWRlY2xh
cmF0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBAQAorInVzZSBzdHJpY3Qi
OworCitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJCYWQgYXNzZXJ0aW9uIikKK30KKworZnVuY3Rpb24gdGVzdChmKSB7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykKKyAgICAgICAgZigpOworfQorCit7CisgICAgbGV0
IGNhbGxlZCA9IGZhbHNlOworICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgICAgY2FsbGVkID0g
dHJ1ZTsKKyAgICAgICAgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gMjU7IH0KKyAgICAgICAgYXNz
ZXJ0KGJhcigpID09PSAyNSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGJhcigp
IHsgcmV0dXJuIDMwOyB9CisgICAgICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDMwKTsKKyAgICAg
ICAgfQorICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDI1KTsKKyAgICB9CisgICAgdGVzdChmb28p
OworICAgIGFzc2VydChjYWxsZWQpOworfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
ICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgYXNz
ZXJ0KGJhcigpID09PSAyNSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChiYXIoKSA9
PT0gMzApOworICAgICAgICAgICAgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gMzA7IH0KKyAgICAg
ICAgfQorICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDI1KTsKKworICAgICAgICBmdW5jdGlvbiBi
YXIoKSB7IHJldHVybiAyNTsgfQorICAgIH0KKyAgICB0ZXN0KGZvbyk7CisgICAgYXNzZXJ0KGNh
bGxlZCk7Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZm9v
KCkgeworICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICBmdW5jdGlvbiBmb28oKSB7IHJl
dHVybiBiYXIoKTsgfQorICAgICAgICBmdW5jdGlvbiBiYXIoKSB7IHJldHVybiAyNTsgfQorICAg
ICAgICBhc3NlcnQoYmFyKCkgPT09IDI1KTsKKyAgICAgICAgYXNzZXJ0KGZvbygpID09PSAyNSk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGJhcigpIHsgcmV0dXJuIDMwOyB9Cisg
ICAgICAgICAgICBmdW5jdGlvbiBmb28oKSB7IHJldHVybiAyNTsgfQorICAgICAgICAgICAgYXNz
ZXJ0KGJhcigpID09PSAzMCk7CisgICAgICAgICAgICBhc3NlcnQoZm9vKCkgPT09IDI1KTsKKyAg
ICAgICAgfQorICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDI1KTsKKyAgICAgICAgYXNzZXJ0KGZv
bygpID09PSAyNSk7CisgICAgfQorICAgIHRlc3QoZm9vKTsKKyAgICBhc3NlcnQoY2FsbGVkKTsK
K30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBmb28oKSB7Cisg
ICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgIGFzc2VydChiYXIoKSA9PT0gMjUpOworICAg
ICAgICBhc3NlcnQoZm9vKCkgPT09IDI1KTsKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rp
b24gYmFyKCkgeyByZXR1cm4gMzA7IH0KKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvbygpIHsgcmV0
dXJuIDI1OyB9CisgICAgICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDMwKTsKKyAgICAgICAgICAg
IGFzc2VydChmb28oKSA9PT0gMjUpOworICAgICAgICB9CisgICAgICAgIGFzc2VydChiYXIoKSA9
PT0gMjUpOworICAgICAgICBhc3NlcnQoZm9vKCkgPT09IDI1KTsKKworICAgICAgICBmdW5jdGlv
biBmb28oKSB7IHJldHVybiBiYXIoKTsgfQorICAgICAgICBmdW5jdGlvbiBiYXIoKSB7IHJldHVy
biAyNTsgfQorICAgIH0KKyAgICB0ZXN0KGZvbyk7CisgICAgYXNzZXJ0KGNhbGxlZCk7Cit9CisK
K3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAg
ICBjYWxsZWQgPSB0cnVlOworICAgICAgICBsZXQgaXNEZWZhdWx0ID0gZmFsc2U7CisgICAgICAg
IHN3aXRjaCAoJ2ZvbycpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgZnVuY3Rpb24g
Zm9vKCkgeyByZXR1cm4gMjU7IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICBmdW5jdGlvbiBiYXIoKSB7IHJldHVybiAzMDsgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpc0RlZmF1bHQgPSB0cnVlOwor
ICAgICAgICAgICAgYXNzZXJ0KGZvbygpID09PSAyNSk7CisgICAgICAgICAgICBhc3NlcnQoYmFy
KCkgPT09IDMwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFzc2Vy
dChpc0RlZmF1bHQpOworICAgIH0KKyAgICB0ZXN0KGZvbyk7CisgICAgYXNzZXJ0KGNhbGxlZCk7
Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZm9vKCkgewor
ICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICBsZXQgaXMxID0gZmFsc2U7CisgICAgICAg
IHN3aXRjaCAoMSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpczEgPSB0cnVlOwor
ICAgICAgICAgICAgZnVuY3Rpb24gZm9vKCkgeyByZXR1cm4gMjU7IH0KKyAgICAgICAgICAgIGFz
c2VydChmb28oKSA9PT0gMjUpOworICAgICAgICAgICAgYXNzZXJ0KGJhcigpID09PSAzMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgZnVuY3Rpb24g
YmFyKCkgeyByZXR1cm4gMzA7IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGFzc2VydChpczEpOworICAgIH0KKyAgICB0ZXN0KGZvbyk7CisgICAgYXNzZXJ0KGNhbGxl
ZCk7Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZm9vKCkg
eworICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICBmdW5jdGlvbiBmb28oKSB7IHJldHVy
biAyNTsgfQorICAgICAgICBmdW5jdGlvbiBiYXIoKSB7IHJldHVybiAiYmFyIjsgfQorICAgICAg
ICBsZXQgaXMyID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoMikgeworICAgICAgICBjYXNlIDE6
IHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvbygpIHsgcmV0dXJuIDMwOyB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpczIgPSB0
cnVlOworICAgICAgICAgICAgZnVuY3Rpb24gYmFyKCkgeyByZXR1cm4gMzA7IH0KKyAgICAgICAg
ICAgIGFzc2VydChiYXIoKSA9PT0gMzApOworICAgICAgICAgICAgYXNzZXJ0KGZvbygpID09PSAy
NSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoaXMyKTsK
KyAgICAgICAgYXNzZXJ0KGJhcigpID09PSAiYmFyIik7CisgICAgICAgIGFzc2VydChmb28oKSA9
PT0gMjUpOworICAgIH0KKyAgICB0ZXN0KGZvbyk7CisgICAgYXNzZXJ0KGNhbGxlZCk7Cit9CisK
K3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAg
ICBjYWxsZWQgPSB0cnVlOworICAgICAgICBmdW5jdGlvbiBmb28oKSB7IHJldHVybiAyNTsgfQor
ICAgICAgICBmdW5jdGlvbiBiYXIoKSB7IHJldHVybiAiYmFyIjsgfQorICAgICAgICBsZXQgY2Fw
dHVyZSA9ICgpID0+IGZvbyArICIiICsgYmFyOworICAgICAgICBsZXQgaXMyID0gZmFsc2U7Cisg
ICAgICAgIHN3aXRjaCAoMikgeworICAgICAgICBjYXNlIDE6IHsKKyAgICAgICAgICAgIGZ1bmN0
aW9uIGZvbygpIHsgcmV0dXJuIDMwOyB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpczIgPSB0cnVlOworICAgICAgICAgICAgZnVu
Y3Rpb24gYmFyKCkgeyByZXR1cm4gMzA7IH0KKyAgICAgICAgICAgIGxldCBjYXB0dXJlID0gKCkg
PT4gYmFyOworICAgICAgICAgICAgYXNzZXJ0KGJhcigpID09PSAzMCk7CisgICAgICAgICAgICBh
c3NlcnQoZm9vKCkgPT09IDI1KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGFzc2VydChpczIpOworICAgICAgICBhc3NlcnQoYmFyKCkgPT09ICJiYXIiKTsKKyAgICAg
ICAgYXNzZXJ0KGZvbygpID09PSAyNSk7CisgICAgfQorICAgIHRlc3QoZm9vKTsKKyAgICBhc3Nl
cnQoY2FsbGVkKTsKK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBmdW5jdGlv
biBmb28oKSB7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgIGxldCBmMTsKKyAgICAg
ICAgbGV0IGYyID0gZm9vOworICAgICAgICBmdW5jdGlvbiBmb28oKSB7IH0KKyAgICAgICAgaWYg
KHRydWUpIHsKKyAgICAgICAgICAgIGYxID0gZm9vOworICAgICAgICAgICAgZnVuY3Rpb24gZm9v
KCkgeyB9CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KCEhZjEgJiYgISFmMik7CisgICAgICAg
IGFzc2VydChmMSAhPT0gZjIpOworICAgIH0KKyAgICB0ZXN0KGZvbyk7CisgICAgYXNzZXJ0KGNh
bGxlZCk7Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZm9v
KCkgeworICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICBsZXQgZjE7CisgICAgICAgIGxl
dCBmMiA9IGZvbzsKKyAgICAgICAgZnVuY3Rpb24gZm9vKCkgeyB9CisgICAgICAgIGxldCBjYXB0
dXJlID0gKCkgPT4gZm9vOworICAgICAgICBpZiAodHJ1ZSkgeworICAgICAgICAgICAgZjEgPSBm
b287CisgICAgICAgICAgICBmdW5jdGlvbiBmb28oKSB7IH0KKyAgICAgICAgICAgIGxldCBjYXB0
dXJlID0gKCkgPT4gZm9vOworICAgICAgICB9CisgICAgICAgIGFzc2VydCghIWYxICYmICEhZjIp
OworICAgICAgICBhc3NlcnQoZjEgIT09IGYyKTsKKyAgICB9CisgICAgdGVzdChmb28pOworICAg
IGFzc2VydChjYWxsZWQpOworfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3ODY4KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDMt
MDkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRVM2OiBJbXBs
ZW1lbnQgbGV4aWNhbCBzY29waW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBzdHJpY3Qg
bW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUy
ODQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBq
cy9sZXQtc3ludGF4LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9wYXJzZXItc3ludGF4LWNo
ZWNrLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvcGFyc2VyLXN5bnRh
eC1jaGVjay5qczoKKyAgICAgICAgKHRlc3RGYWlsZWQpOgorICAgICAgICAocnVuVGVzdCk6CisK
IDIwMTYtMDMtMDkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZWNtYU5hbWUoKSBzaG91bGQgbm90IGJlIGJhc2VkIG9uIGluZmVy
cmVkTmFtZSgpLgpJbmRleDogTGF5b3V0VGVzdHMvanMvbGV0LXN5bnRheC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvbGV0LXN5bnRheC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE5Nzg2OCkKKysrIExheW91dFRlc3RzL2pzL2xldC1zeW50YXgtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTEgKzMxNSwxMSBAQCBQQVNTIEhhcyBzeW50YXggZXJy
b3I6ICdmdW5jdGlvbiBmKCkgeyBsCiBTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSB2YXIg
dmFyaWFibGUgdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2NsYXNzIHZhcmlhYmxlOiAneCcuCiBT
eW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSB2YXIgdmFyaWFibGUgdGhhdCBzaGFkb3dzIGEg
bGV0L2NvbnN0L2NsYXNzIHZhcmlhYmxlOiAneCcuCiBQQVNTIEhhcyBzeW50YXggZXJyb3I6ICcn
dXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYoKSB7IGxldCB4OyB2YXIgW3hdID0gMjA7IH0nCi1TeW50
YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiB0aGF0IHNoYWRvd3MgYSBsZXQvY29u
c3QvY2xhc3MgdmFyaWFibGUgJ3gnIGluIHN0cmljdCBtb2RlLgotU3ludGF4RXJyb3I6IENhbm5v
dCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2NsYXNzIHZhcmlh
YmxlICd4JyBpbiBzdHJpY3QgbW9kZS4KK1N5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIGZ1
bmN0aW9uIHRoYXQgc2hhZG93cyBhIGxldC9jb25zdC9jbGFzcy9mdW5jdGlvbiB2YXJpYWJsZSAn
eCcgaW4gc3RyaWN0IG1vZGUuCitTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlv
biB0aGF0IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MvZnVuY3Rpb24gdmFyaWFibGUgJ3gnIGlu
IHN0cmljdCBtb2RlLgogUEFTUyBIYXMgc3ludGF4IGVycm9yOiAnZnVuY3Rpb24gZigpIHsgbGV0
IHg7ICBmdW5jdGlvbiB4KCl7fSB9JwotU3ludGF4RXJyb3I6IENhbm5vdCBkZWNsYXJlIGEgZnVu
Y3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2NsYXNzIHZhcmlhYmxlICd4JyBpbiBzdHJp
Y3QgbW9kZS4KLVN5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIHRoYXQgc2hh
ZG93cyBhIGxldC9jb25zdC9jbGFzcyB2YXJpYWJsZSAneCcgaW4gc3RyaWN0IG1vZGUuCitTeW50
YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiB0aGF0IHNoYWRvd3MgYSBsZXQvY29u
c3QvY2xhc3MvZnVuY3Rpb24gdmFyaWFibGUgJ3gnIGluIHN0cmljdCBtb2RlLgorU3ludGF4RXJy
b3I6IENhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2Ns
YXNzL2Z1bmN0aW9uIHZhcmlhYmxlICd4JyBpbiBzdHJpY3QgbW9kZS4KIFBBU1MgSGFzIHN5bnRh
eCBlcnJvcjogJyd1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZigpIHsgbGV0IHg7ICBmdW5jdGlvbiB4
KCl7fSB9JwogU3ludGF4RXJyb3I6IENhbm5vdCBkZWNsYXJlIGEgbGV0IHZhcmlhYmxlIHR3aWNl
OiAneCcuCiBTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBsZXQgdmFyaWFibGUgdHdpY2U6
ICd4Jy4KQEAgLTM0NSwxMSArMzQ1LDExIEBAIFBBU1MgSGFzIHN5bnRheCBlcnJvcjogJ2Z1bmN0
aW9uIGYoKSB7IGMKIFN5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIHZhciB2YXJpYWJsZSB0
aGF0IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MgdmFyaWFibGU6ICd4Jy4KIFN5bnRheEVycm9y
OiBDYW5ub3QgZGVjbGFyZSBhIHZhciB2YXJpYWJsZSB0aGF0IHNoYWRvd3MgYSBsZXQvY29uc3Qv
Y2xhc3MgdmFyaWFibGU6ICd4Jy4KIFBBU1MgSGFzIHN5bnRheCBlcnJvcjogJyd1c2Ugc3RyaWN0
JzsgZnVuY3Rpb24gZigpIHsgY29uc3QgeCA9IDIwOyB2YXIgW3hdID0gMjA7IH0nCi1TeW50YXhF
cnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiB0aGF0IHNoYWRvd3MgYSBsZXQvY29uc3Qv
Y2xhc3MgdmFyaWFibGUgJ3gnIGluIHN0cmljdCBtb2RlLgotU3ludGF4RXJyb3I6IENhbm5vdCBk
ZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2NsYXNzIHZhcmlhYmxl
ICd4JyBpbiBzdHJpY3QgbW9kZS4KK1N5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0
aW9uIHRoYXQgc2hhZG93cyBhIGxldC9jb25zdC9jbGFzcy9mdW5jdGlvbiB2YXJpYWJsZSAneCcg
aW4gc3RyaWN0IG1vZGUuCitTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiB0
aGF0IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MvZnVuY3Rpb24gdmFyaWFibGUgJ3gnIGluIHN0
cmljdCBtb2RlLgogUEFTUyBIYXMgc3ludGF4IGVycm9yOiAnZnVuY3Rpb24gZigpIHsgY29uc3Qg
eCA9IDIwOyAgZnVuY3Rpb24geCgpe30gfScKLVN5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBh
IGZ1bmN0aW9uIHRoYXQgc2hhZG93cyBhIGxldC9jb25zdC9jbGFzcyB2YXJpYWJsZSAneCcgaW4g
c3RyaWN0IG1vZGUuCi1TeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiB0aGF0
IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MgdmFyaWFibGUgJ3gnIGluIHN0cmljdCBtb2RlLgor
U3ludGF4RXJyb3I6IENhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0
L2NvbnN0L2NsYXNzL2Z1bmN0aW9uIHZhcmlhYmxlICd4JyBpbiBzdHJpY3QgbW9kZS4KK1N5bnRh
eEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIHRoYXQgc2hhZG93cyBhIGxldC9jb25z
dC9jbGFzcy9mdW5jdGlvbiB2YXJpYWJsZSAneCcgaW4gc3RyaWN0IG1vZGUuCiBQQVNTIEhhcyBz
eW50YXggZXJyb3I6ICcndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYoKSB7IGNvbnN0IHggPSAyMDsg
IGZ1bmN0aW9uIHgoKXt9IH0nCiBTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBjb25zdCB2
YXJpYWJsZSB0d2ljZTogJ3gnLgogU3ludGF4RXJyb3I6IENhbm5vdCBkZWNsYXJlIGEgY29uc3Qg
dmFyaWFibGUgdHdpY2U6ICd4Jy4KQEAgLTM3NSwxMSArMzc1LDExIEBAIFBBU1MgSGFzIHN5bnRh
eCBlcnJvcjogJ2Z1bmN0aW9uIGYoKSB7IGMKIFN5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBh
IHZhciB2YXJpYWJsZSB0aGF0IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MgdmFyaWFibGU6ICd4
Jy4KIFN5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIHZhciB2YXJpYWJsZSB0aGF0IHNoYWRv
d3MgYSBsZXQvY29uc3QvY2xhc3MgdmFyaWFibGU6ICd4Jy4KIFBBU1MgSGFzIHN5bnRheCBlcnJv
cjogJyd1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZigpIHsgY2xhc3MgeHt9OyB2YXIgW3hdID0gMjA7
IH0nCi1TeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlvbiB0aGF0IHNoYWRvd3Mg
YSBsZXQvY29uc3QvY2xhc3MgdmFyaWFibGUgJ3gnIGluIHN0cmljdCBtb2RlLgotU3ludGF4RXJy
b3I6IENhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIGEgbGV0L2NvbnN0L2Ns
YXNzIHZhcmlhYmxlICd4JyBpbiBzdHJpY3QgbW9kZS4KK1N5bnRheEVycm9yOiBDYW5ub3QgZGVj
bGFyZSBhIGZ1bmN0aW9uIHRoYXQgc2hhZG93cyBhIGxldC9jb25zdC9jbGFzcy9mdW5jdGlvbiB2
YXJpYWJsZSAneCcgaW4gc3RyaWN0IG1vZGUuCitTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUg
YSBmdW5jdGlvbiB0aGF0IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MvZnVuY3Rpb24gdmFyaWFi
bGUgJ3gnIGluIHN0cmljdCBtb2RlLgogUEFTUyBIYXMgc3ludGF4IGVycm9yOiAnZnVuY3Rpb24g
ZigpIHsgY2xhc3MgeHt9OyAgZnVuY3Rpb24geCgpe30gfScKLVN5bnRheEVycm9yOiBDYW5ub3Qg
ZGVjbGFyZSBhIGZ1bmN0aW9uIHRoYXQgc2hhZG93cyBhIGxldC9jb25zdC9jbGFzcyB2YXJpYWJs
ZSAneCcgaW4gc3RyaWN0IG1vZGUuCi1TeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBmdW5j
dGlvbiB0aGF0IHNoYWRvd3MgYSBsZXQvY29uc3QvY2xhc3MgdmFyaWFibGUgJ3gnIGluIHN0cmlj
dCBtb2RlLgorU3ludGF4RXJyb3I6IENhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBzaGFk
b3dzIGEgbGV0L2NvbnN0L2NsYXNzL2Z1bmN0aW9uIHZhcmlhYmxlICd4JyBpbiBzdHJpY3QgbW9k
ZS4KK1N5bnRheEVycm9yOiBDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIHRoYXQgc2hhZG93cyBh
IGxldC9jb25zdC9jbGFzcy9mdW5jdGlvbiB2YXJpYWJsZSAneCcgaW4gc3RyaWN0IG1vZGUuCiBQ
QVNTIEhhcyBzeW50YXggZXJyb3I6ICcndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYoKSB7IGNsYXNz
IHh7fTsgIGZ1bmN0aW9uIHgoKXt9IH0nCiBTeW50YXhFcnJvcjogQ2Fubm90IGRlY2xhcmUgYSBj
bGFzcyB0d2ljZTogJ3gnLgogU3ludGF4RXJyb3I6IENhbm5vdCBkZWNsYXJlIGEgY2xhc3MgdHdp
Y2U6ICd4Jy4KSW5kZXg6IExheW91dFRlc3RzL2pzL3BhcnNlci1zeW50YXgtY2hlY2stZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3BhcnNlci1zeW50YXgtY2hlY2st
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxOTc4NjgpCisrKyBMYXlvdXRUZXN0cy9qcy9wYXJzZXIt
c3ludGF4LWNoZWNrLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjI4LDE4ICs2Mjgs
NTYgQEAgUEFTUyBWYWxpZDogICAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMQogUEFTUyBWYWxp
ZDogICAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0
aW9uIGYyKGIpIHsgcmV0dXJuIGI7IH0gcmV0dXJuIGYyKGEpOyB9IGYxKDUpOyB9IgogUEFTUyBW
YWxpZDogICAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsg
ZnVuY3Rpb24gZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMoYik7IH0gcmV0dXJuIGYyKGEp
OyB9IGYxKDUpOyIKIFBBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3RyaWN0Jzsg
ZnVuY3Rpb24gZjEoYSkgeyBmdW5jdGlvbiBmMihiKSB7IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJu
IGM7IH0gcmV0dXJuIGYzKGIpOyB9IHJldHVybiBmMihhKTsgfSBmMSg1KTsgfSIKLVBBU1MgSW52
YWxpZDogIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBpZiAoYSkgeyBmdW5jdGlvbiBm
MihiKSB7IHJldHVybiBiOyB9IHJldHVybiBmMihhKTsgfSBlbHNlIHJldHVybiBhOyB9IGYxKDUp
OyIKLVBBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3RyaWN0JzsgZnVuY3Rpb24g
ZjEoYSkgeyBpZiAoYSkgeyBmdW5jdGlvbiBmMihiKSB7IHJldHVybiBiOyB9IHJldHVybiBmMihh
KTsgfSBlbHNlIHJldHVybiBhOyB9IGYxKDUpOyB9IgotUEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJp
Y3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgaWYgKGIpIHsgZnVuY3Rpb24g
ZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMoYik7IH0gZWxzZSByZXR1cm4gYjsgfSByZXR1
cm4gZjIoYSk7IH0gZjEoNSk7IgotUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBz
dHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgaWYgKGIpIHsgZnVuY3Rp
b24gZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMoYik7IH0gZWxzZSByZXR1cm4gYjsgfSBy
ZXR1cm4gZjIoYSk7IH0gZjEoNSk7IH0iCitQQVNTIFZhbGlkOiAgICIndXNlIHN0cmljdCc7IGZ1
bmN0aW9uIGYxKGEpIHsgaWYgKGEpIHsgZnVuY3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1
cm4gZjIoYSk7IH0gZWxzZSByZXR1cm4gYTsgfSBmMSg1KTsiCitQQVNTIFZhbGlkOiAgICJmdW5j
dGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgaWYgKGEpIHsgZnVuY3Rp
b24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0gZWxzZSByZXR1cm4gYTsgfSBm
MSg1KTsgfSIKK1BBU1MgVmFsaWQ6ICAgIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBm
dW5jdGlvbiBmMihiKSB7IGlmIChiKSB7IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJuIGM7IH0gcmV0
dXJuIGYzKGIpOyB9IGVsc2UgcmV0dXJuIGI7IH0gcmV0dXJuIGYyKGEpOyB9IGYxKDUpOyIKK1BB
U1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkg
eyBmdW5jdGlvbiBmMihiKSB7IGlmIChiKSB7IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJuIGM7IH0g
cmV0dXJuIGYzKGIpOyB9IGVsc2UgcmV0dXJuIGI7IH0gcmV0dXJuIGYyKGEpOyB9IGYxKDUpOyB9
IgorUEFTUyBWYWxpZDogICAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7fTsgZnVuY3Rp
b24gZjEoYSkge307IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3Qn
OyBmdW5jdGlvbiBmMShhKSB7fTsgZnVuY3Rpb24gZjEoYSkge307IH0iCitQQVNTIEludmFsaWQ6
ICIndXNlIHN0cmljdCc7IHsgZnVuY3Rpb24gZjEoYSkge307IGZ1bmN0aW9uIGYxKGEpIHt9OyB9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyB7IGZ1bmN0aW9u
IGYxKGEpIHt9OyBmdW5jdGlvbiBmMShhKSB7fTsgfSB9IgorUEFTUyBJbnZhbGlkOiAiJ3VzZSBz
dHJpY3QnOyB7IGxldCBmMTsgZnVuY3Rpb24gZjEoYSkge307IH0iCitQQVNTIEludmFsaWQ6ICJm
dW5jdGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IHsgbGV0IGYxOyBmdW5jdGlvbiBmMShhKSB7fTsg
fSB9IgorUEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJpY3QnOyB7IGZ1bmN0aW9uIGYxKGEpIHt9OyBs
ZXQgZjE7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IHsg
ZnVuY3Rpb24gZjEoYSkge307IGxldCBmMTsgfSB9IgorUEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJp
Y3QnOyBsZXQgZjE7IGZ1bmN0aW9uIGYxKGEpIHt9OyIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9u
IGYoKSB7ICd1c2Ugc3RyaWN0JzsgbGV0IGYxOyBmdW5jdGlvbiBmMShhKSB7fTsgfSIKK1BBU1Mg
SW52YWxpZDogIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkge307IGxldCBmMTsgIgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7
fTsgbGV0IGYxOyAgfSIKK1BBU1MgSW52YWxpZDogImxldCBmMTsgZnVuY3Rpb24gZjEoYSkge307
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgbGV0IGYxOyBmdW5jdGlvbiBmMShhKSB7
fTsgfSIKK1BBU1MgSW52YWxpZDogImxldCBmMTsgeyBmdW5jdGlvbiBmMShhKSB7fTsgfSIKK1BB
U1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGxldCBmMTsgeyBmdW5jdGlvbiBmMShhKSB7fTsg
fSB9IgorUEFTUyBJbnZhbGlkOiAieyBmdW5jdGlvbiBmMShhKSB7fTsgfSBsZXQgZjE7IgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgeyBmdW5jdGlvbiBmMShhKSB7fTsgfSBsZXQgZjE7
IH0iCitQQVNTIFZhbGlkOiAgICJ7IGxldCBmMTsgZnVuY3Rpb24gZjEoYSkge307IH0iCitQQVNT
IFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyB7IGxldCBmMTsgZnVuY3Rpb24gZjEoYSkge307IH0g
fSIKK1BBU1MgVmFsaWQ6ICAgInsgIGZ1bmN0aW9uIGYxKGEpIHt9OyBsZXQgZjE7IH0iCitQQVNT
IFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyB7ICBmdW5jdGlvbiBmMShhKSB7fTsgbGV0IGYxOyB9
IH0iCitQQVNTIFZhbGlkOiAgICJzd2l0Y2goJ2ZvbycpIHsgY2FzZSAxOiBmdW5jdGlvbiBmb28o
KSB7fTsgYnJlYWs7IGNhc2UgMjogZnVuY3Rpb24gZm9vKCkge307IGJyZWFrOyB9IgorUEFTUyBW
YWxpZDogICAiZnVuY3Rpb24gZigpIHsgc3dpdGNoKCdmb28nKSB7IGNhc2UgMTogZnVuY3Rpb24g
Zm9vKCkge307IGJyZWFrOyBjYXNlIDI6IGZ1bmN0aW9uIGZvbygpIHt9OyBicmVhazsgfSB9Igor
UEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJpY3QnOyBzd2l0Y2goJ2ZvbycpIHsgY2FzZSAxOiBmdW5j
dGlvbiBmb28oKSB7fTsgYnJlYWs7IGNhc2UgMjogZnVuY3Rpb24gZm9vKCkge307IGJyZWFrOyB9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBzd2l0Y2goJ2Zv
bycpIHsgY2FzZSAxOiBmdW5jdGlvbiBmb28oKSB7fTsgYnJlYWs7IGNhc2UgMjogZnVuY3Rpb24g
Zm9vKCkge307IGJyZWFrOyB9IH0iCitQQVNTIEludmFsaWQ6ICIndXNlIHN0cmljdCc7IHN3aXRj
aCgnZm9vJykgeyBjYXNlIDE6IGZ1bmN0aW9uIGZvbygpIHt9OyBicmVhazsgY2FzZSAyOiBsZXQg
Zm9vOyBicmVhazsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3RyaWN0
Jzsgc3dpdGNoKCdmb28nKSB7IGNhc2UgMTogZnVuY3Rpb24gZm9vKCkge307IGJyZWFrOyBjYXNl
IDI6IGxldCBmb287IGJyZWFrOyB9IH0iCitQQVNTIEludmFsaWQ6ICIndXNlIHN0cmljdCc7IHN3
aXRjaCgnZm9vJykgeyBjYXNlIDE6IGxldCBmb287IGJyZWFrOyBjYXNlIDI6IGZ1bmN0aW9uIGZv
bygpIHt9OyBicmVhazsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3Ry
aWN0Jzsgc3dpdGNoKCdmb28nKSB7IGNhc2UgMTogbGV0IGZvbzsgYnJlYWs7IGNhc2UgMjogZnVu
Y3Rpb24gZm9vKCkge307IGJyZWFrOyB9IH0iCitQQVNTIFZhbGlkOiAgICIndXNlIHN0cmljdCc7
IHN3aXRjaCgnZm9vJykgeyBjYXNlIDE6IHsgbGV0IGZvbzsgYnJlYWs7IH0gY2FzZSAyOiBmdW5j
dGlvbiBmb28oKSB7fTsgYnJlYWs7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyAn
dXNlIHN0cmljdCc7IHN3aXRjaCgnZm9vJykgeyBjYXNlIDE6IHsgbGV0IGZvbzsgYnJlYWs7IH0g
Y2FzZSAyOiBmdW5jdGlvbiBmb28oKSB7fTsgYnJlYWs7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgIid1
c2Ugc3RyaWN0Jzsgc3dpdGNoKCdmb28nKSB7IGNhc2UgMTogeyBmdW5jdGlvbiBmb28oKSB7IH07
IGJyZWFrOyB9IGNhc2UgMjogZnVuY3Rpb24gZm9vKCkge307IGJyZWFrOyB9IgorUEFTUyBWYWxp
ZDogICAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBzd2l0Y2goJ2ZvbycpIHsgY2FzZSAx
OiB7IGZ1bmN0aW9uIGZvbygpIHsgfTsgYnJlYWs7IH0gY2FzZSAyOiBmdW5jdGlvbiBmb28oKSB7
fTsgYnJlYWs7IH0gfSIKK1BBU1MgSW52YWxpZDogIid1c2Ugc3RyaWN0JzsgaWYgKHRydWUpIGZ1
bmN0aW9uIGZvbygpIHsgfTsgIgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBz
dHJpY3QnOyBpZiAodHJ1ZSkgZnVuY3Rpb24gZm9vKCkgeyB9OyAgfSIKK1BBU1MgVmFsaWQ6ICAg
ImlmICh0cnVlKSBmdW5jdGlvbiBmb28oKSB7IH07ICIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9u
IGYoKSB7IGlmICh0cnVlKSBmdW5jdGlvbiBmb28oKSB7IH07ICB9IgogUEFTUyBWYWxpZDogICAi
dmFyIHN0ciA9ICIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgZnVuY3Rpb24gZjIoYikg
eyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0gcmV0dXJuIGYxKGFyZ3VtZW50c1swXSk7Ijsg
dmFyIGZvbyA9IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IgogUEFTUyBWYWxpZDogICAiZnVu
Y3Rpb24gZigpIHsgdmFyIHN0ciA9ICIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgZnVu
Y3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0gcmV0dXJuIGYxKGFyZ3Vt
ZW50c1swXSk7IjsgdmFyIGZvbyA9IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IH0iCiBQQVNT
IFZhbGlkOiAgICJ2YXIgc3RyID0gIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBmdW5j
dGlvbiBmMihiKSB7IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJuIGM7IH0gcmV0dXJuIGYzKGIpOyB9
IHJldHVybiBmMihhKTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTsiOyB2YXIgZm9vID0gbmV3
IEZ1bmN0aW9uKHN0cik7IGZvbyg1KTsiCiBQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyB2
YXIgc3RyID0gIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBmdW5jdGlvbiBmMihiKSB7
IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJuIGM7IH0gcmV0dXJuIGYzKGIpOyB9IHJldHVybiBmMihh
KTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTsiOyB2YXIgZm9vID0gbmV3IEZ1bmN0aW9uKHN0
cik7IGZvbyg1KTsgfSIKLVBBU1MgSW52YWxpZDogInZhciBzdHIgPSAiJ3VzZSBzdHJpY3QnOyBm
dW5jdGlvbiBmMShhKSB7IGlmIChhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgcmV0dXJuIGI7IH0gcmV0
dXJuIGYyKGEpOyB9IGVsc2UgcmV0dXJuIGE7IH0gcmV0dXJuIGYxKGFyZ3VtZW50c1swXSk7Ijsg
dmFyIGZvbyA9IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IgotRkFJTCBJbnZhbGlkOiAiZnVu
Y3Rpb24gZigpIHsgdmFyIHN0ciA9ICIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgaWYg
KGEpIHsgZnVuY3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0gZWxzZSBy
ZXR1cm4gYTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTsiOyB2YXIgZm9vID0gbmV3IEZ1bmN0
aW9uKHN0cik7IGZvbyg1KTsgfSIgYnV0IGRpZCBub3QgdGhyb3cKLVBBU1MgSW52YWxpZDogInZh
ciBzdHIgPSAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsg
aWYgKGIpIHsgZnVuY3Rpb24gZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMoYik7IH0gZWxz
ZSByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0gcmV0dXJuIGYxKGFyZ3VtZW50c1swXSk7Ijsg
dmFyIGZvbyA9IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IgotRkFJTCBJbnZhbGlkOiAiZnVu
Y3Rpb24gZigpIHsgdmFyIHN0ciA9ICIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgZnVu
Y3Rpb24gZjIoYikgeyBpZiAoYikgeyBmdW5jdGlvbiBmMyhjKSB7IHJldHVybiBjOyB9IHJldHVy
biBmMyhiKTsgfSBlbHNlIHJldHVybiBiOyB9IHJldHVybiBmMihhKTsgfSByZXR1cm4gZjEoYXJn
dW1lbnRzWzBdKTsiOyB2YXIgZm9vID0gbmV3IEZ1bmN0aW9uKHN0cik7IGZvbyg1KTsgfSIgYnV0
IGRpZCBub3QgdGhyb3cKK1BBU1MgVmFsaWQ6ICAgInZhciBzdHIgPSAiJ3VzZSBzdHJpY3QnOyBm
dW5jdGlvbiBmMShhKSB7IGlmIChhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgcmV0dXJuIGI7IH0gcmV0
dXJuIGYyKGEpOyB9IGVsc2UgcmV0dXJuIGE7IH0gcmV0dXJuIGYxKGFyZ3VtZW50c1swXSk7Ijsg
dmFyIGZvbyA9IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IgorUEFTUyBWYWxpZDogICAiZnVu
Y3Rpb24gZigpIHsgdmFyIHN0ciA9ICIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgaWYg
KGEpIHsgZnVuY3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0gZWxzZSBy
ZXR1cm4gYTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTsiOyB2YXIgZm9vID0gbmV3IEZ1bmN0
aW9uKHN0cik7IGZvbyg1KTsgfSIKK1BBU1MgVmFsaWQ6ICAgInZhciBzdHIgPSAiJ3VzZSBzdHJp
Y3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgaWYgKGIpIHsgZnVuY3Rpb24g
ZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMoYik7IH0gZWxzZSByZXR1cm4gYjsgfSByZXR1
cm4gZjIoYSk7IH0gcmV0dXJuIGYxKGFyZ3VtZW50c1swXSk7IjsgdmFyIGZvbyA9IG5ldyBGdW5j
dGlvbihzdHIpOyBmb28oNSk7IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgdmFyIHN0
ciA9ICIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgZnVuY3Rpb24gZjIoYikgeyBpZiAo
YikgeyBmdW5jdGlvbiBmMyhjKSB7IHJldHVybiBjOyB9IHJldHVybiBmMyhiKTsgfSBlbHNlIHJl
dHVybiBiOyB9IHJldHVybiBmMihhKTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTsiOyB2YXIg
Zm9vID0gbmV3IEZ1bmN0aW9uKHN0cik7IGZvbyg1KTsgfSIKIFBBU1MgVmFsaWQ6ICAgImlmICgw
KSAkZm9vOyAiCiBQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBpZiAoMCkgJGZvbzsgIH0i
CiBQQVNTIFZhbGlkOiAgICJpZiAoMCkgX2ZvbzsgIgpJbmRleDogTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL3BhcnNlci1zeW50YXgtY2hlY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvc2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgtY2hlY2suanMJKHJldmlzaW9uIDE5Nzg2
OCkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9wYXJzZXItc3ludGF4LWNoZWNrLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsMTEgQEAgZGVzY3JpcHRpb24oCiAiVGhpcyB0ZXN0
IGNoZWNrcyB0aGF0IHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgb3Igc3RhdGVtZW50cyBhcmUg
dmFsaWQgRUNNQVNDUklQVCBjb2RlIG9yIHNob3VsZCB0aHJvdyBwYXJzZSBlcnJvciIKICk7CiAK
K2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKSB7CisgICAgZGVzY3JpcHRpb24obXNnKTsKKyAgICB0
aHJvdyBuZXcgRXJyb3IoIkJhZCEiKTsKK30KKwogZnVuY3Rpb24gcnVuVGVzdChfYSwgZXhwZWN0
U3ludGF4RXJyb3IpCiB7CiAgICAgdmFyIGVycm9yOwpAQCAtMzk5LDEzICs0MDQsMzIgQEAgdmFs
aWQoIid1c2Ugc3RyaWN0JzsgKGZ1bmN0aW9uIF9fcHJvdG9fXwogCiB2YWxpZCgiJ3VzZSBzdHJp
Y3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgcmV0dXJuIGI7IH0gcmV0dXJu
IGYyKGEpOyB9IGYxKDUpOyIpCiB2YWxpZCgiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7
IGZ1bmN0aW9uIGYyKGIpIHsgZnVuY3Rpb24gZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMo
Yik7IH0gcmV0dXJuIGYyKGEpOyB9IGYxKDUpOyIpCi1pbnZhbGlkKCIndXNlIHN0cmljdCc7IGZ1
bmN0aW9uIGYxKGEpIHsgaWYgKGEpIHsgZnVuY3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1
cm4gZjIoYSk7IH0gZWxzZSByZXR1cm4gYTsgfSBmMSg1KTsiKQotaW52YWxpZCgiJ3VzZSBzdHJp
Y3QnOyBmdW5jdGlvbiBmMShhKSB7IGZ1bmN0aW9uIGYyKGIpIHsgaWYgKGIpIHsgZnVuY3Rpb24g
ZjMoYykgeyByZXR1cm4gYzsgfSByZXR1cm4gZjMoYik7IH0gZWxzZSByZXR1cm4gYjsgfSByZXR1
cm4gZjIoYSk7IH0gZjEoNSk7IikKK3ZhbGlkKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEp
IHsgaWYgKGEpIHsgZnVuY3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7IH0g
ZWxzZSByZXR1cm4gYTsgfSBmMSg1KTsiKQordmFsaWQoIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24g
ZjEoYSkgeyBmdW5jdGlvbiBmMihiKSB7IGlmIChiKSB7IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJu
IGM7IH0gcmV0dXJuIGYzKGIpOyB9IGVsc2UgcmV0dXJuIGI7IH0gcmV0dXJuIGYyKGEpOyB9IGYx
KDUpOyIpCit2YWxpZCgiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmMShhKSB7fTsgZnVuY3Rpb24g
ZjEoYSkge307IikKK2ludmFsaWQoIid1c2Ugc3RyaWN0JzsgeyBmdW5jdGlvbiBmMShhKSB7fTsg
ZnVuY3Rpb24gZjEoYSkge307IH0iKQoraW52YWxpZCgiJ3VzZSBzdHJpY3QnOyB7IGxldCBmMTsg
ZnVuY3Rpb24gZjEoYSkge307IH0iKQoraW52YWxpZCgiJ3VzZSBzdHJpY3QnOyB7IGZ1bmN0aW9u
IGYxKGEpIHt9OyBsZXQgZjE7IH0iKQoraW52YWxpZCgiJ3VzZSBzdHJpY3QnOyBsZXQgZjE7IGZ1
bmN0aW9uIGYxKGEpIHt9OyIpCitpbnZhbGlkKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEp
IHt9OyBsZXQgZjE7ICIpCitpbnZhbGlkKCJsZXQgZjE7IGZ1bmN0aW9uIGYxKGEpIHt9OyIpCitp
bnZhbGlkKCJsZXQgZjE7IHsgZnVuY3Rpb24gZjEoYSkge307IH0iKQoraW52YWxpZCgieyBmdW5j
dGlvbiBmMShhKSB7fTsgfSBsZXQgZjE7IikKK3ZhbGlkKCJ7IGxldCBmMTsgZnVuY3Rpb24gZjEo
YSkge307IH0iKQordmFsaWQoInsgIGZ1bmN0aW9uIGYxKGEpIHt9OyBsZXQgZjE7IH0iKQordmFs
aWQoInN3aXRjaCgnZm9vJykgeyBjYXNlIDE6IGZ1bmN0aW9uIGZvbygpIHt9OyBicmVhazsgY2Fz
ZSAyOiBmdW5jdGlvbiBmb28oKSB7fTsgYnJlYWs7IH0iKQoraW52YWxpZCgiJ3VzZSBzdHJpY3Qn
OyBzd2l0Y2goJ2ZvbycpIHsgY2FzZSAxOiBmdW5jdGlvbiBmb28oKSB7fTsgYnJlYWs7IGNhc2Ug
MjogZnVuY3Rpb24gZm9vKCkge307IGJyZWFrOyB9Iik7CitpbnZhbGlkKCIndXNlIHN0cmljdCc7
IHN3aXRjaCgnZm9vJykgeyBjYXNlIDE6IGZ1bmN0aW9uIGZvbygpIHt9OyBicmVhazsgY2FzZSAy
OiBsZXQgZm9vOyBicmVhazsgfSIpOworaW52YWxpZCgiJ3VzZSBzdHJpY3QnOyBzd2l0Y2goJ2Zv
bycpIHsgY2FzZSAxOiBsZXQgZm9vOyBicmVhazsgY2FzZSAyOiBmdW5jdGlvbiBmb28oKSB7fTsg
YnJlYWs7IH0iKTsKK3ZhbGlkKCIndXNlIHN0cmljdCc7IHN3aXRjaCgnZm9vJykgeyBjYXNlIDE6
IHsgbGV0IGZvbzsgYnJlYWs7IH0gY2FzZSAyOiBmdW5jdGlvbiBmb28oKSB7fTsgYnJlYWs7IH0i
KTsKK3ZhbGlkKCIndXNlIHN0cmljdCc7IHN3aXRjaCgnZm9vJykgeyBjYXNlIDE6IHsgZnVuY3Rp
b24gZm9vKCkgeyB9OyBicmVhazsgfSBjYXNlIDI6IGZ1bmN0aW9uIGZvbygpIHt9OyBicmVhazsg
fSIpOworaW52YWxpZCgiJ3VzZSBzdHJpY3QnOyBpZiAodHJ1ZSkgZnVuY3Rpb24gZm9vKCkgeyB9
OyAiKTsKK3ZhbGlkKCJpZiAodHJ1ZSkgZnVuY3Rpb24gZm9vKCkgeyB9OyAiKTsKIAogdmFsaWQo
InZhciBzdHIgPSBcIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBmdW5jdGlvbiBmMihi
KSB7IHJldHVybiBiOyB9IHJldHVybiBmMihhKTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTtc
IjsgdmFyIGZvbyA9IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IikKIHZhbGlkKCJ2YXIgc3Ry
ID0gXCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYxKGEpIHsgZnVuY3Rpb24gZjIoYikgeyBmdW5j
dGlvbiBmMyhjKSB7IHJldHVybiBjOyB9IHJldHVybiBmMyhiKTsgfSByZXR1cm4gZjIoYSk7IH0g
cmV0dXJuIGYxKGFyZ3VtZW50c1swXSk7XCI7IHZhciBmb28gPSBuZXcgRnVuY3Rpb24oc3RyKTsg
Zm9vKDUpOyIpCi1pbnZhbGlkKCJ2YXIgc3RyID0gXCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGYx
KGEpIHsgaWYgKGEpIHsgZnVuY3Rpb24gZjIoYikgeyByZXR1cm4gYjsgfSByZXR1cm4gZjIoYSk7
IH0gZWxzZSByZXR1cm4gYTsgfSByZXR1cm4gZjEoYXJndW1lbnRzWzBdKTtcIjsgdmFyIGZvbyA9
IG5ldyBGdW5jdGlvbihzdHIpOyBmb28oNSk7IiwgU3ludGF4RXJyb3IsIHVuZGVmaW5lZCkKLWlu
dmFsaWQoInZhciBzdHIgPSBcIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBmdW5jdGlv
biBmMihiKSB7IGlmIChiKSB7IGZ1bmN0aW9uIGYzKGMpIHsgcmV0dXJuIGM7IH0gcmV0dXJuIGYz
KGIpOyB9IGVsc2UgcmV0dXJuIGI7IH0gcmV0dXJuIGYyKGEpOyB9IHJldHVybiBmMShhcmd1bWVu
dHNbMF0pO1wiOyB2YXIgZm9vID0gbmV3IEZ1bmN0aW9uKHN0cik7IGZvbyg1KTsiLCBTeW50YXhF
cnJvciwgdW5kZWZpbmVkKQordmFsaWQoInZhciBzdHIgPSBcIid1c2Ugc3RyaWN0JzsgZnVuY3Rp
b24gZjEoYSkgeyBpZiAoYSkgeyBmdW5jdGlvbiBmMihiKSB7IHJldHVybiBiOyB9IHJldHVybiBm
MihhKTsgfSBlbHNlIHJldHVybiBhOyB9IHJldHVybiBmMShhcmd1bWVudHNbMF0pO1wiOyB2YXIg
Zm9vID0gbmV3IEZ1bmN0aW9uKHN0cik7IGZvbyg1KTsiKQordmFsaWQoInZhciBzdHIgPSBcIid1
c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZjEoYSkgeyBmdW5jdGlvbiBmMihiKSB7IGlmIChiKSB7IGZ1
bmN0aW9uIGYzKGMpIHsgcmV0dXJuIGM7IH0gcmV0dXJuIGYzKGIpOyB9IGVsc2UgcmV0dXJuIGI7
IH0gcmV0dXJuIGYyKGEpOyB9IHJldHVybiBmMShhcmd1bWVudHNbMF0pO1wiOyB2YXIgZm9vID0g
bmV3IEZ1bmN0aW9uKHN0cik7IGZvbyg1KTsiKQogCiB2YWxpZCgiaWYgKDApICRmb287ICIpCiB2
YWxpZCgiaWYgKDApIF9mb287ICIpCg==
</data>
<flag name="review"
          id="298083"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>