<?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>67095</bug_id>
          
          <creation_ts>2011-08-28 12:57:30 -0700</creation_ts>
          <short_desc>Add support for checked arithmetic</short_desc>
          <delta_ts>2011-08-31 16:03:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>aroben</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>458019</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-28 12:57:30 -0700</bug_when>
    <thetext>Add support for checked arithmetic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458021</commentid>
    <comment_count>1</comment_count>
      <attachid>105449</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-28 13:09:46 -0700</bug_when>
    <thetext>Created attachment 105449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458022</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-28 13:12:37 -0700</bug_when>
    <thetext>Attachment 105449 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/CheckedArithmetic.h:201:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:217:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:232:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:263:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:271:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:279:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:494:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 7 in 14 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>458031</commentid>
    <comment_count>3</comment_count>
      <attachid>105449</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-28 16:42:25 -0700</bug_when>
    <thetext>Comment on attachment 105449
Patch

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

It would be awesome if this had tests in TestWebKitAPI.

&gt; Source/JavaScriptCore/wtf/CheckedArithmetic.h:90
&gt; +    void overflowed()
&gt; +    {
&gt; +        m_overflowed = true;
&gt; +    }

I think this would read cleaner if it had the word set in it.

&gt; Source/JavaScriptCore/wtf/CheckedArithmetic.h:101
&gt; +    unsigned char m_overflowed;

This is quite odd that it is an unsigned char here and not a bool.  If you need this for some reason, it should be well documented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459116</commentid>
    <comment_count>4</comment_count>
      <attachid>105678</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-30 13:04:23 -0700</bug_when>
    <thetext>Created attachment 105678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459120</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 13:07:25 -0700</bug_when>
    <thetext>Attachment 105678 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/CheckedArithmetic.h:207:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:223:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:238:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:269:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:278:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:287:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:509:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 7 in 16 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>459265</commentid>
    <comment_count>6</comment_count>
      <attachid>105708</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-30 15:32:01 -0700</bug_when>
    <thetext>Created attachment 105708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459270</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 15:34:53 -0700</bug_when>
    <thetext>Attachment 105708 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/CheckedArithmetic.h:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:258:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:273:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:304:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:313:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:322:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:544:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 7 in 16 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>459287</commentid>
    <comment_count>8</comment_count>
      <attachid>105713</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-30 15:59:06 -0700</bug_when>
    <thetext>Created attachment 105713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459290</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 16:01:11 -0700</bug_when>
    <thetext>Attachment 105713 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/CheckedArithmetic.h:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:258:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:273:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:304:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:313:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:322:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/CheckedArithmetic.h:544:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 7 in 16 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>459397</commentid>
    <comment_count>10</comment_count>
      <attachid>105713</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-30 19:33:27 -0700</bug_when>
    <thetext>Comment on attachment 105713
Patch

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

&gt; Source/JavaScriptCore/wtf/CheckedArithmetic.h:101
&gt; +    unsigned char m_overflowed;

Please put a comment here about why you are using unsigned char rather than bool.

&gt; Source/JavaScriptCore/wtf/CheckedArithmetic.h:161
&gt; +template &lt;typename U, typename V&gt; struct TypeCompare {
&gt; +    static const bool SameType = false;
&gt; +};
&gt; +
&gt; +template &lt;typename U&gt; struct TypeCompare&lt;U, U&gt; {
&gt; +    static const bool SameType = true;
&gt; +};

I believe this is already provided in wtf/TypeTraits.h as struct IsSameType&lt;T, U&gt;.

&gt;&gt; Source/JavaScriptCore/wtf/CheckedArithmetic.h:242
&gt;&gt; +    {
&gt; 
&gt; This { should be at the end of the previous line  [whitespace/braces] [4]

The style queue is wrong here, and a bug should should be file on it.

&gt; Source/JavaScriptCore/wtf/CheckedArithmetic.h:532
&gt; +            CRASH();
&gt; +            return (m_value) ? reinterpret_cast&lt;UnspecifiedBoolType*&gt;(1) : 0;

Indentation here is wrong.

&gt; Tools/ChangeLog:11
&gt; +        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
&gt; +        * TestWebKitAPI/Tests/CheckedArithmeticOperations.cpp: Added.

You should probably also add the test to the vcproj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459752</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-31 11:16:07 -0700</bug_when>
    <thetext>Committed r94207: &lt;http://trac.webkit.org/changeset/94207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459760</commentid>
    <comment_count>12</comment_count>
      <attachid>105713</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-08-31 11:22:25 -0700</bug_when>
    <thetext>Comment on attachment 105713
Patch

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

&gt; Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:24
&gt; +		A7E69B5E140C117200223412 /* CheckedArithmeticOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7E69B5D140C117200223412 /* CheckedArithmeticOperations.cpp */; };

Can you add this to TestWebKitAPI.vcproj, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460013</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-31 16:03:52 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 105713 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105713&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:24
&gt; &gt; +		A7E69B5E140C117200223412 /* CheckedArithmeticOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7E69B5D140C117200223412 /* CheckedArithmeticOperations.cpp */; };
&gt; 
&gt; Can you add this to TestWebKitAPI.vcproj, too?

Dammit, i thought i had, but landed now</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105449</attachid>
            <date>2011-08-28 13:09:46 -0700</date>
            <delta_ts>2011-08-30 13:04:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67095-20110828130944.patch</filename>
            <type>text/plain</type>
            <size>80742</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5NTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDA0
YTg0NDA3YTQwOTgyNDc4NTVjZTljMWU1MmFiYWIwMjdjMjg2MzQuLjI4ZjFiNjE2YmMwOGM4YzUw
NDNmZjc4N2YxMmYyMWVlMWM2OTk2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExNCBAQAorMjAxMS0wOC0yOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjaGVja2VkIGFyaXRobWV0aWMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDk1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgY2hlY2tlZCBhcml0aG1l
dGljIGNsYXNzIENoZWNrZWQ8VD4gdGhhdCBwcm92aWRlcyBvdmVyZmxvdy1zYWZlCisgICAgICAg
IGFyaXRobWV0aWMgb3ZlciBhbGwgaW50ZWdyYWwgdHlwZXMuICBDaGVja2VkPFQ+IHN1cHBvcnRz
IGFkZGl0aW9uLCBzdWJ0cmFjdGlvbgorICAgICAgICBhbmQgbXVsdGlwbGljYXRpb24sIGFsb25n
IHdpdGggImJvb2wiIGNvbnZlcnNpb25zIGFuZCBlcXVhbGl0eSBvcGVyYXRvcnMuCisKKyAgICAg
ICAgQ2hlY2tlZDw+IGNhbiBiZSB1c2VkIGluIGVpdGhlciBDUkFTSCgpIG9uIG92ZXJmbG93IG9y
IGRlbGF5ZWQgZmFpbHVyZSBtb2RlcywKKyAgICAgICAgYWx0aG91Z2ggdGhlIGRlZmF1bHQgaXMg
dG8gQ1JBU0goKS4KKworICAgICAgICBUbyBlbnN1cmUgdGhlIGNvZGUgaXMgYWN0dWFsbHkgaW4g
dXNlIChyYXRoZXIgdGhhbiBjaGVja2luZyBpbiBkZWFkIGNvZGUpIEkndmUKKyAgICAgICAgbWFk
ZSBhIGNvdXBsZSBvZiBwcm9wZXJ0aWVzIGluIFlBUlIgdXNlIENoZWNrZWQ8aW50PiBhbmQgQ2hl
Y2tlZDx1bnNpZ25lZD4KKyAgICAgICAgaW5zdGVhZCBvZiByYXcgdmFsdWUgYXJpdGhtZXRpYy4g
IFRoaXMgaGFzIHJlc3VsdGVkIGluIGEgbW9kZXJhdGUgc2V0IG9mIGNoYW5nZXMsCisgICAgICAg
IHRvIFlBUlIgLSBtb3N0bHkgYWRkaW5nIC5nZXQoKSBjYWxscywgYnV0IGEgY291cGxlIG9mIGNh
c3RzIGZyb20gdW5zaWduZWQgbG9uZworICAgICAgICB0byB1bnNpZ25lZCBmb3Igc29tZSB1c2Vz
IG9mIHNpemVvZiwgYXMgQ2hlY2tlZDw+IGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0CisgICAg
ICAgIG1peGVkIHNpZ25lZC1uZXNzIG9mIHR5cGVzIHdpZGVyIHRoYXQgMzIgYml0cy4KKworICAg
ICAgICBIYXBwaWx5IHRoZSBpbmNyZWFzZWQgdHlwZSBzYWZldHkgb2YgQ2hlY2tlZDw+IG1lYW5z
IHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8KKyAgICAgICAgYWNjaWRlbnRhbGx5IGFzc2lnbiBh
d2F5IHByZWNpc2lvbiwgbm9yIGFjY2lkZW50YWxseSBjYWxsIGludGVnZXIgb3ZlcmxvYWQgb2YK
KyAgICAgICAgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBib29sIHZlcnNpb24uCisKKyAgICAg
ICAgTm8gbWVhc3VyYWJsZSByZWdyZXNzaW9uIGluIHBlcmZvcm1hbmNlLCBhbmQgU3VuU3BpZGVy
IGNsYWltcyB0aGlzIHBhdGNoIHRvIGJlCisgICAgICAgIGEgcHJvZ3Jlc3Npb24gb2YgMC4zJS4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93OjpvdmVyZmxvd2VkKToKKyAgICAgICAg
KFdURjo6Q3Jhc2hPbk92ZXJmbG93OjpjbGVhck92ZXJmbG93KToKKyAgICAgICAgKFdURjo6Q3Jh
c2hPbk92ZXJmbG93OjpoYXNPdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZs
b3c6OlJlY29yZE92ZXJmbG93KToKKyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6Om92ZXJm
bG93ZWQpOgorICAgICAgICAoV1RGOjpSZWNvcmRPdmVyZmxvdzo6Y2xlYXJPdmVyZmxvdyk6Cisg
ICAgICAgIChXVEY6OlJlY29yZE92ZXJmbG93OjpoYXNPdmVyZmxvd2VkKToKKyAgICAgICAgKFdU
Rjo6aXNJbkJvdW5kcyk6CisgICAgICAgIChXVEY6OnNpZ25zTWF0Y2gpOgorICAgICAgICAoV1RG
OjpzYWZlQWRkKToKKyAgICAgICAgKFdURjo6c2FmZVN1Yik6CisgICAgICAgIChXVEY6OnNhZmVN
dWx0aXBseSk6CisgICAgICAgIChXVEY6OnNhZmVFcXVhbHMpOgorICAgICAgICAoV1RGOjpDaGVj
a2VkOjpDaGVja2VkKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6Om9w
ZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvciEpOgorICAgICAgICAo
V1RGOjpDaGVja2VkOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKik6CisgICAgICAgIChX
VEY6OkNoZWNrZWQ6OmdldCk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6Om9wZXJhdG9yKz0pOgor
ICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6Q2hlY2tl
ZDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3Ir
KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OkludGVycHJldGVyOjptYXRjaEFzc2VydGlvbkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6Oklu
dGVycHJldGVyOjptYXRjaEFzc2VydGlvbkVPTCk6CisgICAgICAgIChKU0M6OllhcnI6OkludGVy
cHJldGVyOjptYXRjaEFzc2VydGlvbldvcmRCb3VuZGFyeSk6CisgICAgICAgIChKU0M6OllhcnI6
OkludGVycHJldGVyOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6
WWFycjo6SW50ZXJwcmV0ZXI6OmJhY2t0cmFja1BhdHRlcm5DYXNlZENoYXJhY3Rlcik6CisgICAg
ICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjptYXRjaENoYXJhY3RlckNsYXNzKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6OmJhY2t0cmFja0NoYXJhY3RlckNsYXNzKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6Om1hdGNoQmFja1JlZmVyZW5jZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjpiYWNrdHJhY2tCYWNrUmVmZXJlbmNlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6OnJlY29yZFBhcmVudGhlc2VzTWF0Y2gpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6bWF0Y2hQYXJlbnRoZXNlc09uY2VCZWdp
bik6CisgICAgICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjptYXRjaFBhcmVudGhlc2VzT25j
ZUVuZCk6CisgICAgICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjpiYWNrdHJhY2tQYXJlbnRo
ZXNlc09uY2VFbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6bWF0Y2hEaXNq
dW5jdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhdHRlcm5D
aGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21DaGFyYWN0
ZXJDbGFzcyk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbUJhY2tSZWZl
cmVuY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXRp
Y2FsQXNzZXJ0aW9uRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9t
UGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBp
bGVyOjphdG9tUGFyZW50aGVzZXNPbmNlRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNv
bXBpbGVyOjphdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZCk6CisgICAgICAgIChKU0M6OllhcnI6
OkJ5dGVDb21waWxlcjo6ZW1pdERpc2p1bmN0aW9uKToKKyAgICAgICAgKiB5YXJyL1lhcnJJbnRl
cnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6Qnl0ZVRlcm0pOgorICAg
ICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6Qk9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0
ZVRlcm06OkNoZWNrSW5wdXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6VW5jaGVj
a0lucHV0KToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OkVPTCk6CisgICAgICAgIChK
U0M6OllhcnI6OkJ5dGVUZXJtOjpXb3JkQm91bmRhcnkpOgorICAgICAgICAoSlNDOjpZYXJyOjpC
eXRlVGVybTo6QmFja1JlZmVyZW5jZSk6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVBc3NlcnRpb25CT0wpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkVPTCk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Om1hdGNoQXNzZXJ0aW9uV29yZGNo
YXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlv
bldvcmRCb3VuZGFyeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVy
YXRlUGF0dGVybkNoYXJhY3Rlck9uY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJh
dG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJGaXhlZCk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckdyZWVkeSk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJOb25H
cmVlZHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUNoYXJh
Y3RlckNsYXNzT25jZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVy
YXRlQ2hhcmFjdGVyQ2xhc3NGaXhlZCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NHcmVlZHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZ
YXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tDaGFyYWN0ZXJDbGFzc05vbkdyZWVkeSk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKiB5YXJyL1lh
cnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rv
cjo6c2V0dXBBbHRlcm5hdGl2ZU9mZnNldHMpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4u
aDoKKwogMjAxMS0wOC0yOCAgSm9uYXRoYW4gTGl1ICA8bmV0MTQ3QGdtYWlsLmNvbT4KIAogICAg
ICAgICBGaXggYnVpbGQgZXJyb3Igd2hlbiBjb21waWxpbmcgd2l0aCBNaW5HVy13NjQgYnkgZGlz
YWJsaW5nIEpJVApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCBjMGM2YjcwM2UzYzVlMGQ3ZjY2YjFhZTg0YzQ5YWU3ZGEzMzI5NzZhLi42ZDJlMjdkMmI3YmJj
YmJmZGNjOTM2ODY1ZjhlNTUyNTZjN2I4ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNDU5LDYgKzQ1OSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0NoZWNrZWRBcml0aG1ldGljLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ29t
cGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50
ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpp
bmRleCA2MTIwNDkyZTI5Mjg0NjI5M2IyNTM4MTNjMjk4ZDQxYThiZmZiMzRkLi4yODA3MTMyNTVk
ZjM2MGMwYmFmNGQ1NmVlYmI1MTQzNjliYzZmNzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMTQwLDYgKzE0MCw3IEBACiAgICAgICAgICAgICAnd3Rm
L0Jsb29tRmlsdGVyLmgnLAogICAgICAgICAgICAgJ3d0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5o
JywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmgnLAorICAgICAgICAgICAgJ3d0Zi9DaGVj
a2VkQXJpdGhtZXRpYy5oJywKICAgICAgICAgICAgICd3dGYvQ29tcGlsZXIuaCcsCiAgICAgICAg
ICAgICAnd3RmL0NvbXBsZXguaCcsCiAgICAgICAgICAgICAnd3RmL0Nyb3NzVGhyZWFkUmVmQ291
bnRlZC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDM0OGMyNmYwMTk4MWQxMzk3NGI0ZWIz
Yjc1M2EyYzk5OWMyZjhiMmQuLmEzODg5ODhmN2E2ZGQ3OGUyNThkMjk5YjFhMzhkMWJjY2Y3OGM3
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtNTY1LDYgKzU2NSwxMCBAQAogCQkJPgogCQk8
L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDaGVja2VkQXJpdGht
ZXRpYy5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHd0ZlxDb21waWxlci5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGNiNjY3ZDhiYWMyZWExNjE5OWU4NjZlMDRlOGE1MTRmOTFhZDdmNDkuLjc1Mzdm
NWNiZDE2NDU0OGE2NmI3MTJhZGViNGM2OGIwYTBkODM1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC00MjIsNiArNDIyLDcgQEAKIAkJQTdBMUY3QUMwRjI1MkIzQzAwRTE4NEUy
IC8qIEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLzsgfTsK
IAkJQTdBMUY3QUQwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBMUY3QUIwRjI1MkIzQzAwRTE4NEUy
IC8qIEJ5dGVBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4
REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJ
QTdCQzBDODIxNDA2MDhCMDAwQjFCQjcxIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JDMEM4MTE0MDYwOEIwMDBC
MUJCNzEgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyogSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgKi87IH07CiAJCUE3QzQwQzBBMTMwQjA1N0QwMEQwMDJBMSAvKiBCbG9ja1N0YWNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0M0MEMw
NzEzMEIwNTdEMDBEMDAyQTEgLyogQmxvY2tTdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzQwQzBCMTMwQjA1N0QwMEQwMDJBMSAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QzQwQzA4MTMwQjA1N0QwMEQwMDJBMSAvKiBTZW50aW5lbExpbmtlZExpc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE0
OSw2ICsxMTUwLDcgQEAKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGVjdXRhYmxlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjQ4
REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0JDMEM4MTE0MDYwOEIwMDBCMUJCNzEgLyogQ2hl
Y2tlZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tl
ZEFyaXRobWV0aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUU4QzgxMTJF
NzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3
b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRo
ID0gS2V5d29yZExvb2t1cEdlbmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdDMjI1Q0QxMzk5ODQ5QzAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5d29yZExvb2t1cC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTY4Niw2ICsxNjg4LDcgQEAKIAkJCQk4NjY3NkQ0RDExRkVENTVEMDA0
QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlBN0ExRjdBQTBGMjUyQjND
MDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBN0ExRjdBQjBGMjUyQjNDMDBFMTg0
RTIgLyogQnl0ZUFycmF5LmggKi8sCisJCQkJQTdCQzBDODExNDA2MDhCMDAwQjFCQjcxIC8qIENo
ZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFFIC8qIENv
bXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAq
LywKIAkJCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVk
LmggKi8sCkBAIC0yNjA4LDYgKzI2MTEsNyBAQAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3
QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAy
M0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY2QkFF
NDEzRjQ5MkNDMDBDMjNGQUUgLyogQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUE3QkMw
QzgyMTQwNjA4QjAwMEIxQkI3MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGUxMDM3MDkwYmQ4Y2ExMjcyNGE1YTZmMTA3ZGIzMWI5
NWIxMzM2ZTQuLmY3NGI1MjVmMTBlOGVjZTEwMDEyMTVlOTdiZmFkZThkMWM5MTRlMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNoZWNrZWRBcml0aG1l
dGljLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlOTE2Njg5MDdlNmMyYTRiNDY1
ODA0YTM4N2JlYTA2Y2NhZTQ5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTAsMCArMSw2NDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDaGVja2VkQXJp
dGhtZXRpY19oCisjZGVmaW5lIENoZWNrZWRBcml0aG1ldGljX2gKKworI2luY2x1ZGUgIkFzc2Vy
dGlvbnMuaCIKKworI2luY2x1ZGUgPGxpbWl0cz4KKworLyogQ2hlY2tlZDxUPgorICoKKyAqIFRo
aXMgY2xhc3MgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcGVyZm9ybSBvdmVyZmxvdy1zYWZlIGlu
dGVnZXIgYXJpdGhtZXRpYworICogd2l0aG91dCBoYXZpbmcgdG8gbWFudWFsbHkgZW5zdXJlIHRo
YXQgeW91IGhhdmUgYWxsIHRoZSByZXF1aXJlZCBib3VuZHMgY2hlY2tzCisgKiBkaXJlY3RseSBp
biB5b3VyIGNvZGUuCisgKgorICogVGhlcmUgYXJlIHR3byBtb2RlcyBvZiBvcGVyYXRpb246Cisg
KiAgLSBUaGUgZGVmYXVsdCBpcyBDaGVja2VkPFQsIENyYXNoT25PdmVyZmxvdz4sIGFuZCBjcmFz
aGVzIGF0IHRoZSBwb2ludAorICogICAgYW5kIG92ZXJmbG93IGhhcyBvY2N1cnJlZC4KKyAqICAt
IFRoZSBhbHRlcm5hdGl2ZSBpcyBDaGVja2VkPFQsIFJlY29yZE92ZXJmbG93Piwgd2hpY2ggdXNl
cyBhbiBhZGRpdGlvbmFsCisgKiAgICBieXRlIG9mIHN0b3JhZ2UgdG8gdHJhY2sgd2hldGhlciBh
biBvdmVyZmxvdyBoYXMgb2NjdXJyZWQsIHN1YnNlcXVlbnQKKyAqICAgIHVuY2hlY2tlZCBvcGVy
YXRpb25zIHdpbGwgY3Jhc2ggaWYgYW4gb3ZlcmZsb3cgaGFzIG9jY3VyZWQKKyAqCisgKiBJdCBp
cyBwb3NzaWJsZSB0byBwcm92aWRlIGEgY3VzdG9tIG92ZXJmbG93IGhhbmRsZXIsIGluIHdoaWNo
IGNhc2UgeW91IG5lZWQKKyAqIHRvIHN1cHBvcnQgdGhlc2UgZnVuY3Rpb25zOgorICogIC0gdm9p
ZCBvdmVyZmxvd2VkKCk7CisgKiAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIG9w
ZXJhdGlvbiBoYXMgcHJvZHVjZWQgYW4gb3ZlcmZsb3cuCisgKiAgLSBib29sIGhhc092ZXJmbG93
ZWQoKTsKKyAqICAgIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gdHJ1ZSBpZiBvdmVyZmxvd2Vk
KCkgaGFzIGJlZW4gY2FsbGVkIG9uIGFuCisgKiAgICBpbnN0YW5jZSBhbmQgZmFsc2UgaWYgaXQg
aGFzIG5vdC4KKyAqICAtIHZvaWQgY2xlYXJPdmVyZmxvdygpOworICogICAgVXNlZCB0byByZXNl
dCBvdmVyZmxvdyB0cmFja2luZyB3aGVuIGEgdmFsdWUgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0
aAorICogICAgYSBuZXcgdmFsdWUuCisgKgorICogQ2hlY2tlZDxUPiB3b3JrcyBmb3IgYWxsIGlu
dGVnZXIgdHlwZXMsIHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOgorICogIC0gTWl4aW5nIHNp
Z25lZG5lc3Mgb2Ygb3BlcmFuZHMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHR5cGVzIG5hcnJvd2Vy
IHRoYW4KKyAqICAgIDY0Yml0cy4KKyAqICAtIEl0IGRvZXMgaGF2ZSBhIHBlcmZvcm1hbmNlIGlt
cGFjdCwgc28gdGlnaHQgbG9vcHMgbWF5IHdhbnQgdG8gYmUgY2FyZWZ1bAorICogICAgd2hlbiB1
c2luZyBpdC4KKyAqCisgKi8KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIENyYXNoT25PdmVy
ZmxvdyB7Citwcm90ZWN0ZWQ6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIG92ZXJm
bG93ZWQoKQorICAgIHsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
T3ZlcmZsb3coKSB7IH0KKworcHVibGljOgorICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitjbGFzcyBSZWNvcmRPdmVyZmxvdyB7Citwcm90ZWN0
ZWQ6CisgICAgUmVjb3JkT3ZlcmZsb3coKQorICAgICAgICA6IG1fb3ZlcmZsb3dlZChmYWxzZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBvdmVyZmxvd2VkKCkKKyAgICB7CisgICAgICAgIG1f
b3ZlcmZsb3dlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBjbGVhck92ZXJmbG93KCkKKyAg
ICB7CisgICAgICAgIG1fb3ZlcmZsb3dlZCA9IGZhbHNlOworICAgIH0KKworcHVibGljOgorICAg
IGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZDsgfQorCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIGNoYXIgbV9vdmVyZmxvd2VkOworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGNsYXNzIE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4gY2xh
c3MgQ2hlY2tlZDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQ+ID47
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZSwgYm9vbCB0YXJn
ZXRTaWduZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46OmlzX3NpZ25lZCwgYm9vbCBz
b3VyY2VTaWduZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFNvdXJjZT46OmlzX3NpZ25lZD4gc3Ry
dWN0IEJvdW5kc0NoZWNrZXI7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBT
b3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlLCBmYWxzZSwgZmFsc2U+
IHsKKyAgICBzdGF0aWMgYm9vbCBpbkJvdW5kcyhTb3VyY2UgdmFsdWUpCisgICAgeworICAgICAg
ICAvLyBTYW1lIHNpZ25lZG5lc3Mgc28gaW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIHdpbGwgYWx3
YXlzIGluY3JlYXNlIHByZWNpc2lvbgorICAgICAgICAvLyB0byB3aWRlc3QgdHlwZQorICAgICAg
ICByZXR1cm4gdmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0
cnVjdCBCb3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlLCB0cnVlLCB0cnVlPiB7CisgICAgc3Rh
dGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gU2FtZSBz
aWduZWRuZXNzIHNvIGltcGxpY2l0IHR5cGUgY29udmVyc2lvbiB3aWxsIGFsd2F5cyBpbmNyZWFz
ZSBwcmVjaXNpb24KKyAgICAgICAgLy8gdG8gd2lkZXN0IHR5cGUKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWluKCkgPD0gdmFsdWUgJiYgdmFsdWUgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja2VyPFRh
cmdldCwgU291cmNlLCBmYWxzZSwgdHJ1ZT4geworICAgIHN0YXRpYyBib29sIGluQm91bmRzKFNv
dXJjZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIFRhcmdldCBpcyB1bnNpZ25lZCBzbyBhbnkg
dmFsdWUgbGVzcyB0aGFuIHplcm8gaXMgY2xlYXJseSB1bnNhZmUKKyAgICAgICAgaWYgKHZhbHVl
IDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gSWYgb3VyICh1bnNp
Z25lZCkgVGFyZ2V0IGlzIHRoZSBzYW1lIG9yIGdyZWF0ZXIgd2lkdGggd2UgY2FuCisgICAgICAg
IC8vIGNvbnZlcnQgdmFsdWUgdG8gdHlwZSBUYXJnZXQgd2l0aG91dCBsb3NpbmcgcHJlY2lzaW9u
CisgICAgICAgIGlmIChzaXplb2YoVGFyZ2V0KSA+PSBzaXplb2YoU291cmNlKSkgCisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGFyZ2V0Pih2YWx1ZSkgPD0gc3RkOjpudW1lcmljX2xp
bWl0czxUYXJnZXQ+OjptYXgoKTsKKyAgICAgICAgLy8gVGhlIHNpZ25lZCBTb3VyY2UgdHlwZSBo
YXMgZ3JlYXRlciBwcmVjaXNpb24gdGhhbiB0aGUgdGFyZ2V0IHNvCisgICAgICAgIC8vIG1heChU
YXJnZXQpIC0+IFNvdXJjZSB3aWxsIHdpZGVuLgorICAgICAgICByZXR1cm4gdmFsdWUgPD0gc3Rh
dGljX2Nhc3Q8U291cmNlPihzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0
cnVjdCBCb3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlLCB0cnVlLCBmYWxzZT4geworICAgIHN0
YXRpYyBib29sIGluQm91bmRzKFNvdXJjZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIFNpZ25l
ZCB0YXJnZXQgd2l0aCBhbiB1bnNpZ25lZCBzb3VyY2UKKyAgICAgICAgaWYgKHNpemVvZihUYXJn
ZXQpIDw9IHNpemVvZihTb3VyY2UpKSAKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0
aWNfY2FzdDxTb3VyY2U+KHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCkpOworICAg
ICAgICAvLyBUYXJnZXQgaXMgV2lkZXIgdGhhbiBTb3VyY2Ugc28gd2UncmUgZ3VhcmFudGVlZCB0
byBmaXQgYW55IHZhbHVlIGluCisgICAgICAgIC8vIHVuc2lnbmVkIFNvdXJjZQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4gc3RydWN0IFR5cGVDb21wYXJlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBTYW1lVHlwZSA9
IGZhbHNlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFU+IHN0cnVjdCBUeXBlQ29tcGFyZTxV
LCBVPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgU2FtZVR5cGUgPSB0cnVlOworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlLCBib29sIFNhbWVUeXBlID0g
VHlwZUNvbXBhcmU8VGFyZ2V0LCBTb3VyY2U+OjpTYW1lVHlwZT4gc3RydWN0IEJvdW5kc0NoZWNr
RWxpZGVyOwordGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdHJ1
Y3QgQm91bmRzQ2hlY2tFbGlkZXI8VGFyZ2V0LCBTb3VyY2UsIHRydWU+IHsKKyAgICBzdGF0aWMg
Ym9vbCBpbkJvdW5kcyhTb3VyY2UpIHsgcmV0dXJuIHRydWU7IH0KK307Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja0VsaWRlcjxU
YXJnZXQsIFNvdXJjZSwgZmFsc2U+IDogcHVibGljIEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3Vy
Y2U+IHsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4g
c3RhdGljIGlubGluZSBib29sIGlzSW5Cb3VuZHMoU291cmNlIHZhbHVlKQoreworICAgIHJldHVy
biBCb3VuZHNDaGVja0VsaWRlcjxUYXJnZXQsIFNvdXJjZT46OmluQm91bmRzKHZhbHVlKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgYm9vbCBzaWduc01hdGNoKFQg
bGhzLCBUIHJocykKK3sKKyAgICByZXR1cm4gKGxocyBeIHJocykgPj0gMDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkIHsKKyAgICB0eXBlZGVmIFQgQ2xl
YW5UeXBlOworICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsgICAg
Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tl
ZDxUPiA+IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8VD46OkNsZWFuVHlw
ZSBDbGVhblR5cGU7CisgICAgc3RhdGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAw
OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHQg
eworICAgIHR5cGVkZWYgdHlwZW9mKFJlbW92ZUNoZWNrZWQ8VT46OkRlZmF1bHRWYWx1ZSArIFJl
bW92ZUNoZWNrZWQ8VT46OkRlZmF1bHRWYWx1ZSkgUmVzdWx0VHlwZTsKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBMSFMsIHR5cGVuYW1lIFJIUywgdHlwZW5hbWUgUmVzdWx0VHlwZSA9IHR5cGVu
YW1lIFJlc3VsdDxMSFMsIFJIUz46OlJlc3VsdFR5cGUsIAorICAgIGJvb2wgbGhzU2lnbmVkID0g
c3RkOjpudW1lcmljX2xpbWl0czxMSFM+Ojppc19zaWduZWQsIGJvb2wgcmhzU2lnbmVkID0gc3Rk
OjpudW1lcmljX2xpbWl0czxSSFM+Ojppc19zaWduZWQ+IHN0cnVjdCBBcml0aG1ldGljT3BlcmF0
aW9uczsKKwordGVtcGxhdGUgPHR5cGVuYW1lIExIUywgdHlwZW5hbWUgUkhTLCB0eXBlbmFtZSBS
ZXN1bHRUeXBlPiBzdHJ1Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM8TEhTLCBSSFMsIFJlc3VsdFR5
cGUsIHRydWUsIHRydWU+IHsKKyAgICAvLyBMSFMgYW5kIFJIUyBhcmUgc2lnbmVkIHR5cGVzCisK
KyAgICBzdGF0aWMgaW5saW5lIGJvb2wgYWRkKExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUm
IHJlc3VsdCkgV0FSTl9VTlVTRURfUkVUVVJOCisgICAgeworICAgICAgICBpZiAoc2lnbnNNYXRj
aDxSZXN1bHRUeXBlPihsaHMsIHJocykpIHsKKyAgICAgICAgICAgIGlmIChsaHMgPj0gMCkgewor
ICAgICAgICAgICAgICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4
KCkgLSByaHMpIDwgbGhzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFJlc3VsdFR5cGUgdGVtcCA9IGxocyAt
IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpOworICAgICAgICAgICAgICAg
IGlmIChyaHMgPCAtdGVtcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9IC8vIGlmIHRoZSBzaWducyBkbyBub3QgbWF0Y2ggdGhpcyBv
cGVyYXRpb24gY2FuJ3Qgb3ZlcmZsb3cKKyAgICAgICAgcmVzdWx0ID0gbGhzICsgcmhzOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgc3ViKExI
UyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkgV0FSTl9VTlVTRURfUkVUVVJOCisg
ICAgeworICAgICAgICBpZiAoIXNpZ25zTWF0Y2gobGhzLCByaHMpKSB7CisgICAgICAgICAgICBp
ZiAobGhzID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobGhzID4gc3RkOjpudW1lcmljX2xp
bWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgKyByaHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJocyA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpICsgbGhzKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gLy8gaWYg
dGhlIHNpZ25zIG1hdGNoIHRoaXMgb3BlcmF0aW9uIGNhbid0IG92ZXJmbG93CisgICAgICAgIHJl
c3VsdCA9IGxocyAtIHJoczsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3Rh
dGljIGlubGluZSBib29sIG11bHRpcGx5KExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJl
c3VsdCkgV0FSTl9VTlVTRURfUkVUVVJOCisgICAgeworICAgICAgICBpZiAoc2lnbnNNYXRjaChs
aHMsIHJocykpIHsKKyAgICAgICAgICAgIGlmIChsaHMgPiAwKSB7CisgICAgICAgICAgICAgICAg
aWYgKChzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSAvIGxocykgPCByaHMp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGxocyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5
cGU+OjptaW4oKSB8fCByaHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWlu
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpIC8gLWxocykgPCAtcmhz
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGhzIDwgMCkgeworICAgICAgICAgICAgICAg
IGlmIChsaHMgPCAoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkgLyByaHMp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChyaHMgPCAoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRU
eXBlPjo6bWluKCkgLyBsaHMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gbGhzICogcmhzOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxz
KExIUyBsaHMsIFJIUyByaHMpIHsgcmV0dXJuIGxocyA9PSByaHM7IH0KKworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIExIUywgdHlwZW5hbWUgUkhTLCB0eXBlbmFtZSBSZXN1bHRUeXBlPiBzdHJ1
Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM8TEhTLCBSSFMsIFJlc3VsdFR5cGUsIGZhbHNlLCBmYWxz
ZT4geworICAgIC8vIExIUyBhbmQgUkhTIGFyZSB1bnNpZ25lZCB0eXBlcyBzbyBib3VuZHMgY2hl
Y2tzIGFyZSBuaWNlIGFuZCBlYXN5CisgICAgc3RhdGljIGlubGluZSBib29sIGFkZChMSFMgbGhz
LCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVSTgorICAgIHsK
KyAgICAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSAtIHJo
cykgPCBsaHMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGxo
cyArIHJoczsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGlubGlu
ZSBib29sIHN1YihMSFMgbGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5V
U0VEX1JFVFVSTgorICAgIHsKKyAgICAgICAgaWYgKHJocyA+IGxocykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gbGhzIC0gcmhzOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHkoTEhTIGxocywg
UkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KKyAgICB7Cisg
ICAgICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLyByaHMp
IDwgbGhzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBsaHMg
KiByaHM7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbHMoTEhTIGxocywgUkhTIHJocykgeyByZXR1cm4gbGhzID09IHJoczsgfQorCit9
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRobWV0aWNPcGVy
YXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGUsIHRydWUsIGZhbHNlPiB7CisgICAgc3Rh
dGljIGlubGluZSBib29sIGFkZChpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUm
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGludDY0X3QgdGVtcCA9IGxocyArIHJoczsKKyAgICAg
ICAgaWYgKHRlbXAgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHRlbXAgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmVzdWx0ID0gdGVtcDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoaW50NjRfdCBsaHMsIGludDY0X3QgcmhzLCBSZXN1
bHRUeXBlJiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IHRlbXAgPSBsaHMgLSByaHM7
CisgICAgICAgIGlmICh0ZW1wIDwgc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWlu
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh0ZW1wID4gc3RkOjpu
dW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJlc3VsdCA9IHRlbXA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBtdWx0aXBseShpbnQgbGhzLCB1bnNpZ25lZCByaHMs
IFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGludDY0X3QgdGVtcCA9IHN0YXRp
Y19jYXN0PGludDY0X3Q+KGxocykgKiBzdGF0aWNfY2FzdDxpbnQ2NF90PihyaHMpOworICAgICAg
ICBpZiAodGVtcCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGVtcCA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8UmVzdWx0VHlwZT46Om1heCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXN1bHQgPSB0ZW1wOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgaW5saW5lIGJvb2wgZXF1YWxzKGludCBsaHMsIHVuc2lnbmVkIHJocykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ2NF90PihsaHMpID09IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KHJocyk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGU+
IHN0cnVjdCBBcml0aG1ldGljT3BlcmF0aW9uczx1bnNpZ25lZCwgaW50LCBSZXN1bHRUeXBlLCBm
YWxzZSwgdHJ1ZT4geworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGQodW5zaWduZWQgbGhzLCBp
bnQgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gQXJpdGht
ZXRpY09wZXJhdGlvbnM8aW50LCB1bnNpZ25lZCwgUmVzdWx0VHlwZT46OmFkZChyaHMsIGxocywg
cmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSBib29sIHN1YihpbnQ2NF90
IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlPjo6c3Vi
KGxocywgcmhzLCByZXN1bHQpOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBtdWx0
aXBseSh1bnNpZ25lZCBsaHMsIGludCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRU
eXBlPjo6bXVsdGlwbHkocmhzLCBsaHMsIHJlc3VsdCk7CisgICAgfQorICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBlcXVhbHModW5zaWduZWQgbGhzLCBpbnQgcmhzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+OjplcXVh
bHMocmhzLCBsaHMpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBSPiBzdGF0aWMgaW5saW5lIGJvb2wgc2FmZUFkZChVIGxocywgViByaHMs
IFImIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgVj46OmFk
ZChsaHMsIHJocywgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlU3ViKFUgbGhzLCBWIHJocywg
UiYgcmVzdWx0KQoreworICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxVLCBWPjo6c3Vi
KGxocywgcmhzLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgUj4gc3RhdGljIGlubGluZSBib29sIHNhZmVNdWx0aXBseShVIGxocywgViBy
aHMsIFImIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgVj46
Om11bHRpcGx5KGxocywgcmhzLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4gc3RhdGljIGlubGluZSBib29sIHNhZmVFcXVhbHMoVSBsaHMsIFYgcmhzKQor
eworICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxVLCBWPjo6ZXF1YWxzKGxocywgcmhz
KTsKK30KKworZW51bSBSZXN1bHRPdmVyZmxvd2VkVGFnIHsgUmVzdWx0T3ZlcmZsb3dlZCB9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgY2xhc3MgT3ZlcmZsb3dIYW5kbGVyPiBjbGFzcyBDaGVj
a2VkIDogcHVibGljIE92ZXJmbG93SGFuZGxlciB7CitwdWJsaWM6CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIF9ULCBjbGFzcyBfT3ZlcmZsb3dIYW5kbGVyPiBmcmllbmQgY2xhc3MgQ2hlY2tlZDsK
KyAgICBDaGVja2VkKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAg
IENoZWNrZWQoUmVzdWx0T3ZlcmZsb3dlZFRhZykKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAg
eworICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+IENoZWNrZWQoVSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghaXNJbkJvdW5k
czxUPih2YWx1ZSkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1f
dmFsdWUgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBWPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VCwgVj4mIHJocykKKyAgICAgICAg
OiBtX3ZhbHVlKHJocy5tX3ZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VSwgT3ZlcmZsb3dI
YW5kbGVyPiYgcmhzKQorICAgICAgICA6IE92ZXJmbG93SGFuZGxlcihyaHMpCisgICAgeworICAg
ICAgICBpZiAoIWlzSW5Cb3VuZHM8VD4ocmhzLm1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+
b3ZlcmZsb3dlZCgpOworICAgICAgICBtX3ZhbHVlID0gcmhzLm1fdmFsdWU7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBDaGVja2VkKGNvbnN0IENo
ZWNrZWQ8VSwgVj4mIHJocykKKyAgICB7CisgICAgICAgIGlmIChyaHMuaGFzT3ZlcmZsb3dlZCgp
KQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBpZiAoIWlzSW5Cb3Vu
ZHM8VD4ocmhzLm1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAg
ICAgICBtX3ZhbHVlID0gcmhzLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNr
ZWQmIG9wZXJhdG9yPShDaGVja2VkIHJocykKKyAgICB7CisgICAgICAgIHRoaXMtPmNsZWFyT3Zl
cmZsb3coKTsKKyAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICB0
aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUgPSByaHMubV92YWx1ZTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4g
Y29uc3QgQ2hlY2tlZCYgb3BlcmF0b3I9KFUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgPSBDaGVja2VkKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+IGNvbnN0IENoZWNrZWQmIG9wZXJhdG9yPShjb25zdCBDaGVja2Vk
PFUsIFY+JiByaHMpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSBDaGVja2VkKHJocyk7
CisgICAgfQorICAgIAorICAgIC8vIHByZWZpeAorICAgIGNvbnN0IENoZWNrZWQmIG9wZXJhdG9y
KysoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWF4KCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFs
dWUrKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICBjb25zdCBDaGVj
a2VkJiBvcGVyYXRvci0tKCkKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1pbigpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwor
ICAgICAgICBtX3ZhbHVlLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisg
ICAgLy8gcG9zdGZpeCBvcGVyYXRvcnMKKyAgICBjb25zdCBDaGVja2VkIG9wZXJhdG9yKysoaW50
KQorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6
bWF4KCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIHJldHVybiBD
aGVja2VkKG1fdmFsdWUrKyk7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNrZWQgb3BlcmF0
b3ItLShpbnQpCisgICAgeworICAgICAgICBpZiAobV92YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPFQ+OjptaW4oKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAg
cmV0dXJuIENoZWNrZWQobV92YWx1ZS0tKTsKKyAgICB9CisgICAgCisgICAgLy8gQm9vbGVhbiBv
cGVyYXRvcnMKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
dGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0
dXJuICFtX3ZhbHVlOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCogKENoZWNrZWQ6OipVbnNw
ZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSkgPyByZWludGVycHJldF9j
YXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7CisgICAgfQorCisgICAgLy8gVmFsdWUg
YWNjZXNzb3JzLiBnZXQoKSB3aWxsIGNyYXNoIGlmIHRoZXJlJ3MgYmVlbiBhbiBvdmVyZmxvdy4K
KyAgICBUIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgc2FmZUdldChUJiB2YWx1ZSkgY29uc3QgV0FSTl9VTlVTRURfUkVU
VVJOCisgICAgeworICAgICAgICB2YWx1ZSA9IG1fdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlz
LT5oYXNPdmVyZmxvd2VkKCk7CisgICAgfQorCisgICAgLy8gTXV0YXRpbmcgYXNzaWdubWVudAor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKz0oVSByaHMp
CisgICAgeworICAgICAgICBpZiAoIXNhZmVBZGQobV92YWx1ZSwgcmhzLCBtX3ZhbHVlKSkKKyAg
ICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yLT0o
VSByaHMpCisgICAgeworICAgICAgICBpZiAoIXNhZmVTdWIobV92YWx1ZSwgcmhzLCBtX3ZhbHVl
KSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJh
dG9yKj0oVSByaHMpCisgICAgeworICAgICAgICBpZiAoIXNhZmVNdWx0aXBseShtX3ZhbHVlLCBy
aHMsIG1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKz0oQ2hlY2tlZDxVLCBWPiByaHMpCisgICAg
eworICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92
ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzICs9IHJocy5tX3ZhbHVlOworICAgIH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9w
ZXJhdG9yLT0oQ2hlY2tlZDxVLCBWPiByaHMpCisgICAgeworICAgICAgICBpZiAocmhzLmhhc092
ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzIC09IHJocy5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKj0oQ2hlY2tlZDxVLCBWPiBy
aHMpCisgICAgeworICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAg
IHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzICo9IHJocy5tX3ZhbHVl
OworICAgIH0KKworICAgIC8vIEVxdWFsaXR5IGNvbXBhcmlzb25zCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFY+IGJvb2wgb3BlcmF0b3I9PShDaGVja2VkPFQsIFY+IHJocykKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXQoKSA9PSByaHMuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I9PShVIHJocykKKyAgICB7CisgICAgICAgIGlmICh0aGlz
LT5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAg
ICAgIHJldHVybiBzYWZlRXF1YWxzKG1fdmFsdWUsIHJocyk7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yPT0o
Q2hlY2tlZDxVLCBWPiByaHMpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCkgPT0gQ2hlY2tl
ZChyaHMuZ2V0KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBib29sIG9w
ZXJhdG9yIT0oVSByaHMpCisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSByaHMpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBEaXNhbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9uIG9m
IGZsb2F0aW5nIHBvaW50IHRvIGludGVnZXIgdHlwZXMKKyAgICBDaGVja2VkKGZsb2F0KTsKKyAg
ICBDaGVja2VkKGRvdWJsZSk7CisgICAgdm9pZCBvcGVyYXRvcj0oZmxvYXQpOworICAgIHZvaWQg
b3BlcmF0b3I9KGRvdWJsZSk7CisgICAgdm9pZCBvcGVyYXRvcis9KGZsb2F0KTsKKyAgICB2b2lk
IG9wZXJhdG9yKz0oZG91YmxlKTsKKyAgICB2b2lkIG9wZXJhdG9yLT0oZmxvYXQpOworICAgIHZv
aWQgb3BlcmF0b3ItPShkb3VibGUpOworICAgIFQgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBp
bmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93
SGFuZGxlcj4gb3BlcmF0b3IrKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNr
ZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiByaHMpCit7CisgICAgVSB4OworICAgIFYgeTsKKyAgICBi
b29sIG92ZXJmbG93ZWQgPSBsaHMuc2FmZUdldCh4KSB8fCByaHMuc2FmZUdldCh5KTsKKyAgICB0
eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0OworICAgIG92ZXJmbG93ZWQg
fD0gIXNhZmVBZGQoeCwgeSwgcmVzdWx0KTsKKyAgICBpZiAob3ZlcmZsb3dlZCkKKyAgICAgICAg
cmV0dXJuIFJlc3VsdE92ZXJmbG93ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3Rh
dGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3Zl
cmZsb3dIYW5kbGVyPiBvcGVyYXRvci0oQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywg
Q2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAgICBVIHg7CisgICAgViB5Owor
ICAgIGJvb2wgb3ZlcmZsb3dlZCA9IGxocy5zYWZlR2V0KHgpIHx8IHJocy5zYWZlR2V0KHkpOwor
ICAgIHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSByZXN1bHQ7CisgICAgb3ZlcmZs
b3dlZCB8PSAhc2FmZVN1Yih4LCB5LCByZXN1bHQpOworICAgIGlmIChvdmVyZmxvd2VkKQorICAg
ICAgICByZXR1cm4gUmVzdWx0T3ZlcmZsb3dlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBl
LCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yKihDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4g
bGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAgIFUgeDsKKyAgICBW
IHk7CisgICAgYm9vbCBvdmVyZmxvd2VkID0gbGhzLnNhZmVHZXQoeCkgfHwgcmhzLnNhZmVHZXQo
eSk7CisgICAgdHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlIHJlc3VsdDsKKyAgICBv
dmVyZmxvd2VkIHw9ICFzYWZlTXVsdGlwbHkoeCwgeSwgcmVzdWx0KTsKKyAgICBpZiAob3ZlcmZs
b3dlZCkKKyAgICAgICAgcmV0dXJuIFJlc3VsdE92ZXJmbG93ZWQ7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6
UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvcisoQ2hlY2tlZDxVLCBPdmVyZmxv
d0hhbmRsZXI+IGxocywgViByaHMpCit7CisgICAgcmV0dXJuIGxocyArIENoZWNrZWQ8ViwgT3Zl
cmZsb3dIYW5kbGVyPihyaHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5h
bWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yLShD
aGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBWIHJocykKK3sKKyAgICByZXR1cm4gbGhz
IC0gQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+KHJocyk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxp
bmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFu
ZGxlcj4gb3BlcmF0b3IqKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIFYgcmhzKQor
eworICAgIHJldHVybiBsaHMgKiBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4ocmhzKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvcisoVSBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZs
b3dIYW5kbGVyPiByaHMpCit7CisgICAgcmV0dXJuIENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVy
PihsaHMpICsgcmhzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVz
dWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yLShVIGxocywg
Q2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAgICByZXR1cm4gQ2hlY2tlZDxV
LCBPdmVyZmxvd0hhbmRsZXI+KGxocykgLSByaHM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hl
Y2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4g
b3BlcmF0b3IqKFUgbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAg
IHJldHVybiBDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4obGhzKSAqIHJoczsKK30KKworfQor
Cit1c2luZyBXVEY6OkNoZWNrZWQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKaW5kZXggOTAzYzY5MjJhZmM4YjM0ZTViYjA2MDVk
MWZiYjgwZGFiZmJiMTQ4Yy4uMDM5NjI4NTg5OGE3ZmNmYTY1ZDQ1MDY0NmU2ZjFlZGY4NmU0MDIy
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3Bw
CkBAIC0zNTQsMjMgKzM1NCwyMyBAQCBwdWJsaWM6CiAKICAgICBib29sIG1hdGNoQXNzZXJ0aW9u
Qk9MKEJ5dGVUZXJtJiB0ZXJtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChpbnB1dC5hdFN0YXJ0
KHRlcm0uaW5wdXRQb3NpdGlvbikpIHx8IChwYXR0ZXJuLT5tX211bHRpbGluZSAmJiB0ZXN0Q2hh
cmFjdGVyQ2xhc3MocGF0dGVybi0+bmV3bGluZUNoYXJhY3RlckNsYXNzLCBpbnB1dC5yZWFkQ2hl
Y2tlZCh0ZXJtLmlucHV0UG9zaXRpb24gLSAxKSkpOworICAgICAgICByZXR1cm4gKGlucHV0LmF0
U3RhcnQodGVybS5pbnB1dFBvc2l0aW9uLmdldCgpKSkgfHwgKHBhdHRlcm4tPm1fbXVsdGlsaW5l
ICYmIHRlc3RDaGFyYWN0ZXJDbGFzcyhwYXR0ZXJuLT5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MsIGlu
cHV0LnJlYWRDaGVja2VkKCh0ZXJtLmlucHV0UG9zaXRpb24gLSAxKS5nZXQoKSkpKTsKICAgICB9
CiAKICAgICBib29sIG1hdGNoQXNzZXJ0aW9uRU9MKEJ5dGVUZXJtJiB0ZXJtKQogICAgIHsKICAg
ICAgICAgaWYgKHRlcm0uaW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAgIHJldHVybiAoaW5wdXQu
YXRFbmQodGVybS5pbnB1dFBvc2l0aW9uKSkgfHwgKHBhdHRlcm4tPm1fbXVsdGlsaW5lICYmIHRl
c3RDaGFyYWN0ZXJDbGFzcyhwYXR0ZXJuLT5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MsIGlucHV0LnJl
YWRDaGVja2VkKHRlcm0uaW5wdXRQb3NpdGlvbikpKTsKKyAgICAgICAgICAgIHJldHVybiAoaW5w
dXQuYXRFbmQodGVybS5pbnB1dFBvc2l0aW9uLmdldCgpKSkgfHwgKHBhdHRlcm4tPm1fbXVsdGls
aW5lICYmIHRlc3RDaGFyYWN0ZXJDbGFzcyhwYXR0ZXJuLT5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3Ms
IGlucHV0LnJlYWRDaGVja2VkKHRlcm0uaW5wdXRQb3NpdGlvbi5nZXQoKSkpKTsKIAogICAgICAg
ICByZXR1cm4gKGlucHV0LmF0RW5kKCkpIHx8IChwYXR0ZXJuLT5tX211bHRpbGluZSAmJiB0ZXN0
Q2hhcmFjdGVyQ2xhc3MocGF0dGVybi0+bmV3bGluZUNoYXJhY3RlckNsYXNzLCBpbnB1dC5yZWFk
KCkpKTsKICAgICB9CiAKICAgICBib29sIG1hdGNoQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KEJ5dGVU
ZXJtJiB0ZXJtKQogICAgIHsKLSAgICAgICAgYm9vbCBwcmV2SXNXb3JkY2hhciA9ICFpbnB1dC5h
dFN0YXJ0KHRlcm0uaW5wdXRQb3NpdGlvbikgJiYgdGVzdENoYXJhY3RlckNsYXNzKHBhdHRlcm4t
PndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MsIGlucHV0LnJlYWRDaGVja2VkKHRlcm0uaW5wdXRQb3Np
dGlvbiAtIDEpKTsKKyAgICAgICAgYm9vbCBwcmV2SXNXb3JkY2hhciA9ICFpbnB1dC5hdFN0YXJ0
KHRlcm0uaW5wdXRQb3NpdGlvbi5nZXQoKSkgJiYgdGVzdENoYXJhY3RlckNsYXNzKHBhdHRlcm4t
PndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MsIGlucHV0LnJlYWRDaGVja2VkKCh0ZXJtLmlucHV0UG9z
aXRpb24gLSAxKS5nZXQoKSkpOwogICAgICAgICBib29sIHJlYWRJc1dvcmRjaGFyOwogICAgICAg
ICBpZiAodGVybS5pbnB1dFBvc2l0aW9uKQotICAgICAgICAgICAgcmVhZElzV29yZGNoYXIgPSAh
aW5wdXQuYXRFbmQodGVybS5pbnB1dFBvc2l0aW9uKSAmJiB0ZXN0Q2hhcmFjdGVyQ2xhc3MocGF0
dGVybi0+d29yZGNoYXJDaGFyYWN0ZXJDbGFzcywgaW5wdXQucmVhZENoZWNrZWQodGVybS5pbnB1
dFBvc2l0aW9uKSk7CisgICAgICAgICAgICByZWFkSXNXb3JkY2hhciA9ICFpbnB1dC5hdEVuZCh0
ZXJtLmlucHV0UG9zaXRpb24uZ2V0KCkpICYmIHRlc3RDaGFyYWN0ZXJDbGFzcyhwYXR0ZXJuLT53
b3JkY2hhckNoYXJhY3RlckNsYXNzLCBpbnB1dC5yZWFkQ2hlY2tlZCh0ZXJtLmlucHV0UG9zaXRp
b24uZ2V0KCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVhZElzV29yZGNoYXIgPSAh
aW5wdXQuYXRFbmQoKSAmJiB0ZXN0Q2hhcmFjdGVyQ2xhc3MocGF0dGVybi0+d29yZGNoYXJDaGFy
YWN0ZXJDbGFzcywgaW5wdXQucmVhZCgpKTsKIApAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBRdWFudGlmaWVyTm9uR3JlZWR5OgogICAgICAgICAgICAgaWYgKChiYWNr
VHJhY2stPm1hdGNoQW1vdW50IDwgdGVybS5hdG9tLnF1YW50aXR5Q291bnQpICYmIGlucHV0LmNo
ZWNrSW5wdXQoMSkpIHsKICAgICAgICAgICAgICAgICArK2JhY2tUcmFjay0+bWF0Y2hBbW91bnQ7
Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrQ2hhcmFjdGVyKHRlcm0uYXRvbS5wYXR0ZXJuQ2hh
cmFjdGVyLCB0ZXJtLmlucHV0UG9zaXRpb24gLSAxKSkKKyAgICAgICAgICAgICAgICBpZiAoY2hl
Y2tDaGFyYWN0ZXIodGVybS5hdG9tLnBhdHRlcm5DaGFyYWN0ZXIsICh0ZXJtLmlucHV0UG9zaXRp
b24gLSAxKS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaW5wdXQudW5jaGVja0lucHV0KGJhY2tUcmFjay0+bWF0Y2hB
bW91bnQpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBRdWFudGlm
aWVyTm9uR3JlZWR5OgogICAgICAgICAgICAgaWYgKChiYWNrVHJhY2stPm1hdGNoQW1vdW50IDwg
dGVybS5hdG9tLnF1YW50aXR5Q291bnQpICYmIGlucHV0LmNoZWNrSW5wdXQoMSkpIHsKICAgICAg
ICAgICAgICAgICArK2JhY2tUcmFjay0+bWF0Y2hBbW91bnQ7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoZWNrQ2FzZWRDaGFyYWN0ZXIodGVybS5hdG9tLmNhc2VkQ2hhcmFjdGVyLmxvLCB0ZXJtLmF0
b20uY2FzZWRDaGFyYWN0ZXIuaGksIHRlcm0uaW5wdXRQb3NpdGlvbiAtIDEpKQorICAgICAgICAg
ICAgICAgIGlmIChjaGVja0Nhc2VkQ2hhcmFjdGVyKHRlcm0uYXRvbS5jYXNlZENoYXJhY3Rlci5s
bywgdGVybS5hdG9tLmNhc2VkQ2hhcmFjdGVyLmhpLCAodGVybS5pbnB1dFBvc2l0aW9uIC0gMSku
Z2V0KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlucHV0LnVuY2hlY2tJbnB1dChiYWNrVHJhY2stPm1hdGNoQW1vdW50KTsK
QEAgLTQ0NCw3ICs0NDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAodGVybS5hdG9tLnF1
YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50OiB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG1hdGNoQW1vdW50ID0gMDsgbWF0Y2hBbW91bnQgPCB0ZXJt
LmF0b20ucXVhbnRpdHlDb3VudDsgKyttYXRjaEFtb3VudCkgewotICAgICAgICAgICAgICAgIGlm
ICghY2hlY2tDaGFyYWN0ZXJDbGFzcyh0ZXJtLmF0b20uY2hhcmFjdGVyQ2xhc3MsIHRlcm0uaW52
ZXJ0KCksIHRlcm0uaW5wdXRQb3NpdGlvbiArIG1hdGNoQW1vdW50KSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWNoZWNrQ2hhcmFjdGVyQ2xhc3ModGVybS5hdG9tLmNoYXJhY3RlckNsYXNzLCB0ZXJt
LmludmVydCgpLCAodGVybS5pbnB1dFBvc2l0aW9uICsgbWF0Y2hBbW91bnQpLmdldCgpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC00NTMsNyArNDUzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IFF1YW50aWZpZXJHcmVlZHk6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoQW1vdW50ID0g
MDsKICAgICAgICAgICAgIHdoaWxlICgobWF0Y2hBbW91bnQgPCB0ZXJtLmF0b20ucXVhbnRpdHlD
b3VudCkgJiYgaW5wdXQuY2hlY2tJbnB1dCgxKSkgewotICAgICAgICAgICAgICAgIGlmICghY2hl
Y2tDaGFyYWN0ZXJDbGFzcyh0ZXJtLmF0b20uY2hhcmFjdGVyQ2xhc3MsIHRlcm0uaW52ZXJ0KCks
IHRlcm0uaW5wdXRQb3NpdGlvbiAtIDEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja0No
YXJhY3RlckNsYXNzKHRlcm0uYXRvbS5jaGFyYWN0ZXJDbGFzcywgdGVybS5pbnZlcnQoKSwgKHRl
cm0uaW5wdXRQb3NpdGlvbiAtIDEpLmdldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBpbnB1
dC51bmNoZWNrSW5wdXQoMSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTQ5Myw3ICs0OTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUXVhbnRp
Zmllck5vbkdyZWVkeToKICAgICAgICAgICAgIGlmICgoYmFja1RyYWNrLT5tYXRjaEFtb3VudCA8
IHRlcm0uYXRvbS5xdWFudGl0eUNvdW50KSAmJiBpbnB1dC5jaGVja0lucHV0KDEpKSB7CiAgICAg
ICAgICAgICAgICAgKytiYWNrVHJhY2stPm1hdGNoQW1vdW50OwotICAgICAgICAgICAgICAgIGlm
IChjaGVja0NoYXJhY3RlckNsYXNzKHRlcm0uYXRvbS5jaGFyYWN0ZXJDbGFzcywgdGVybS5pbnZl
cnQoKSwgdGVybS5pbnB1dFBvc2l0aW9uIC0gMSkpCisgICAgICAgICAgICAgICAgaWYgKGNoZWNr
Q2hhcmFjdGVyQ2xhc3ModGVybS5hdG9tLmNoYXJhY3RlckNsYXNzLCB0ZXJtLmludmVydCgpLCAo
dGVybS5pbnB1dFBvc2l0aW9uIC0gMSkuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlucHV0LnVuY2hlY2tJbnB1dChi
YWNrVHJhY2stPm1hdGNoQW1vdW50KTsKQEAgLTUyNiw3ICs1MjYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgUXVhbnRpZmllckZpeGVkQ291bnQ6IHsKICAgICAgICAgICAgIGJhY2tUcmFjay0+
YmVnaW4gPSBpbnB1dC5nZXRQb3MoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbWF0Y2hB
bW91bnQgPSAwOyBtYXRjaEFtb3VudCA8IHRlcm0uYXRvbS5xdWFudGl0eUNvdW50OyArK21hdGNo
QW1vdW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1lQmFja1JlZmVyZW5jZSht
YXRjaEJlZ2luLCBtYXRjaEVuZCwgdGVybS5pbnB1dFBvc2l0aW9uKSkgeworICAgICAgICAgICAg
ICAgIGlmICghdHJ5Q29uc3VtZUJhY2tSZWZlcmVuY2UobWF0Y2hCZWdpbiwgbWF0Y2hFbmQsIHRl
cm0uaW5wdXRQb3NpdGlvbi5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0
UG9zKGJhY2tUcmFjay0+YmVnaW4pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNTM2LDcgKzUzNiw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICBjYXNlIFF1YW50aWZpZXJHcmVlZHk6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoQW1v
dW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICgobWF0Y2hBbW91bnQgPCB0ZXJtLmF0b20ucXVh
bnRpdHlDb3VudCkgJiYgdHJ5Q29uc3VtZUJhY2tSZWZlcmVuY2UobWF0Y2hCZWdpbiwgbWF0Y2hF
bmQsIHRlcm0uaW5wdXRQb3NpdGlvbikpCisgICAgICAgICAgICB3aGlsZSAoKG1hdGNoQW1vdW50
IDwgdGVybS5hdG9tLnF1YW50aXR5Q291bnQpICYmIHRyeUNvbnN1bWVCYWNrUmVmZXJlbmNlKG1h
dGNoQmVnaW4sIG1hdGNoRW5kLCAodGVybS5pbnB1dFBvc2l0aW9uKS5nZXQoKSkpCiAgICAgICAg
ICAgICAgICAgKyttYXRjaEFtb3VudDsKICAgICAgICAgICAgIGJhY2tUcmFjay0+bWF0Y2hBbW91
bnQgPSBtYXRjaEFtb3VudDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTc5LDcgKzU3
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUXVhbnRp
Zmllck5vbkdyZWVkeToKLSAgICAgICAgICAgIGlmICgoYmFja1RyYWNrLT5tYXRjaEFtb3VudCA8
IHRlcm0uYXRvbS5xdWFudGl0eUNvdW50KSAmJiB0cnlDb25zdW1lQmFja1JlZmVyZW5jZShtYXRj
aEJlZ2luLCBtYXRjaEVuZCwgdGVybS5pbnB1dFBvc2l0aW9uKSkgeworICAgICAgICAgICAgaWYg
KChiYWNrVHJhY2stPm1hdGNoQW1vdW50IDwgdGVybS5hdG9tLnF1YW50aXR5Q291bnQpICYmIHRy
eUNvbnN1bWVCYWNrUmVmZXJlbmNlKG1hdGNoQmVnaW4sIG1hdGNoRW5kLCB0ZXJtLmlucHV0UG9z
aXRpb24uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgKytiYWNrVHJhY2stPm1hdGNoQW1vdW50
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNTk0LDgg
KzU5NCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS5hdG9tLnN1YnBhdHRlcm5J
ZDsKLSAgICAgICAgICAgIG91dHB1dFsoc3VicGF0dGVybklkIDw8IDEpXSA9IGNvbnRleHQtPmdl
dERpc2p1bmN0aW9uQ29udGV4dCh0ZXJtKS0+bWF0Y2hCZWdpbiArIHRlcm0uaW5wdXRQb3NpdGlv
bjsKLSAgICAgICAgICAgIG91dHB1dFsoc3VicGF0dGVybklkIDw8IDEpICsgMV0gPSBjb250ZXh0
LT5nZXREaXNqdW5jdGlvbkNvbnRleHQodGVybSktPm1hdGNoRW5kICsgdGVybS5pbnB1dFBvc2l0
aW9uOworICAgICAgICAgICAgb3V0cHV0WyhzdWJwYXR0ZXJuSWQgPDwgMSldID0gKGNvbnRleHQt
PmdldERpc2p1bmN0aW9uQ29udGV4dCh0ZXJtKS0+bWF0Y2hCZWdpbiArIHRlcm0uaW5wdXRQb3Np
dGlvbikuZ2V0KCk7CisgICAgICAgICAgICBvdXRwdXRbKHN1YnBhdHRlcm5JZCA8PCAxKSArIDFd
ID0gKGNvbnRleHQtPmdldERpc2p1bmN0aW9uQ29udGV4dCh0ZXJtKS0+bWF0Y2hFbmQgKyB0ZXJt
LmlucHV0UG9zaXRpb24pLmdldCgpOwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgcmVzZXRN
YXRjaGVzKEJ5dGVUZXJtJiB0ZXJtLCBQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uQ29udGV4dCogY29u
dGV4dCkKQEAgLTY0OCw3ICs2NDgsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaWYgKHRlcm0uY2Fw
dHVyZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSB0ZXJtLmF0b20u
c3VicGF0dGVybklkOwotICAgICAgICAgICAgb3V0cHV0WyhzdWJwYXR0ZXJuSWQgPDwgMSldID0g
aW5wdXQuZ2V0UG9zKCkgKyB0ZXJtLmlucHV0UG9zaXRpb247CisgICAgICAgICAgICBvdXRwdXRb
KHN1YnBhdHRlcm5JZCA8PCAxKV0gPSAoaW5wdXQuZ2V0UG9zKCkgKyB0ZXJtLmlucHV0UG9zaXRp
b24pLmdldCgpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02NjEsNyAr
NjYxLDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkgewogICAgICAg
ICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS5hdG9tLnN1YnBhdHRlcm5JZDsKLSAg
ICAgICAgICAgIG91dHB1dFsoc3VicGF0dGVybklkIDw8IDEpICsgMV0gPSBpbnB1dC5nZXRQb3Mo
KSArIHRlcm0uaW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgIG91dHB1dFsoc3VicGF0dGVybklk
IDw8IDEpICsgMV0gPSAoaW5wdXQuZ2V0UG9zKCkgKyB0ZXJtLmlucHV0UG9zaXRpb24pLmdldCgp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRlcm0uYXRvbS5xdWFudGl0eVR5cGUgPT0gUXVh
bnRpZmllckZpeGVkQ291bnQpCkBAIC03MjMsNyArNzIzLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoKCZ0ZXJtIC0gdGVybS5hdG9tLnBhcmVudGhlc2VzV2lkdGgpLT50
eXBlID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luKTsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCgmdGVybSAtIHRlcm0uYXRvbS5wYXJlbnRoZXNlc1dp
ZHRoKS0+aW5wdXRQb3NpdGlvbiA9PSB0ZXJtLmlucHV0UG9zaXRpb24pOwogICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSB0ZXJtLmF0b20uc3VicGF0dGVybklkOwot
ICAgICAgICAgICAgICAgICAgICBvdXRwdXRbc3VicGF0dGVybklkIDw8IDFdID0gaW5wdXQuZ2V0
UG9zKCkgKyB0ZXJtLmlucHV0UG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIG91dHB1dFtz
dWJwYXR0ZXJuSWQgPDwgMV0gPSAoaW5wdXQuZ2V0UG9zKCkgKyB0ZXJtLmlucHV0UG9zaXRpb24p
LmdldCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250ZXh0LT50ZXJt
IC09IHRlcm0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTEzOSw3ICsxMTM5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEJ5dGVUZXJt
OjpUeXBlUGF0dGVybkNoYXJhY3Rlck9uY2U6CiAgICAgICAgIGNhc2UgQnl0ZVRlcm06OlR5cGVQ
YXR0ZXJuQ2hhcmFjdGVyRml4ZWQ6IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbWF0Y2hB
bW91bnQgPSAwOyBtYXRjaEFtb3VudCA8IGN1cnJlbnRUZXJtKCkuYXRvbS5xdWFudGl0eUNvdW50
OyArK21hdGNoQW1vdW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja0NoYXJhY3Rlcihj
dXJyZW50VGVybSgpLmF0b20ucGF0dGVybkNoYXJhY3RlciwgY3VycmVudFRlcm0oKS5pbnB1dFBv
c2l0aW9uICsgbWF0Y2hBbW91bnQpKQorICAgICAgICAgICAgICAgIGlmICghY2hlY2tDaGFyYWN0
ZXIoY3VycmVudFRlcm0oKS5hdG9tLnBhdHRlcm5DaGFyYWN0ZXIsIChjdXJyZW50VGVybSgpLmlu
cHV0UG9zaXRpb24gKyBtYXRjaEFtb3VudCkuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBC
QUNLVFJBQ0soKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE1BVENIX05FWFQoKTsKQEAg
LTExNDgsNyArMTE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhY2tUcmFja0luZm9QYXR0
ZXJuQ2hhcmFjdGVyKiBiYWNrVHJhY2sgPSByZWludGVycHJldF9jYXN0PEJhY2tUcmFja0luZm9Q
YXR0ZXJuQ2hhcmFjdGVyKj4oY29udGV4dC0+ZnJhbWUgKyBjdXJyZW50VGVybSgpLmZyYW1lTG9j
YXRpb24pOwogICAgICAgICAgICAgdW5zaWduZWQgbWF0Y2hBbW91bnQgPSAwOwogICAgICAgICAg
ICAgd2hpbGUgKChtYXRjaEFtb3VudCA8IGN1cnJlbnRUZXJtKCkuYXRvbS5xdWFudGl0eUNvdW50
KSAmJiBpbnB1dC5jaGVja0lucHV0KDEpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja0No
YXJhY3RlcihjdXJyZW50VGVybSgpLmF0b20ucGF0dGVybkNoYXJhY3RlciwgY3VycmVudFRlcm0o
KS5pbnB1dFBvc2l0aW9uIC0gMSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrQ2hhcmFj
dGVyKGN1cnJlbnRUZXJtKCkuYXRvbS5wYXR0ZXJuQ2hhcmFjdGVyLCAoY3VycmVudFRlcm0oKS5p
bnB1dFBvc2l0aW9uIC0gMSkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlucHV0LnVu
Y2hlY2tJbnB1dCgxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEJ5dGVUZXJt
OjpUeXBlUGF0dGVybkNhc2VkQ2hhcmFjdGVyT25jZToKICAgICAgICAgY2FzZSBCeXRlVGVybTo6
VHlwZVBhdHRlcm5DYXNlZENoYXJhY3RlckZpeGVkOiB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG1hdGNoQW1vdW50ID0gMDsgbWF0Y2hBbW91bnQgPCBjdXJyZW50VGVybSgpLmF0b20ucXVh
bnRpdHlDb3VudDsgKyttYXRjaEFtb3VudCkgewotICAgICAgICAgICAgICAgIGlmICghY2hlY2tD
YXNlZENoYXJhY3RlcihjdXJyZW50VGVybSgpLmF0b20uY2FzZWRDaGFyYWN0ZXIubG8sIGN1cnJl
bnRUZXJtKCkuYXRvbS5jYXNlZENoYXJhY3Rlci5oaSwgY3VycmVudFRlcm0oKS5pbnB1dFBvc2l0
aW9uICsgbWF0Y2hBbW91bnQpKQorICAgICAgICAgICAgICAgIGlmICghY2hlY2tDYXNlZENoYXJh
Y3RlcihjdXJyZW50VGVybSgpLmF0b20uY2FzZWRDaGFyYWN0ZXIubG8sIGN1cnJlbnRUZXJtKCku
YXRvbS5jYXNlZENoYXJhY3Rlci5oaSwgKGN1cnJlbnRUZXJtKCkuaW5wdXRQb3NpdGlvbiArIG1h
dGNoQW1vdW50KS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIEJBQ0tUUkFDSygpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgTUFUQ0hfTkVYVCgpOwpAQCAtMTE3Niw3ICsxMTc2LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXIqIGJh
Y2tUcmFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXIq
Pihjb250ZXh0LT5mcmFtZSArIGN1cnJlbnRUZXJtKCkuZnJhbWVMb2NhdGlvbik7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBtYXRjaEFtb3VudCA9IDA7CiAgICAgICAgICAgICB3aGlsZSAoKG1hdGNo
QW1vdW50IDwgY3VycmVudFRlcm0oKS5hdG9tLnF1YW50aXR5Q291bnQpICYmIGlucHV0LmNoZWNr
SW5wdXQoMSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrQ2FzZWRDaGFyYWN0ZXIoY3Vy
cmVudFRlcm0oKS5hdG9tLmNhc2VkQ2hhcmFjdGVyLmxvLCBjdXJyZW50VGVybSgpLmF0b20uY2Fz
ZWRDaGFyYWN0ZXIuaGksIGN1cnJlbnRUZXJtKCkuaW5wdXRQb3NpdGlvbiAtIDEpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFjaGVja0Nhc2VkQ2hhcmFjdGVyKGN1cnJlbnRUZXJtKCkuYXRvbS5j
YXNlZENoYXJhY3Rlci5sbywgY3VycmVudFRlcm0oKS5hdG9tLmNhc2VkQ2hhcmFjdGVyLmhpLCAo
Y3VycmVudFRlcm0oKS5pbnB1dFBvc2l0aW9uIC0gMSkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlucHV0LnVuY2hlY2tJbnB1dCgxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgcHVibGljOgogICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpXb3JkQm91bmRhcnko
aW52ZXJ0LCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGF0dGVybkNo
YXJhY3RlcihVQ2hhciBjaCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRp
b24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkK
KyAgICB2b2lkIGF0b21QYXR0ZXJuQ2hhcmFjdGVyKFVDaGFyIGNoLCBpbnQgaW5wdXRQb3NpdGlv
biwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3Vu
dCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgaWYgKG1fcGF0
dGVybi5tX2lnbm9yZUNhc2UpIHsKICAgICAgICAgICAgIFVDaGFyIGxvID0gVW5pY29kZTo6dG9M
b3dlcihjaCk7CkBAIC0xNTA2LDIyICsxNTA2LDIyIEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShjaCwgaW5wdXRQb3NpdGlvbiwgZnJh
bWVMb2NhdGlvbiwgcXVhbnRpdHlDb3VudCwgcXVhbnRpdHlUeXBlKSk7CiAgICAgfQogCi0gICAg
dm9pZCBhdG9tQ2hhcmFjdGVyQ2xhc3MoQ2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzLCBi
b29sIGludmVydCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVu
c2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB2
b2lkIGF0b21DaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3MsIGJv
b2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hl
Y2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBl
KQogICAgIHsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVy
bShjaGFyYWN0ZXJDbGFzcywgaW52ZXJ0LCBpbnB1dFBvc2l0aW9uKSk7CiAKLSAgICAgICAgbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAx
XS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50OworICAgICAgICBtX2JvZHlEaXNq
dW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmF0b20u
cXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uYXRvbS5x
dWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9
IGZyYW1lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBhdG9tQmFja1JlZmVyZW5jZSh1bnNp
Z25lZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUp
CisgICAgdm9pZCBhdG9tQmFja1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGludCBp
bnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBx
dWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoc3VicGF0dGVybklkKTsKIAogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXMuYXBwZW5kKEJ5dGVUZXJtOjpCYWNrUmVmZXJlbmNlKHN1YnBhdHRlcm5JZCwgaW5wdXRQb3Np
dGlvbikpOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3Vu
dDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50
ZXJtcy5zaXplKCkgLSAxXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50LmdldCgp
OwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLnNpemUoKSAtIDFdLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwogICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUo
KSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgIH0KQEAgLTE1ODIsNyAr
MTU4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJyZW50QWx0ZXJuYXRpdmVJbmRleCA9IGJl
Z2luVGVybSArIDE7CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGFyZW50aGV0aWNhbEFzc2VydGlv
bkVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQg
cXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIHZvaWQgYXRv
bVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZy
YW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJU
eXBlIHF1YW50aXR5VHlwZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVybSA9IHBv
cFBhcmVudGhlc2VzU3RhY2soKTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdpblRlcm0g
KyAxKTsKQEAgLTE1OTgsOSArMTU5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRlcm0gLSBi
ZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5mcmFt
ZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50OworICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5Q291
bnQgPSBxdWFudGl0eUNvdW50LmdldCgpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKLSAgICAgICAg
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1
YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5h
dG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50LmdldCgpOwogICAgICAgICBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5
cGU7CiAgICAgfQogCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tlbmRJbmRleF0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRp
b247CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKHVuc2ln
bmVkIGxhc3RTdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxv
Y2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5
cGUsIHVuc2lnbmVkIGNhbGxGcmFtZVNpemUgPSAwKQorICAgIHZvaWQgYXRvbVBhcmVudGhlc2Vz
U3VicGF0dGVybkVuZCh1bnNpZ25lZCBsYXN0U3VicGF0dGVybklkLCBpbnQgaW5wdXRQb3NpdGlv
biwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3Vu
dCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlLCB1bnNpZ25lZCBjYWxsRnJhbWVTaXplID0g
MCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3Rh
Y2soKTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKQEAgLTE3MDYs
MTIgKzE3MDYsMTIgQEAgcHVibGljOgogICAgICAgICBtX2FsbFBhcmVudGhlc2VzSW5mby5hcHBl
bmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4s
IHN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgY2FwdHVyZSwgaW5wdXRQb3Np
dGlvbikpOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0
b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0
aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQu
Z2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20u
cXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXNbYmVnaW5UZXJtXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICB9CiAK
LSAgICB2b2lkIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2ln
bmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBl
IHF1YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoaW50IGlucHV0
UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50
aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKICAgICB7CiAgICAgICAgIHVu
c2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3RhY2soKTsKICAgICAgICAgY2xvc2VB
bHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKQEAgLTE3MjcsMTMgKzE3MjcsMTMgQEAgcHVibGlj
OgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRo
ZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogCi0gICAg
ICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3Vu
dCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdp
blRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0g
cXVhbnRpdHlUeXBlOwotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0u
YXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQu
Z2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1
YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKICAgICB9CiAKLSAgICB2b2lkIGF0b21QYXJlbnRo
ZXNlc1Rlcm1pbmFsRW5kKGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
LCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisg
ICAgdm9pZCBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5z
aWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVh
bnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYmVnaW5U
ZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAgICBjbG9zZUFsdGVybmF0aXZlKGJl
Z2luVGVybSArIDEpOwpAQCAtMTc0OSw5ICsxNzQ5LDkgQEAgcHVibGljOgogICAgICAgICBtX2Jv
ZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5k
VGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRl
cm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogCi0gICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291
bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVh
bnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0
aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwot
ICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eUNv
dW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2Vu
ZFRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1
YW50aXR5VHlwZTsKICAgICB9CiAKQEAgLTE4MTQsMjcgKzE4MTQsMjcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgc3dpdGNoICh0ZXJtLnR5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNl
IFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgotICAgICAgICAgICAgICAgICAgICBhc3Nl
cnRpb25CT0wodGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQp
OworICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25CT0woKHRlcm0uaW5wdXRQb3NpdGlvbiAt
IGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlv
bkVPTDoKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uRU9MKHRlcm0uaW5wdXRQb3NpdGlv
biAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkKTsKKyAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0aW9uRU9MKCh0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tl
ZCkuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAg
IGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAgICAgICAg
ICAgICAgICAgIGFzc2VydGlvbldvcmRCb3VuZGFyeSh0ZXJtLmludmVydCgpLCB0ZXJtLmlucHV0
UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCk7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydGlvbldvcmRCb3VuZGFyeSh0ZXJtLmludmVydCgpLCAodGVybS5pbnB1dFBvc2l0
aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQpLmdldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0
dGVybkNoYXJhY3RlcjoKLSAgICAgICAgICAgICAgICAgICAgYXRvbVBhdHRlcm5DaGFyYWN0ZXIo
dGVybS5wYXR0ZXJuQ2hhcmFjdGVyLCB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRB
bHJlYWR5Q2hlY2tlZCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRl
cm0ucXVhbnRpdHlUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgYXRvbVBhdHRlcm5DaGFyYWN0
ZXIodGVybS5wYXR0ZXJuQ2hhcmFjdGVyLCAodGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENv
dW50QWxyZWFkeUNoZWNrZWQpLmdldCgpLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRp
dHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFzczoK
LSAgICAgICAgICAgICAgICAgICAgYXRvbUNoYXJhY3RlckNsYXNzKHRlcm0uY2hhcmFjdGVyQ2xh
c3MsIHRlcm0uaW52ZXJ0KCksIHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRDb3VudEFscmVh
ZHlDaGVja2VkLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5x
dWFudGl0eVR5cGUpOworICAgICAgICAgICAgICAgICAgICBhdG9tQ2hhcmFjdGVyQ2xhc3ModGVy
bS5jaGFyYWN0ZXJDbGFzcywgdGVybS5pbnZlcnQoKSwgKHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1
cnJlbnRDb3VudEFscmVhZHlDaGVja2VkKS5nZXQoKSwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJt
LnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQmFja1JlZmVy
ZW5jZToKLSAgICAgICAgICAgICAgICAgICAgYXRvbUJhY2tSZWZlcmVuY2UodGVybS5iYWNrUmVm
ZXJlbmNlU3VicGF0dGVybklkLCB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJl
YWR5Q2hlY2tlZCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0u
cXVhbnRpdHlUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgYXRvbUJhY2tSZWZlcmVuY2UodGVy
bS5iYWNrUmVmZXJlbmNlU3VicGF0dGVybklkLCAodGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVu
dENvdW50QWxyZWFkeUNoZWNrZWQpLmdldCgpLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVh
bnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRm9yd2FyZFJl
ZmVyZW5jZToKQEAgLTE4NDksMTcgKzE4NDksMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCA9IHRlcm0ucGFyZW50
aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0
aW9uICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0
ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSAodGVybS5p
bnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQpLmdldCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzT25jZUJlZ2luKHRlcm0ucGFyZW50aGVz
ZXMuc3VicGF0dGVybklkLCB0ZXJtLmNhcHR1cmUoKSwgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCAt
IGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5mcmFtZUxvY2F0aW9uLCBhbHRl
cm5hdGl2ZUZyYW1lTG9jYXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgZW1pdERpc2p1
bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlD
aGVja2VkLCBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYXRvbVBhcmVudGhlc2VzT25jZUVuZChkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0LCB0
ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUp
OwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlcm0ucGFyZW50aGVzZXMuaXNUZXJt
aW5hbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsZWdhdGVFbmRJbnB1
dE9mZnNldCA9IHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2Vk
OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsZWdhdGVFbmRJbnB1dE9mZnNl
dCA9ICh0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCkuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2lu
KHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLmNhcHR1cmUoKSwgZGVsZWdhdGVF
bmRJbnB1dE9mZnNldCAtIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5mcmFt
ZUxvY2F0aW9uLCB0ZXJtLmZyYW1lTG9jYXRpb24gKyBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZW1pdERpc2p1
bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlD
aGVja2VkLCBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQoZGVsZWdhdGVFbmRJbnB1dE9mZnNl
dCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlU
eXBlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24g
LSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSAodGVybS5pbnB1dFBvc2l0aW9uIC0gY3Vy
cmVudENvdW50QWxyZWFkeUNoZWNrZWQpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJlZ2luKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVy
bklkLCB0ZXJtLmNhcHR1cmUoKSwgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCAtIGRpc2p1bmN0aW9u
QWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5mcmFtZUxvY2F0aW9uLCAwKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVtaXREaXNqdW5jdGlvbih0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9u
LCBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBhdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKHRlcm0ucGFyZW50aGVzZXMubGFzdFN1YnBh
dHRlcm5JZCwgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJt
LnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlLCB0ZXJtLnBhcmVudGhlc2VzLmRpc2p1
bmN0aW9uLT5tX2NhbGxGcmFtZVNpemUpOwpAQCAtMTg3MCw4ICsxODcwLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0
aW9uOiB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2Nh
dGlvbiA9IHRlcm0uZnJhbWVMb2NhdGlvbiArIFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5m
b1BhcmVudGhldGljYWxBc3NlcnRpb247CiAKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnRDb3VudEFscmVhZHlDaGVja2VkID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXJtLmlu
cHV0UG9zaXRpb24pKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpdmVJbnB1
dE9mZnNldCA9IGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkIC0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRlcm0uaW5wdXRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJy
ZW50Q291bnRBbHJlYWR5Q2hlY2tlZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGVybS5pbnB1
dFBvc2l0aW9uLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvc2l0aXZl
SW5wdXRPZmZzZXQgPSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCAtIHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0ZXJtLmlucHV0UG9zaXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCB1bmNoZWNrQW1vdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0
aXZlSW5wdXRPZmZzZXQgPiB0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1T
aXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bmNoZWNrQW1vdW50ID0gcG9zaXRpdmVJ
bnB1dE9mZnNldCAtIHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCmluZGV4IDc4
YThmMzQzODkzNjc0NGZiOTM5Njg2MjRjMTM3ZjA1ZDQ1MTAwNTkuLjI0NWE1Zjk0OGE3ODVlODdh
M2NhMjgyYTIzMGE1YzBmZTM2ODUxNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJJbnRlcnByZXRlci5oCkBAIC0xMDUsOSArMTA1LDkgQEAgc3RydWN0IEJ5dGVUZXJtIHsK
ICAgICB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uOwogICAgIGJvb2wgbV9jYXB0dXJlIDogMTsKICAg
ICBib29sIG1faW52ZXJ0IDogMTsKLSAgICBpbnQgaW5wdXRQb3NpdGlvbjsKKyAgICBDaGVja2Vk
PGludD4gaW5wdXRQb3NpdGlvbjsKIAotICAgIEJ5dGVUZXJtKFVDaGFyIGNoLCBpbnQgaW5wdXRQ
b3MsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50
aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICBCeXRlVGVybShVQ2hhciBjaCwgQ2hlY2tlZDxp
bnQ+IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBx
dWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgICAgIDogZnJh
bWVMb2NhdGlvbihmcmFtZUxvY2F0aW9uKQogICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKICAg
ICAgICAgLCBtX2ludmVydChmYWxzZSkKQEAgLTEyNiwxMSArMTI2LDExIEBAIHN0cnVjdCBCeXRl
VGVybSB7CiAKICAgICAgICAgYXRvbS5wYXR0ZXJuQ2hhcmFjdGVyID0gY2g7CiAgICAgICAgIGF0
b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwotICAgICAgICBhdG9tLnF1YW50aXR5Q291
bnQgPSBxdWFudGl0eUNvdW50OworICAgICAgICBhdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0
eUNvdW50LmdldCgpOwogICAgICAgICBpbnB1dFBvc2l0aW9uID0gaW5wdXRQb3M7CiAgICAgfQog
Ci0gICAgQnl0ZVRlcm0oVUNoYXIgbG8sIFVDaGFyIGhpLCBpbnQgaW5wdXRQb3MsIHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1
YW50aXR5VHlwZSkKKyAgICBCeXRlVGVybShVQ2hhciBsbywgVUNoYXIgaGksIENoZWNrZWQ8aW50
PiBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVh
bnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgICAgICA6IGZyYW1l
TG9jYXRpb24oZnJhbWVMb2NhdGlvbikKICAgICAgICAgLCBtX2NhcHR1cmUoZmFsc2UpCiAgICAg
ICAgICwgbV9pbnZlcnQoZmFsc2UpCkBAIC0xNTAsMTEgKzE1MCwxMSBAQCBzdHJ1Y3QgQnl0ZVRl
cm0gewogICAgICAgICBhdG9tLmNhc2VkQ2hhcmFjdGVyLmxvID0gbG87CiAgICAgICAgIGF0b20u
Y2FzZWRDaGFyYWN0ZXIuaGkgPSBoaTsKICAgICAgICAgYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFu
dGl0eVR5cGU7Ci0gICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7Cisg
ICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAg
IGlucHV0UG9zaXRpb24gPSBpbnB1dFBvczsKICAgICB9CiAKLSAgICBCeXRlVGVybShDaGFyYWN0
ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3MsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3MpCisgICAg
Qnl0ZVRlcm0oQ2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzLCBib29sIGludmVydCwgQ2hl
Y2tlZDxpbnQ+IGlucHV0UG9zKQogICAgICAgICA6IHR5cGUoQnl0ZVRlcm06OlR5cGVDaGFyYWN0
ZXJDbGFzcykKICAgICAgICAgLCBtX2NhcHR1cmUoZmFsc2UpCiAgICAgICAgICwgbV9pbnZlcnQo
aW52ZXJ0KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIGlu
cHV0UG9zaXRpb24gPSBpbnB1dFBvczsKICAgICB9CiAKLSAgICBCeXRlVGVybShUeXBlIHR5cGUs
IHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgQnl0ZURpc2p1bmN0aW9uKiBwYXJlbnRoZXNlc0luZm8s
IGJvb2wgY2FwdHVyZSwgaW50IGlucHV0UG9zKQorICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5z
aWduZWQgc3VicGF0dGVybklkLCBCeXRlRGlzanVuY3Rpb24qIHBhcmVudGhlc2VzSW5mbywgYm9v
bCBjYXB0dXJlLCBDaGVja2VkPGludD4gaW5wdXRQb3MpCiAgICAgICAgIDogdHlwZSh0eXBlKQog
ICAgICAgICAsIG1fY2FwdHVyZShjYXB0dXJlKQogICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQpA
QCAtMTg2LDcgKzE4Niw3IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIGF0b20ucXVhbnRp
dHlDb3VudCA9IDE7CiAgICAgfQogCi0gICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBz
dWJwYXR0ZXJuSWQsIGJvb2wgY2FwdHVyZSwgYm9vbCBpbnZlcnQsIGludCBpbnB1dFBvcykKKyAg
ICBCeXRlVGVybShUeXBlIHR5cGUsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgYm9vbCBjYXB0dXJl
LCBib29sIGludmVydCwgQ2hlY2tlZDxpbnQ+IGlucHV0UG9zKQogICAgICAgICA6IHR5cGUodHlw
ZSkKICAgICAgICAgLCBtX2NhcHR1cmUoY2FwdHVyZSkKICAgICAgICAgLCBtX2ludmVydChpbnZl
cnQpCkBAIC0xOTcsNDIgKzE5Nyw0MiBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgICAgICBpbnB1
dFBvc2l0aW9uID0gaW5wdXRQb3M7CiAgICAgfQogCi0gICAgc3RhdGljIEJ5dGVUZXJtIEJPTChp
bnQgaW5wdXRQb3MpCisgICAgc3RhdGljIEJ5dGVUZXJtIEJPTChDaGVja2VkPGludD4gaW5wdXRQ
b3MpCiAgICAgewogICAgICAgICBCeXRlVGVybSB0ZXJtKFR5cGVBc3NlcnRpb25CT0wpOwogICAg
ICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBpbnB1dFBvczsKICAgICAgICAgcmV0dXJuIHRlcm07
CiAgICAgfQogCi0gICAgc3RhdGljIEJ5dGVUZXJtIENoZWNrSW5wdXQodW5zaWduZWQgY291bnQp
CisgICAgc3RhdGljIEJ5dGVUZXJtIENoZWNrSW5wdXQoQ2hlY2tlZDx1bnNpZ25lZD4gY291bnQp
CiAgICAgewogICAgICAgICBCeXRlVGVybSB0ZXJtKFR5cGVDaGVja0lucHV0KTsKLSAgICAgICAg
dGVybS5jaGVja0lucHV0Q291bnQgPSBjb3VudDsKKyAgICAgICAgdGVybS5jaGVja0lucHV0Q291
bnQgPSBjb3VudC5nZXQoKTsKICAgICAgICAgcmV0dXJuIHRlcm07CiAgICAgfQogCi0gICAgc3Rh
dGljIEJ5dGVUZXJtIFVuY2hlY2tJbnB1dCh1bnNpZ25lZCBjb3VudCkKKyAgICBzdGF0aWMgQnl0
ZVRlcm0gVW5jaGVja0lucHV0KENoZWNrZWQ8dW5zaWduZWQ+IGNvdW50KQogICAgIHsKICAgICAg
ICAgQnl0ZVRlcm0gdGVybShUeXBlVW5jaGVja0lucHV0KTsKLSAgICAgICAgdGVybS5jaGVja0lu
cHV0Q291bnQgPSBjb3VudDsKKyAgICAgICAgdGVybS5jaGVja0lucHV0Q291bnQgPSBjb3VudC5n
ZXQoKTsKICAgICAgICAgcmV0dXJuIHRlcm07CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBCeXRl
VGVybSBFT0woaW50IGlucHV0UG9zKQorICAgIHN0YXRpYyBCeXRlVGVybSBFT0woQ2hlY2tlZDxp
bnQ+IGlucHV0UG9zKQogICAgIHsKICAgICAgICAgQnl0ZVRlcm0gdGVybShUeXBlQXNzZXJ0aW9u
RU9MKTsKICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gaW5wdXRQb3M7CiAgICAgICAgIHJl
dHVybiB0ZXJtOwogICAgIH0KIAotICAgIHN0YXRpYyBCeXRlVGVybSBXb3JkQm91bmRhcnkoYm9v
bCBpbnZlcnQsIGludCBpbnB1dFBvcykKKyAgICBzdGF0aWMgQnl0ZVRlcm0gV29yZEJvdW5kYXJ5
KGJvb2wgaW52ZXJ0LCBDaGVja2VkPGludD4gaW5wdXRQb3MpCiAgICAgewogICAgICAgICBCeXRl
VGVybSB0ZXJtKFR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnksIGludmVydCk7CiAgICAgICAgIHRl
cm0uaW5wdXRQb3NpdGlvbiA9IGlucHV0UG9zOwogICAgICAgICByZXR1cm4gdGVybTsKICAgICB9
CiAgICAgCi0gICAgc3RhdGljIEJ5dGVUZXJtIEJhY2tSZWZlcmVuY2UodW5zaWduZWQgc3VicGF0
dGVybklkLCBpbnQgaW5wdXRQb3MpCisgICAgc3RhdGljIEJ5dGVUZXJtIEJhY2tSZWZlcmVuY2Uo
dW5zaWduZWQgc3VicGF0dGVybklkLCBDaGVja2VkPGludD4gaW5wdXRQb3MpCiAgICAgewogICAg
ICAgICByZXR1cm4gQnl0ZVRlcm0oVHlwZUJhY2tSZWZlcmVuY2UsIHN1YnBhdHRlcm5JZCwgZmFs
c2UsIGZhbHNlLCBpbnB1dFBvcyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcAppbmRleCA4ZDUzNDRmN2QwYTM5NDA0ZGJjMGM3ZWIwMDQxYjkzNTE2NzAzYzRjLi5i
M2MwMDhkMmRkOTI0MGIxNzhhZTg1ZmNlZDJmMjYzZGEzODI0NTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcApAQCAtNTMwLDcgKzUzMCw3IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIGlmICghdGVybS0+
aW5wdXRQb3NpdGlvbikKICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkKSkpOwogCi0gICAgICAgICAgICByZWFkQ2hh
cmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSAtIDEsIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKCgodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hl
Y2tlZCkgLSAxKS5nZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVy
Q2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xh
c3MoKSk7CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwogCkBAIC01NjAs
NyArNTYwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIg
ewogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0gbV9jaGVja2VkKQogICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogCi0gICAgICAg
ICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSwgY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQpLmdldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0
ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJD
bGFzcygpKTsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTU4
OSw3ICs1ODksNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7CiAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tlZCkKICAgICAg
ICAgICAgIG5leHRJc05vdFdvcmRDaGFyLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAKLSAgICAg
ICAgcmVhZENoYXJhY3RlcigodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCksIGNoYXJh
Y3Rlcik7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2No
ZWNrZWQpLmdldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNo
YXJhY3RlciwgbmV4dElzV29yZENoYXIsIG1fcGF0dGVybi53b3JkY2hhckNoYXJhY3RlckNsYXNz
KCkpOwogICAgIH0KIApAQCAtNjA0LDcgKzYwNCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwogICAg
ICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCiAgICAgICAgICAgICBhdEJlZ2luID0gYnJh
bmNoMzIoRXF1YWwsIGluZGV4LCBJbW0zMihtX2NoZWNrZWQpKTsKLSAgICAgICAgcmVhZENoYXJh
Y3RlcigodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkgLSAxLCBjaGFyYWN0ZXIpOwor
ICAgICAgICByZWFkQ2hhcmFjdGVyKCgodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkg
LSAxKS5nZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFy
YWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MoKSk7CiAg
ICAgICAgIGlmICghdGVybS0+aW5wdXRQb3NpdGlvbikKICAgICAgICAgICAgIGF0QmVnaW4ubGlu
ayh0aGlzKTsKQEAgLTY3OSw3ICs2NzksNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDMyIDw8
IDE2OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIEJhc2VJbmRleCBhZGRy
ZXNzKGlucHV0LCBpbmRleCwgVGltZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVj
a2VkKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgICAgIEJhc2VJbmRleCBhZGRyZXNz
KGlucHV0LCBpbmRleCwgVGltZXNUd28sICgodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tl
ZCkgKiAodW5zaWduZWQpc2l6ZW9mKFVDaGFyKSkuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGlm
IChtYXNrKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29y
ZHMoYWRkcmVzcywgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMiht
YXNrKSwgY2hhcmFjdGVyKTsKQEAgLTY5MywxMiArNjkzLDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgfQogCiAgICAgICAgIGlmICht
X3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShjaCkpIHsKLSAgICAgICAgICAg
IHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2No
ZWNrZWQpLmdldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIo
MzIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2Ug
fHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAg
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5p
bnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCAodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tl
ZCkuZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja1BhdHRlcm5D
aGFyYWN0ZXJPbmNlKHNpemVfdCBvcEluZGV4KQpAQCAtNzE2LDEwICs3MTYsMTAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKIAogICAgICAgICBtb3ZlKGluZGV4LCBj
b3VudFJlZ2lzdGVyKTsKLSAgICAgICAgc3ViMzIoSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCks
IGNvdW50UmVnaXN0ZXIpOworICAgICAgICBzdWIzMihJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50
LmdldCgpKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKLSAg
ICAgICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAo
dGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIHRlcm0tPnF1YW50aXR5Q291bnQpICog
c2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIEJhc2VJbmRleCBhZGRyZXNzKGlucHV0LCBjb3VudFJl
Z2lzdGVyLCBUaW1lc1R3bywgKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgdGVy
bS0+cXVhbnRpdHlDb3VudCkgKiAodW5zaWduZWQpc2l6ZW9mKFVDaGFyKSkuZ2V0KCkpOwogCiAg
ICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShjaCkpIHsK
ICAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBjaGFyYWN0ZXIpOwpAQCAtNzUyLDEyICs3NTIs
MTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAg
ICAgICBMYWJlbCBsb29wKHRoaXMpOwogICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklu
cHV0KCkpOwogICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxw
aGEoY2gpKSB7Ci0gICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJt
LT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKS5nZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAg
ICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0
b0xvd2VyKGNoKSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9w
YXR0ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6
dG9VcHBlcihjaCkpKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90
RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSk7CisgICAgICAgICAg
ICBmYWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgKHRlcm0tPmlucHV0UG9z
aXRpb24gLSBtX2NoZWNrZWQpLmdldCgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwpAQCAtNzY1LDcgKzc2NSw3IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgaWYgKHRl
cm0tPnF1YW50aXR5Q291bnQgPT0gcXVhbnRpZnlJbmZpbml0ZSkKICAgICAgICAgICAgIGp1bXAo
bG9vcCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3Vu
dFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkubGlua1RvKGxvb3AsIHRoaXMp
OworICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRl
cm0tPnF1YW50aXR5Q291bnQuZ2V0KCkpKS5saW5rVG8obG9vcCwgdGhpcyk7CiAKICAgICAgICAg
ZmFpbHVyZXMubGluayh0aGlzKTsKICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKQEAg
LTgxNywxNCArODE3LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZW1ibGVyIHsKIAogICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0
KCkpOwogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBj
b3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkpOworICAgICAgICAgICAg
bm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJ
bW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LmdldCgpKSkpOwogICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAgICAgICByZWFkQ2hh
cmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKS5n
ZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hh
cmFjdGVyKTsKICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8
fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkpKTsKLSAgICAg
ICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0
ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSk7CisgICAgICAgICAgICBub25HcmVlZHlG
YWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgKHRlcm0tPmlucHV0UG9zaXRp
b24gLSBtX2NoZWNrZWQpLmdldCgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwpAQCAtODQ1LDcgKzg0NSw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgY29uc3QgUmVn
aXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKIAogICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7
Ci0gICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQp
LCBjaGFyYWN0ZXIpOworICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9u
IC0gbV9jaGVja2VkKS5nZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJD
bGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCiAgICAg
ICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKQEAgLTg2OSwxMSArODY5LDExIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CiAKICAgICAgICAgbW92ZShpbmRleCwgY291bnRS
ZWdpc3Rlcik7Ci0gICAgICAgIHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpLCBjb3Vu
dFJlZ2lzdGVyKTsKKyAgICAgICAgc3ViMzIoSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC5nZXQo
KSksIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CiAgICAgICAg
IEp1bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291
bnRSZWdpc3RlciwgVGltZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsg
dGVybS0+cXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKSwgY2hhcmFjdGVyKTsKKyAgICAg
ICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sICgodGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIHRlcm0tPnF1YW50aXR5Q291bnQpICogKHVu
c2lnbmVkKXNpemVvZihVQ2hhcikpLmdldCgpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hD
aGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3Mp
OwogCiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKQEAgLTkwNiwxMSArOTA2LDExIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKIAogICAgICAgICBpZiAodGVybS0+aW52ZXJ0
KCkpIHsKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1f
Y2hlY2tlZCwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlu
cHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpLmdldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAg
bWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZhaWx1cmVzLCB0ZXJtLT5jaGFyYWN0ZXJD
bGFzcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7
Ci0gICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNr
ZWQsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBv
c2l0aW9uIC0gbV9jaGVja2VkKS5nZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNo
Q2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHRlcm0tPmNoYXJhY3RlckNsYXNz
KTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwogICAgICAgICAgICAgbWF0
Y2hEZXN0LmxpbmsodGhpcyk7CkBAIC05MTksNyArOTE5LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4
KTsKICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkg
ewotICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRl
cm0tPnF1YW50aXR5Q291bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBicmFu
Y2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC5n
ZXQoKSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGp1bXAobG9vcCk7CkBAIC05NzIs
MTAgKzk3MiwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiwgY291bnRSZWdp
c3Rlcik7CiAKICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgp
KTsKLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3Vu
dFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkpOworICAgICAgICBub25HcmVl
ZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRl
cm0tPnF1YW50aXR5Q291bnQuZ2V0KCkpKSk7CiAKICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0
OwotICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQs
IGNoYXJhY3Rlcik7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQpLmdldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNs
YXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAg
ICAgaWYgKHRlcm0tPmludmVydCgpKQpAQCAtMTQzNCwxMiArMTQzNCwxMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICAgICAgLy8g
YmVpbmcgYWNjZXNzZWQuCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0SWQgPSB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJw
YXR0ZXJuSWQgPDwgMTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0ID0gdGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZDsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tl
ZDxpbnQ+IGlucHV0T2Zmc2V0ID0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZDsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4
ZWRDb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0T2Zmc2V0IC09IHRlcm0tPnBh
cmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5wdXRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgs
IGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGlu
cHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRk
MzIoSW1tMzIoaW5wdXRPZmZzZXQuZ2V0KCkpLCBpbmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBBZGRyZXNzKG91dHB1dCwgb2Zm
c2V0SWQgKiBzaXplb2YoaW50KSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCBvZmZzZXRJ
ZCAqIHNpemVvZihpbnQpKSk7CkBAIC0xNDY1LDEwICsxNDY1LDEwIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgICAgICAvLyBiZWlu
ZyBhY2Nlc3NlZC4KICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXRJZCA9ICh0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0
ZXJuSWQgPDwgMSkgKyAxOwotICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRPZmZzZXQgPSB0
ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkOworICAgICAgICAgICAgICAgICAgICBDaGVj
a2VkPGludD4gaW5wdXRPZmZzZXQgPSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZDMyKEltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5wdXRPZmZzZXQuZ2V0KCkpLCBpbmRleFRlbXBv
cmFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBB
ZGRyZXNzKG91dHB1dCwgb2Zmc2V0SWQgKiBzaXplb2YoaW50KSkpOwogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJl
c3Mob3V0cHV0LCBvZmZzZXRJZCAqIHNpemVvZihpbnQpKSk7CkBAIC0xNTI4LDcgKzE1MjgsNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwog
CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgCi0gICAgICAgICAgICAgICAgb3AubV9jaGVja0Fk
anVzdCA9IG1fY2hlY2tlZCAtIHRlcm0tPmlucHV0UG9zaXRpb247CisgICAgICAgICAgICAgICAg
b3AubV9jaGVja0FkanVzdCA9IChtX2NoZWNrZWQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uKS5nZXQo
KTsKICAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKICAgICAgICAgICAgICAg
ICAgICAgc3ViMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwCmluZGV4IGZjOGU4ZWUwMGQ5YzU4YmJl
YmFkZjAyYmU2ZGRhOWI0MjYwMjViNTAuLjJiYmNlZTI5MjQwYmFmODEyNjQxNGFjMGUzMTU3MjI1
YjNiNDFlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0
ZXJuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAK
QEAgLTUxMSw3ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2V0dXBBbHRlcm5hdGl2
ZU9mZnNldHMoUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSwgdW5zaWduZWQgY3VycmVu
dENhbGxGcmFtZVNpemUsIHVuc2lnbmVkIGluaXRpYWxJbnB1dFBvc2l0aW9uKQogICAgIHsKICAg
ICAgICAgYWx0ZXJuYXRpdmUtPm1faGFzRml4ZWRTaXplID0gdHJ1ZTsKLSAgICAgICAgdW5zaWdu
ZWQgY3VycmVudElucHV0UG9zaXRpb24gPSBpbml0aWFsSW5wdXRQb3NpdGlvbjsKKyAgICAgICAg
Q2hlY2tlZDx1bnNpZ25lZD4gY3VycmVudElucHV0UG9zaXRpb24gPSBpbml0aWFsSW5wdXRQb3Np
dGlvbjsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmUtPm1f
dGVybXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gYWx0
ZXJuYXRpdmUtPm1fdGVybXNbaV07CkBAIC01MjAsMTEgKzUyMCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgogICAgICAgICAgICAg
Y2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkVPTDoKICAgICAgICAgICAgIGNhc2UgUGF0
dGVyblRlcm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAgICAgICAgICAgICAgdGVy
bS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb247CisgICAgICAgICAgICAgICAg
dGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNr
UmVmZXJlbmNlOgotICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJ
bnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJl
bnRJbnB1dFBvc2l0aW9uLmdldCgpOwogICAgICAgICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlv
biA9IGN1cnJlbnRDYWxsRnJhbWVTaXplOwogICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJh
bWVTaXplICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U7CiAg
ICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUtPm1faGFzRml4ZWRTaXplID0gZmFsc2U7CkBAIC01
MzQsNyArNTM0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcjoKLSAgICAgICAgICAg
ICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAg
ICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsK
ICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVk
Q291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgdGVybS5mcmFtZUxvY2F0aW9uID0gY3VycmVu
dENhbGxGcmFtZVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXpl
ICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI7CkBAIC01
NDQsNyArNTQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3M6Ci0gICAgICAgICAgICAg
ICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb247CisgICAgICAgICAg
ICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENv
dW50KSB7CiAgICAgICAgICAgICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlvbiA9IGN1cnJlbnRD
YWxsRnJhbWVTaXplOwogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSAr
PSBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczsKQEAgLTU1OSwx
OCArNTU5LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNv
dW50ID09IDEgJiYgIXRlcm0ucGFyZW50aGVzZXMuaXNDb3B5KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFlhcnJTdGFja1NwYWNl
Rm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKLSAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhl
c2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElucHV0UG9zaXRp
b24pOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVwRGlz
anVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDYWxs
RnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHF1YW50aXR5IGlzIGZpeGVkLCB0aGVuIHByZS1jaGVjayBpdHMgbWluaW11bSBz
aXplLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRp
ZmllckZpeGVkQ291bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW5wdXRQb3Np
dGlvbiArPSB0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplOwotICAg
ICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlv
bjsKKyAgICAgICAgICAgICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0
UG9zaXRpb24uZ2V0KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnBhcmVudGhl
c2VzLmlzVGVybWluYWwpIHsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNp
emUgKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDsK
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0
aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1l
U2l6ZSwgY3VycmVudElucHV0UG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICB0ZXJtLmlu
cHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVu
dGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElucHV0UG9z
aXRpb24uZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBj
dXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlv
bjsKLSAgICAgICAgICAgICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbiwgMCwgY3VycmVudElucHV0UG9zaXRpb24pOworICAgICAgICAg
ICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbiwgMCwgY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSArPSBZYXJyU3RhY2tTcGFjZUZv
ckJhY2tUcmFja0luZm9QYXJlbnRoZXNlczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgLy8gRml4ZWQgY291bnQgb2YgMSBjb3VsZCBiZSBhY2NlcHRlZCwgaWYgdGhleSBoYXZl
IGEgZml4ZWQgc2l6ZSAqQU5EKiBpZiBhbGwgYWx0ZXJuYXRpdmVzIGFyZSBvZiB0aGUgc2FtZSBs
ZW5ndGguCkBAIC01NzgsOSArNTc4LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2Vy
dGlvbjoKLSAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQ
b3NpdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5w
dXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICB0ZXJtLmZyYW1lTG9jYXRpb24gPSBj
dXJyZW50Q2FsbEZyYW1lU2l6ZTsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6
ZSA9IHNldHVwRGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24s
IGN1cnJlbnRDYWxsRnJhbWVTaXplICsgWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFy
ZW50aGV0aWNhbEFzc2VydGlvbiwgY3VycmVudElucHV0UG9zaXRpb24pOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5w
YXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUgKyBZYXJyU3RhY2tT
cGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLCBjdXJyZW50SW5wdXRQ
b3NpdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgUGF0dGVyblRlcm06OlR5cGVEb3RTdGFyRW5jbG9zdXJlOgpAQCAtNTkwLDcgKzU5MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplID0gY3VycmVudElucHV0UG9zaXRpb24gLSBpbml0aWFsSW5wdXRQb3Np
dGlvbjsKKyAgICAgICAgYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPSAoY3VycmVudElucHV0
UG9zaXRpb24gLSBpbml0aWFsSW5wdXRQb3NpdGlvbikuZ2V0KCk7CiAgICAgICAgIHJldHVybiBj
dXJyZW50Q2FsbEZyYW1lU2l6ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJyUGF0dGVybi5oCmluZGV4IDk3YzM4NzA0MjVlZmM2N2RhNTQxOTRjZWFiZDczYzI2YjE3MzUx
ZTkuLjJmNDc4ODljN2NkNGE0ZjM1Yjc2NDI5ZWNjZTBkM2NiYjM5NDJhMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmlu
ZSBZYXJyUGF0dGVybl9oCiAKICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC0xMTcsOCArMTE4LDggQEAgc3RydWN0
IFBhdHRlcm5UZXJtIHsKICAgICAgICAgfSBhbmNob3JzOwogICAgIH07CiAgICAgUXVhbnRpZmll
clR5cGUgcXVhbnRpdHlUeXBlOwotICAgIHVuc2lnbmVkIHF1YW50aXR5Q291bnQ7Ci0gICAgaW50
IGlucHV0UG9zaXRpb247CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudDsKKyAg
ICBDaGVja2VkPGludD4gaW5wdXRQb3NpdGlvbjsKICAgICB1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
OwogCiAgICAgUGF0dGVyblRlcm0oVUNoYXIgY2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTNmODFjZmQ3Yzhj
ZTZlNGEzNzk2YTA1MmEwMDcyZDZlZjg1NWRjMi4uODI2ZDJiMzUyMjFhZWIwMDIzZGJhMzI0MmY1
NGRhNWFkN2M3ZmNkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4LTI4ICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IGNoZWNrZWQgYXJpdGhtZXRpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjcwOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgYSBmb3J3YXJkaW5nIGhlYWRlci4KKworICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBBZGRlZC4KKwogMjAxMS0wOC0yNyAg
QW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50OjpnZXRDb2x1bW5UZXh0KCkgY291bGQgY29uc3RydWN0IFdURjo6U3RyaW5nIHJlc3VsdCBt
b3JlIGVmZmljaWVudGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzQ4YWU1MmVkOWI5
MTM1ZDExOGNmNjkyY2M2Y2ZkYzBhNDQ3MmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTAsMCAr
MSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0NoZWNrZWRBcml0aG1ldGljX2gKKyNkZWZpbmUg
V2ViQ29yZV9GV0RfQ2hlY2tlZEFyaXRobWV0aWNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0NoZWNrZWRBcml0aG1ldGljLmg+CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105678</attachid>
            <date>2011-08-30 13:04:23 -0700</date>
            <delta_ts>2011-08-30 15:31:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67095-20110830130422.patch</filename>
            <type>text/plain</type>
            <size>65387</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwOTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVj
M2JiYzJlY2FhZDAzN2Q2NjBmMTcyY2IyNjQxMDQwMTcwMmNiNDMuLmQ1YjM2MzlmNDM0NDcwODlj
YzZhOTVhZmIwZWZjYzNmYzRlYzYyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDkxIEBACiAyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNoZWNrZWQgYXJpdGhtZXRpYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwOTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjaGVja2VkIGFyaXRobWV0
aWMgY2xhc3MgQ2hlY2tlZDxUPiB0aGF0IHByb3ZpZGVzIG92ZXJmbG93LXNhZmUKKyAgICAgICAg
YXJpdGhtZXRpYyBvdmVyIGFsbCBpbnRlZ3JhbCB0eXBlcy4gIENoZWNrZWQ8VD4gc3VwcG9ydHMg
YWRkaXRpb24sIHN1YnRyYWN0aW9uCisgICAgICAgIGFuZCBtdWx0aXBsaWNhdGlvbiwgYWxvbmcg
d2l0aCAiYm9vbCIgY29udmVyc2lvbnMgYW5kIGVxdWFsaXR5IG9wZXJhdG9ycy4KKworICAgICAg
ICBDaGVja2VkPD4gY2FuIGJlIHVzZWQgaW4gZWl0aGVyIENSQVNIKCkgb24gb3ZlcmZsb3cgb3Ig
ZGVsYXllZCBmYWlsdXJlIG1vZGVzLAorICAgICAgICBhbHRob3VnaCB0aGUgZGVmYXVsdCBpcyB0
byBDUkFTSCgpLgorCisgICAgICAgIFRvIGVuc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSBpbiB1
c2UgKHJhdGhlciB0aGFuIGNoZWNraW5nIGluIGRlYWQgY29kZSkgSSd2ZQorICAgICAgICBtYWRl
IGEgY291cGxlIG9mIHByb3BlcnRpZXMgaW4gWUFSUiB1c2UgQ2hlY2tlZDxpbnQ+IGFuZCBDaGVj
a2VkPHVuc2lnbmVkPgorICAgICAgICBpbnN0ZWFkIG9mIHJhdyB2YWx1ZSBhcml0aG1ldGljLiAg
VGhpcyBoYXMgcmVzdWx0ZWQgaW4gYSBtb2RlcmF0ZSBzZXQgb2YgY2hhbmdlcywKKyAgICAgICAg
dG8gWUFSUiAtIG1vc3RseSBhZGRpbmcgLmdldCgpIGNhbGxzLCBidXQgYSBjb3VwbGUgb2YgY2Fz
dHMgZnJvbSB1bnNpZ25lZCBsb25nCisgICAgICAgIHRvIHVuc2lnbmVkIGZvciBzb21lIHVzZXMg
b2Ygc2l6ZW9mLCBhcyBDaGVja2VkPD4gY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQKKyAgICAg
ICAgbWl4ZWQgc2lnbmVkLW5lc3Mgb2YgdHlwZXMgd2lkZXIgdGhhdCAzMiBiaXRzLgorCisgICAg
ICAgIEhhcHBpbHkgdGhlIGluY3JlYXNlZCB0eXBlIHNhZmV0eSBvZiBDaGVja2VkPD4gbWVhbnMg
dGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0bworICAgICAgICBhY2NpZGVudGFsbHkgYXNzaWduIGF3
YXkgcHJlY2lzaW9uLCBub3IgYWNjaWRlbnRhbGx5IGNhbGwgaW50ZWdlciBvdmVybG9hZCBvZgor
ICAgICAgICBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIGJvb2wgdmVyc2lvbi4KKworICAgICAg
ICBObyBtZWFzdXJhYmxlIHJlZ3Jlc3Npb24gaW4gcGVyZm9ybWFuY2UsIGFuZCBTdW5TcGlkZXIg
Y2xhaW1zIHRoaXMgcGF0Y2ggdG8gYmUKKyAgICAgICAgYSBwcm9ncmVzc2lvbiBvZiAwLjMlLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q3Jh
c2hPbk92ZXJmbG93OjpvdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93
OjpjbGVhck92ZXJmbG93KToKKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93OjpoYXNPdmVy
Zmxvd2VkKToKKyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6OlJlY29yZE92ZXJmbG93KToK
KyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6Om92ZXJmbG93ZWQpOgorICAgICAgICAoV1RG
OjpSZWNvcmRPdmVyZmxvdzo6Y2xlYXJPdmVyZmxvdyk6CisgICAgICAgIChXVEY6OlJlY29yZE92
ZXJmbG93OjpoYXNPdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6aXNJbkJvdW5kcyk6CisgICAg
ICAgIChXVEY6OnNhZmVBZGQpOgorICAgICAgICAoV1RGOjpzYWZlU3ViKToKKyAgICAgICAgKFdU
Rjo6c2FmZU11bHRpcGx5KToKKyAgICAgICAgKFdURjo6c2FmZUVxdWFscyk6CisgICAgICAgIChX
VEY6OndvcmtBcm91bmRDbGFuZ0J1Zyk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6OkNoZWNrZWQp
OgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDaGVj
a2VkOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3ItLSk6Cisg
ICAgICAgIChXVEY6OkNoZWNrZWQ6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6
Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6
Z2V0KToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OkNoZWNrZWQ6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvcio9
KToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkNo
ZWNrZWQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAo
V1RGOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAqIHlh
cnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tUGF0dGVybkNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxl
cjo6YXRvbUNoYXJhY3RlckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tQmFja1JlZmVyZW5jZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6
YXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRl
Q29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc09uY2VFbmQpOgorICAgICAgICAoSlND
OjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc1Rlcm1pbmFsRW5kKToKKyAgICAg
ICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVy
bTo6Qnl0ZVRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6Q2hlY2tJbnB1dCk6
CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpVbmNoZWNrSW5wdXQpOgorICAgICAgICAq
IHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omdl
bmVyYXRlQXNzZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJy
R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkpOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJD
bGFzc09uY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUNo
YXJhY3RlckNsYXNzRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpn
ZW5lcmF0ZUNoYXJhY3RlckNsYXNzR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkpOgorICAgICAgICAqIHlh
cnIvWWFyclBhdHRlcm4uY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0
cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyk6CisgICAgICAgICogeWFyci9ZYXJyUGF0
dGVybi5oOgorCisyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
ICAgICAgICAgVHlwZWRBcnJheXMgZG9uJ3QgZW5zdXJlIHRoYXQgZGVub3JtYWxpc2VkIHZhbHVl
cyBhcmUgbm9ybWFsaXNlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjcxNzgKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBjMGM2YjcwM2UzYzVlMGQ3ZjY2YjFhZTg0YzQ5YWU3ZGEzMzI5NzZhLi42ZDJlMjdk
MmI3YmJjYmJmZGNjOTM2ODY1ZjhlNTUyNTZjN2I4ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDU5LDYgKzQ1OSw3IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxv
Y2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQ29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJl
ZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQppbmRleCA2MTIwNDkyZTI5Mjg0NjI5M2IyNTM4MTNjMjk4ZDQxYThiZmZiMzRkLi4yODA3
MTMyNTVkZjM2MGMwYmFmNGQ1NmVlYmI1MTQzNjliYzZmNzg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMTQwLDYgKzE0MCw3IEBACiAgICAgICAgICAg
ICAnd3RmL0Jsb29tRmlsdGVyLmgnLAogICAgICAgICAgICAgJ3d0Zi9CdW1wUG9pbnRlckFsbG9j
YXRvci5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmgnLAorICAgICAgICAgICAgJ3d0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oJywKICAgICAgICAgICAgICd3dGYvQ29tcGlsZXIuaCcsCiAg
ICAgICAgICAgICAnd3RmL0NvbXBsZXguaCcsCiAgICAgICAgICAgICAnd3RmL0Nyb3NzVGhyZWFk
UmVmQ291bnRlZC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDM0OGMyNmYwMTk4MWQxMzk3
NGI0ZWIzYjc1M2EyYzk5OWMyZjhiMmQuLmEzODg5ODhmN2E2ZGQ3OGUyNThkMjk5YjFhMzhkMWJj
Y2Y3OGM3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtNTY1LDYgKzU2NSwxMCBAQAogCQkJ
PgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDaGVja2Vk
QXJpdGhtZXRpYy5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHd0ZlxDb21waWxlci5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGNiNjY3ZDhiYWMyZWExNjE5OWU4NjZlMDRlOGE1MTRmOTFhZDdmNDku
Ljc1MzdmNWNiZDE2NDU0OGE2NmI3MTJhZGViNGM2OGIwYTBkODM1NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00MjIsNiArNDIyLDcgQEAKIAkJQTdBMUY3QUMwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAq
LzsgfTsKIAkJQTdBMUY3QUQwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBMUY3QUIwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsg
fTsKKwkJQTdCQzBDODIxNDA2MDhCMDAwQjFCQjcxIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JDMEM4MTE0MDYw
OEIwMDBCMUJCNzEgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyog
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAgKi87IH07CiAJCUE3QzQwQzBBMTMwQjA1N0QwMEQwMDJBMSAvKiBCbG9j
a1N0YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0M0MEMwNzEzMEIwNTdEMDBEMDAyQTEgLyogQmxvY2tTdGFjay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzQwQzBCMTMwQjA1N0QwMEQwMDJB
MSAvKiBTZW50aW5lbExpbmtlZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QzQwQzA4MTMwQjA1N0QwMEQwMDJBMSAvKiBTZW50aW5lbExpbmtl
ZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTE0OSw2ICsxMTUwLDcgQEAKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRh
eENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JE
QjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0JDMEM4MTE0MDYwOEIwMDBCMUJCNzEg
LyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2hlY2tlZEFyaXRobWV0aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUU4
QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAv
KiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gS2V5d29yZExvb2t1cEdlbmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdDMjI1Q0QxMzk5ODQ5QzAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5d29yZExvb2t1cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTY4Niw2ICsxNjg4LDcgQEAKIAkJCQk4NjY3NkQ0RDExRkVE
NTVEMDA0QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlBN0ExRjdBQTBG
MjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBN0ExRjdBQjBGMjUyQjND
MDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi8sCisJCQkJQTdCQzBDODExNDA2MDhCMDAwQjFCQjcx
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFF
IC8qIENvbXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBs
ZXguaCAqLywKIAkJCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi8sCkBAIC0yNjA4LDYgKzI2MTEsNyBAQAogCQkJCTg2NjczOUQyMTNCRkRFNzEw
MDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZE
RTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzY2QkFFNDEzRjQ5MkNDMDBDMjNGQUUgLyogQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE3QkMwQzgyMTQwNjA4QjAwMEIxQkI3MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRBcml0
aG1ldGljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTE3Zjk5YmRkOTU0NzUyNjVhMTBiZmU0ZDVmOGMxMzI4MGQ1YzRjNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaApAQCAtMCwwICsxLDY2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIENoZWNrZWRBcml0aG1ldGljX2gKKyNkZWZpbmUgQ2hlY2tl
ZEFyaXRobWV0aWNfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorCisjaW5jbHVkZSA8bGlt
aXRzPgorCisvKiBDaGVja2VkPFQ+CisgKgorICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIG1lY2hh
bmlzbSB0byBwZXJmb3JtIG92ZXJmbG93LXNhZmUgaW50ZWdlciBhcml0aG1ldGljCisgKiB3aXRo
b3V0IGhhdmluZyB0byBtYW51YWxseSBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBhbGwgdGhlIHJlcXVp
cmVkIGJvdW5kcyBjaGVja3MKKyAqIGRpcmVjdGx5IGluIHlvdXIgY29kZS4KKyAqCisgKiBUaGVy
ZSBhcmUgdHdvIG1vZGVzIG9mIG9wZXJhdGlvbjoKKyAqICAtIFRoZSBkZWZhdWx0IGlzIENoZWNr
ZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93PiwgYW5kIGNyYXNoZXMgYXQgdGhlIHBvaW50CisgKiAgICBh
bmQgb3ZlcmZsb3cgaGFzIG9jY3VycmVkLgorICogIC0gVGhlIGFsdGVybmF0aXZlIGlzIENoZWNr
ZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+LCB3aGljaCB1c2VzIGFuIGFkZGl0aW9uYWwKKyAqICAgIGJ5
dGUgb2Ygc3RvcmFnZSB0byB0cmFjayB3aGV0aGVyIGFuIG92ZXJmbG93IGhhcyBvY2N1cnJlZCwg
c3Vic2VxdWVudAorICogICAgdW5jaGVja2VkIG9wZXJhdGlvbnMgd2lsbCBjcmFzaCBpZiBhbiBv
dmVyZmxvdyBoYXMgb2NjdXJlZAorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIHByb3ZpZGUgYSBj
dXN0b20gb3ZlcmZsb3cgaGFuZGxlciwgaW4gd2hpY2ggY2FzZSB5b3UgbmVlZAorICogdG8gc3Vw
cG9ydCB0aGVzZSBmdW5jdGlvbnM6CisgKiAgLSB2b2lkIG92ZXJmbG93ZWQoKTsKKyAqICAgIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gb3BlcmF0aW9uIGhhcyBwcm9kdWNlZCBhbiBv
dmVyZmxvdy4KKyAqICAtIGJvb2wgaGFzT3ZlcmZsb3dlZCgpOworICogICAgVGhpcyBmdW5jdGlv
biBtdXN0IHJldHVybiB0cnVlIGlmIG92ZXJmbG93ZWQoKSBoYXMgYmVlbiBjYWxsZWQgb24gYW4K
KyAqICAgIGluc3RhbmNlIGFuZCBmYWxzZSBpZiBpdCBoYXMgbm90LgorICogIC0gdm9pZCBjbGVh
ck92ZXJmbG93KCk7CisgKiAgICBVc2VkIHRvIHJlc2V0IG92ZXJmbG93IHRyYWNraW5nIHdoZW4g
YSB2YWx1ZSBpcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoCisgKiAgICBhIG5ldyB2YWx1ZS4KKyAq
CisgKiBDaGVja2VkPFQ+IHdvcmtzIGZvciBhbGwgaW50ZWdlciB0eXBlcywgd2l0aCB0aGUgZm9s
bG93aW5nIGNhdmVhdHM6CisgKiAgLSBNaXhpbmcgc2lnbmVkbmVzcyBvZiBvcGVyYW5kcyBpcyBv
bmx5IHN1cHBvcnRlZCBmb3IgdHlwZXMgbmFycm93ZXIgdGhhbgorICogICAgNjRiaXRzLgorICog
IC0gSXQgZG9lcyBoYXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LCBzbyB0aWdodCBsb29wcyBtYXkg
d2FudCB0byBiZSBjYXJlZnVsCisgKiAgICB3aGVuIHVzaW5nIGl0LgorICoKKyAqLworCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgQ3Jhc2hPbk92ZXJmbG93IHsKK3Byb3RlY3RlZDoKKyAgICBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgb3ZlcmZsb3dlZCgpCisgICAgeworICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpIHsgfQorCitwdWJsaWM6
CisgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisK
K2NsYXNzIFJlY29yZE92ZXJmbG93IHsKK3Byb3RlY3RlZDoKKyAgICBSZWNvcmRPdmVyZmxvdygp
CisgICAgICAgIDogbV9vdmVyZmxvd2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IG92ZXJmbG93ZWQoKQorICAgIHsKKyAgICAgICAgbV9vdmVyZmxvd2VkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIGNsZWFyT3ZlcmZsb3coKQorICAgIHsKKyAgICAgICAgbV9vdmVyZmxvd2Vk
ID0gZmFsc2U7CisgICAgfQorCitwdWJsaWM6CisgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVyZmxvd2VkOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgY2hh
ciBtX292ZXJmbG93ZWQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgY2xhc3MgT3ZlcmZs
b3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PiBjbGFzcyBDaGVja2VkOwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8VD4gPjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRh
cmdldCwgdHlwZW5hbWUgU291cmNlLCBib29sIHRhcmdldFNpZ25lZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VGFyZ2V0Pjo6aXNfc2lnbmVkLCBib29sIHNvdXJjZVNpZ25lZCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8U291cmNlPjo6aXNfc2lnbmVkPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNr
ZXI8VGFyZ2V0LCBTb3VyY2UsIGZhbHNlLCBmYWxzZT4geworICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIFNhbWUgc2lnbmVkbmVzcyBzbyBp
bXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gd2lsbCBhbHdheXMgaW5jcmVhc2UgcHJlY2lzaW9uCisg
ICAgICAgIC8vIHRvIHdpZGVzdCB0eXBlCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0
LCBTb3VyY2UsIHRydWUsIHRydWU+IHsKKyAgICBzdGF0aWMgYm9vbCBpbkJvdW5kcyhTb3VyY2Ug
dmFsdWUpCisgICAgeworICAgICAgICAvLyBTYW1lIHNpZ25lZG5lc3Mgc28gaW1wbGljaXQgdHlw
ZSBjb252ZXJzaW9uIHdpbGwgYWx3YXlzIGluY3JlYXNlIHByZWNpc2lvbgorICAgICAgICAvLyB0
byB3aWRlc3QgdHlwZQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUYXJnZXQ+
OjptaW4oKSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46
Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1l
IFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3VyY2UsIGZhbHNlLCB0cnVl
PiB7CisgICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgLy8gVGFyZ2V0IGlzIHVuc2lnbmVkIHNvIGFueSB2YWx1ZSBsZXNzIHRoYW4gemVybyBpcyBj
bGVhcmx5IHVuc2FmZQorICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAvLyBJZiBvdXIgKHVuc2lnbmVkKSBUYXJnZXQgaXMgdGhlIHNhbWUg
b3IgZ3JlYXRlciB3aWR0aCB3ZSBjYW4KKyAgICAgICAgLy8gY29udmVydCB2YWx1ZSB0byB0eXBl
IFRhcmdldCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24KKyAgICAgICAgaWYgKHNpemVvZihUYXJn
ZXQpID49IHNpemVvZihTb3VyY2UpKSAKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
YXJnZXQ+KHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOworICAg
ICAgICAvLyBUaGUgc2lnbmVkIFNvdXJjZSB0eXBlIGhhcyBncmVhdGVyIHByZWNpc2lvbiB0aGFu
IHRoZSB0YXJnZXQgc28KKyAgICAgICAgLy8gbWF4KFRhcmdldCkgLT4gU291cmNlIHdpbGwgd2lk
ZW4uCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDxTb3VyY2U+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCkpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0
LCBTb3VyY2UsIHRydWUsIGZhbHNlPiB7CisgICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gU2lnbmVkIHRhcmdldCB3aXRoIGFuIHVuc2lnbmVk
IHNvdXJjZQorICAgICAgICBpZiAoc2l6ZW9mKFRhcmdldCkgPD0gc2l6ZW9mKFNvdXJjZSkpIAor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0PFNvdXJjZT4oc3RkOjpudW1l
cmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKSk7CisgICAgICAgIC8vIFRhcmdldCBpcyBXaWRlciB0
aGFuIFNvdXJjZSBzbyB3ZSdyZSBndWFyYW50ZWVkIHRvIGZpdCBhbnkgdmFsdWUgaW4KKyAgICAg
ICAgLy8gdW5zaWduZWQgU291cmNlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgVHlwZUNvbXBhcmUgewor
ICAgIHN0YXRpYyBjb25zdCBib29sIFNhbWVUeXBlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4gc3RydWN0IFR5cGVDb21wYXJlPFUsIFU+IHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBTYW1lVHlwZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0
eXBlbmFtZSBTb3VyY2UsIGJvb2wgU2FtZVR5cGUgPSBUeXBlQ29tcGFyZTxUYXJnZXQsIFNvdXJj
ZT46OlNhbWVUeXBlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tFbGlkZXI7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja0VsaWRlcjxUYXJn
ZXQsIFNvdXJjZSwgdHJ1ZT4geworICAgIHN0YXRpYyBib29sIGluQm91bmRzKFNvdXJjZSkgeyBy
ZXR1cm4gdHJ1ZTsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNv
dXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrRWxpZGVyPFRhcmdldCwgU291cmNlLCBmYWxzZT4gOiBw
dWJsaWMgQm91bmRzQ2hlY2tlcjxUYXJnZXQsIFNvdXJjZT4geworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbkJv
dW5kcyhTb3VyY2UgdmFsdWUpCit7CisgICAgcmV0dXJuIEJvdW5kc0NoZWNrRWxpZGVyPFRhcmdl
dCwgU291cmNlPjo6aW5Cb3VuZHModmFsdWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IFJlbW92ZUNoZWNrZWQgeworICAgIHR5cGVkZWYgVCBDbGVhblR5cGU7CisgICAgc3Rh
dGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOyAgICAKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENyYXNoT25PdmVy
Zmxvdz4gPiB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5
cGUgQ2xlYW5UeXBlOworICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0g
MDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVj
a2VkPFQsIFJlY29yZE92ZXJmbG93PiA+IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNo
ZWNrZWQ8VD46OkNsZWFuVHlwZSBDbGVhblR5cGU7CisgICAgc3RhdGljIGNvbnN0IENsZWFuVHlw
ZSBEZWZhdWx0VmFsdWUgPSAwOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+IHN0cnVjdCBSZXN1bHQgeworICAgIHR5cGVkZWYgdHlwZW9mKFJlbW92ZUNoZWNrZWQ8VT46
OkRlZmF1bHRWYWx1ZSArIFJlbW92ZUNoZWNrZWQ8Vj46OkRlZmF1bHRWYWx1ZSkgUmVzdWx0VHlw
ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMSFMsIHR5cGVuYW1lIFJIUywgdHlwZW5hbWUg
UmVzdWx0VHlwZSA9IHR5cGVuYW1lIFJlc3VsdDxMSFMsIFJIUz46OlJlc3VsdFR5cGUsIAorICAg
IGJvb2wgbGhzU2lnbmVkID0gc3RkOjpudW1lcmljX2xpbWl0czxMSFM+Ojppc19zaWduZWQsIGJv
b2wgcmhzU2lnbmVkID0gc3RkOjpudW1lcmljX2xpbWl0czxSSFM+Ojppc19zaWduZWQ+IHN0cnVj
dCBBcml0aG1ldGljT3BlcmF0aW9uczsKKwordGVtcGxhdGUgPHR5cGVuYW1lIExIUywgdHlwZW5h
bWUgUkhTLCB0eXBlbmFtZSBSZXN1bHRUeXBlPiBzdHJ1Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM8
TEhTLCBSSFMsIFJlc3VsdFR5cGUsIHRydWUsIHRydWU+IHsKKyAgICAvLyBMSFMgYW5kIFJIUyBh
cmUgc2lnbmVkIHR5cGVzCisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24KKyAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgc2lnbnNNYXRjaChMSFMgbGhzLCBSSFMgcmhzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIChsaHMgXiByaHMpID49IDA7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIGFk
ZChMSFMgbGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVS
TgorICAgIHsKKyAgICAgICAgaWYgKHNpZ25zTWF0Y2gobGhzLCByaHMpKSB7CisgICAgICAgICAg
ICBpZiAobGhzID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKHN0ZDo6bnVtZXJpY19saW1p
dHM8UmVzdWx0VHlwZT46Om1heCgpIC0gcmhzKSA8IGxocykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSZXN1
bHRUeXBlIHRlbXAgPSBsaHMgLSBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4o
KTsKKyAgICAgICAgICAgICAgICBpZiAocmhzIDwgLXRlbXApCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBpZiB0aGUgc2lnbnMg
ZG8gbm90IG1hdGNoIHRoaXMgb3BlcmF0aW9uIGNhbid0IG92ZXJmbG93CisgICAgICAgIHJlc3Vs
dCA9IGxocyArIHJoczsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGlj
IGlubGluZSBib29sIHN1YihMSFMgbGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdB
Uk5fVU5VU0VEX1JFVFVSTgorICAgIHsKKyAgICAgICAgaWYgKCFzaWduc01hdGNoKGxocywgcmhz
KSkgeworICAgICAgICAgICAgaWYgKGxocyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGxo
cyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpICsgcmhzKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmIChyaHMgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgo
KSArIGxocykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9IC8vIGlmIHRoZSBzaWducyBtYXRjaCB0aGlzIG9wZXJhdGlvbiBjYW4ndCBv
dmVyZmxvdworICAgICAgICByZXN1bHQgPSBsaHMgLSByaHM7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBtdWx0aXBseShMSFMgbGhzLCBSSFMg
cmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVSTgorICAgIHsKKyAgICAg
ICAgaWYgKHNpZ25zTWF0Y2gobGhzLCByaHMpKSB7CisgICAgICAgICAgICBpZiAobGhzID49IDAp
IHsKKyAgICAgICAgICAgICAgICBpZiAobGhzICYmIChzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3Vs
dFR5cGU+OjptYXgoKSAvIGxocykgPCByaHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxocyA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSB8fCByaHMgPT0gc3RkOjpudW1l
cmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0
VHlwZT46Om1heCgpIC8gLWxocykgPCAtcmhzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
bGhzIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChyaHMgJiYgbGhzIDwgKHN0ZDo6bnVtZXJp
Y19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpIC8gcmhzKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGhzICYmIHJocyA8IChzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSAvIGxo
cykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXN1bHQgPSBsaHMgKiByaHM7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbHMoTEhTIGxocywgUkhTIHJo
cykgeyByZXR1cm4gbGhzID09IHJoczsgfQorCit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTEhT
LCB0eXBlbmFtZSBSSFMsIHR5cGVuYW1lIFJlc3VsdFR5cGU+IHN0cnVjdCBBcml0aG1ldGljT3Bl
cmF0aW9uczxMSFMsIFJIUywgUmVzdWx0VHlwZSwgZmFsc2UsIGZhbHNlPiB7CisgICAgLy8gTEhT
IGFuZCBSSFMgYXJlIHVuc2lnbmVkIHR5cGVzIHNvIGJvdW5kcyBjaGVja3MgYXJlIG5pY2UgYW5k
IGVhc3kKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgYWRkKExIUyBsaHMsIFJIUyByaHMsIFJlc3Vs
dFR5cGUmIHJlc3VsdCkgV0FSTl9VTlVTRURfUkVUVVJOCisgICAgeworICAgICAgICBSZXN1bHRU
eXBlIHRlbXAgPSBsaHMgKyByaHM7CisgICAgICAgIGlmICh0ZW1wIDwgbGhzKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSB0ZW1wOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgc3ViKExIUyBsaHMsIFJIUyBy
aHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkgV0FSTl9VTlVTRURfUkVUVVJOCisgICAgeworICAgICAg
ICBSZXN1bHRUeXBlIHRlbXAgPSBsaHMgLSByaHM7CisgICAgICAgIGlmICh0ZW1wID4gbGhzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSB0ZW1wOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHko
TEhTIGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4K
KyAgICB7CisgICAgICAgIFJlc3VsdFR5cGUgdGVtcCA9IGxocyAqIHJoczsKKyAgICAgICAgaWYg
KHRlbXAgPCBsaHMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9
IHRlbXA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbHMoTEhTIGxocywgUkhTIHJocykgeyByZXR1cm4gbGhzID09IHJoczsgfQorCit9
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRobWV0aWNPcGVy
YXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGUsIHRydWUsIGZhbHNlPiB7CisgICAgc3Rh
dGljIGlubGluZSBib29sIGFkZChpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUm
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGludDY0X3QgdGVtcCA9IGxocyArIHJoczsKKyAgICAg
ICAgaWYgKHRlbXAgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHRlbXAgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVzdWx0VHlwZT4odGVtcCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgc3ViKGludDY0
X3QgbGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
aW50NjRfdCB0ZW1wID0gbGhzIC0gcmhzOworICAgICAgICBpZiAodGVtcCA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAodGVtcCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxSZXN1bHRUeXBlPih0ZW1wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
c3RhdGljIGlubGluZSBib29sIG11bHRpcGx5KGludDY0X3QgbGhzLCBpbnQ2NF90IHJocywgUmVz
dWx0VHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaW50NjRfdCB0ZW1wID0gbGhzICogcmhz
OworICAgICAgICBpZiAodGVtcCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1p
bigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGVtcCA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxSZXN1bHRUeXBlPih0ZW1wKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIGVxdWFs
cyhpbnQgbGhzLCB1bnNpZ25lZCByaHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50NjRfdD4obGhzKSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyaHMpOworICAgIH0KK307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUeXBlPiBzdHJ1Y3QgQXJpdGhtZXRpY09wZXJh
dGlvbnM8dW5zaWduZWQsIGludCwgUmVzdWx0VHlwZSwgZmFsc2UsIHRydWU+IHsKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgYWRkKGludDY0X3QgbGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPGludCwg
dW5zaWduZWQsIFJlc3VsdFR5cGU+OjphZGQocmhzLCBsaHMsIHJlc3VsdCk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoaW50NjRfdCBsaHMsIGludDY0X3QgcmhzLCBS
ZXN1bHRUeXBlJiByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJh
dGlvbnM8aW50LCB1bnNpZ25lZCwgUmVzdWx0VHlwZT46OnN1YihsaHMsIHJocywgcmVzdWx0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHkoaW50NjRfdCBsaHMsIGlu
dDY0X3QgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gQXJp
dGhtZXRpY09wZXJhdGlvbnM8aW50LCB1bnNpZ25lZCwgUmVzdWx0VHlwZT46Om11bHRpcGx5KHJo
cywgbGhzLCByZXN1bHQpOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbHMo
dW5zaWduZWQgbGhzLCBpbnQgcmhzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyaXRobWV0aWNP
cGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+OjplcXVhbHMocmhzLCBsaHMpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBS
PiBzdGF0aWMgaW5saW5lIGJvb2wgc2FmZUFkZChVIGxocywgViByaHMsIFImIHJlc3VsdCkKK3sK
KyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgViwgUj46OmFkZChsaHMsIHJocywg
cmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlU3ViKFUgbGhzLCBWIHJocywgUiYgcmVzdWx0KQor
eworICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxVLCBWLCBSPjo6c3ViKGxocywgcmhz
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgUj4gc3RhdGljIGlubGluZSBib29sIHNhZmVNdWx0aXBseShVIGxocywgViByaHMsIFImIHJl
c3VsdCkKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgViwgUj46Om11bHRp
cGx5KGxocywgcmhzLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4gc3RhdGljIGlubGluZSBib29sIHNhZmVFcXVhbHMoVSBsaHMsIFYgcmhzKQoreworICAg
IHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxVLCBWPjo6ZXF1YWxzKGxocywgcmhzKTsKK30K
KworZW51bSBSZXN1bHRPdmVyZmxvd2VkVGFnIHsgUmVzdWx0T3ZlcmZsb3dlZCB9OworICAgIAor
Ly8gRklYTUU6IE5lZWRlZCB0byB3b3JrYXJvdW5kIGh0dHA6Ly9sbHZtLm9yZy9idWdzL3Nob3df
YnVnLmNnaT9pZD0xMDgwMQorc3RhdGljIGlubGluZSBib29sIHdvcmtBcm91bmRDbGFuZ0J1Zygp
IHsgcmV0dXJuIHRydWU7IH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGNsYXNzIE92ZXJmbG93
SGFuZGxlcj4gY2xhc3MgQ2hlY2tlZCA6IHB1YmxpYyBPdmVyZmxvd0hhbmRsZXIgeworcHVibGlj
OgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVCwgY2xhc3MgX092ZXJmbG93SGFuZGxlcj4gZnJp
ZW5kIGNsYXNzIENoZWNrZWQ7CisgICAgQ2hlY2tlZCgpCisgICAgICAgIDogbV92YWx1ZSgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBDaGVja2VkKFJlc3VsdE92ZXJmbG93ZWRUYWcpCisgICAgICAg
IDogbV92YWx1ZSgwKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4g
Y2xhbmcgZml4ZXMgaHR0cDovL2xsdm0ub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEwODAxCisg
ICAgICAgIGlmICh3b3JrQXJvdW5kQ2xhbmdCdWcoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJm
bG93ZWQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gQ2hlY2tlZChVIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0luQm91bmRzPFQ+KHZhbHVlKSkKKyAgICAgICAg
ICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PFQ+
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+IENoZWNrZWQo
Y29uc3QgQ2hlY2tlZDxULCBWPiYgcmhzKQorICAgICAgICA6IG1fdmFsdWUocmhzLm1fdmFsdWUp
CisgICAgeworICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRo
aXMtPm92ZXJmbG93ZWQoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
IENoZWNrZWQoY29uc3QgQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+JiByaHMpCisgICAgICAg
IDogT3ZlcmZsb3dIYW5kbGVyKHJocykKKyAgICB7CisgICAgICAgIGlmICghaXNJbkJvdW5kczxU
PihyaHMubV92YWx1ZSkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAg
IG1fdmFsdWUgPSByaHMubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+IENoZWNrZWQoY29uc3QgQ2hlY2tlZDxVLCBWPiYgcmhzKQorICAg
IHsKKyAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICB0aGlzLT5v
dmVyZmxvd2VkKCk7CisgICAgICAgIGlmICghaXNJbkJvdW5kczxUPihyaHMubV92YWx1ZSkpCisg
ICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUgPSByaHMubV92
YWx1ZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgQ2hlY2tlZCYgb3BlcmF0b3I9KENoZWNrZWQg
cmhzKQorICAgIHsKKyAgICAgICAgdGhpcy0+Y2xlYXJPdmVyZmxvdygpOworICAgICAgICBpZiAo
cmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAg
ICAgICAgbV92YWx1ZSA9IHJocy5tX3ZhbHVlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkJiBvcGVyYXRv
cj0oVSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9IENoZWNrZWQodmFsdWUp
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gY29u
c3QgQ2hlY2tlZCYgb3BlcmF0b3I9KGNvbnN0IENoZWNrZWQ8VSwgVj4mIHJocykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9IENoZWNrZWQocmhzKTsKKyAgICB9CisgICAgCisgICAgLy8g
cHJlZml4CisgICAgY29uc3QgQ2hlY2tlZCYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBp
ZiAobV92YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSkKKyAgICAgICAgICAg
IHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgbV92YWx1ZSsrOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNrZWQmIG9wZXJhdG9yLS0oKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCkp
CisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUtLTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICAvLyBwb3N0Zml4IG9wZXJhdG9y
cworICAgIGNvbnN0IENoZWNrZWQgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgICBpZiAo
bV92YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSkKKyAgICAgICAgICAgIHRo
aXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuIENoZWNrZWQobV92YWx1ZSsrKTsKKyAg
ICB9CisgICAgCisgICAgY29uc3QgQ2hlY2tlZCBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3ZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpKQorICAgICAg
ICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICByZXR1cm4gQ2hlY2tlZChtX3ZhbHVl
LS0pOworICAgIH0KKyAgICAKKyAgICAvLyBCb29sZWFuIG9wZXJhdG9ycworICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICh0aGlzLT5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gIW1fdmFsdWU7CisgICAgfQor
CisgICAgdHlwZWRlZiB2b2lkKiAoQ2hlY2tlZDo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAg
IG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLT5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgcmV0dXJuIChtX3ZhbHVlKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlw
ZSo+KDEpIDogMDsKKyAgICB9CisKKyAgICAvLyBWYWx1ZSBhY2Nlc3NvcnMuIGdldCgpIHdpbGwg
Y3Jhc2ggaWYgdGhlcmUncyBiZWVuIGFuIG92ZXJmbG93LgorICAgIFQgZ2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLT5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzYWZl
R2V0KFQmIHZhbHVlKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4KKyAgICB7CisgICAgICAgIHZh
bHVlID0gbV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPmhhc092ZXJmbG93ZWQoKTsKKyAg
ICB9CisKKyAgICAvLyBNdXRhdGluZyBhc3NpZ25tZW50CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+IGNvbnN0IENoZWNrZWQgb3BlcmF0b3IrPShVIHJocykKKyAgICB7CisgICAgICAgIGlmICgh
c2FmZUFkZChtX3ZhbHVlLCByaHMsIG1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZs
b3dlZCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+IGNvbnN0IENoZWNrZWQgb3BlcmF0b3ItPShVIHJocykKKyAgICB7CisgICAgICAg
IGlmICghc2FmZVN1YihtX3ZhbHVlLCByaHMsIG1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+
b3ZlcmZsb3dlZCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+IGNvbnN0IENoZWNrZWQgb3BlcmF0b3IqPShVIHJocykKKyAgICB7Cisg
ICAgICAgIGlmICghc2FmZU11bHRpcGx5KG1fdmFsdWUsIHJocywgbV92YWx1ZSkpCisgICAgICAg
ICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IGNvbnN0IENoZWNrZWQg
b3BlcmF0b3IrPShDaGVja2VkPFUsIFY+IHJocykKKyAgICB7CisgICAgICAgIGlmIChyaHMuaGFz
T3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBy
ZXR1cm4gKnRoaXMgKz0gcmhzLm1fdmFsdWU7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+IGNvbnN0IENoZWNrZWQgb3BlcmF0b3ItPShDaGVja2VkPFUsIFY+
IHJocykKKyAgICB7CisgICAgICAgIGlmIChyaHMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAg
ICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICByZXR1cm4gKnRoaXMgLT0gcmhzLm1fdmFs
dWU7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IGNvbnN0
IENoZWNrZWQgb3BlcmF0b3IqPShDaGVja2VkPFUsIFY+IHJocykKKyAgICB7CisgICAgICAgIGlm
IChyaHMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwor
ICAgICAgICByZXR1cm4gKnRoaXMgKj0gcmhzLm1fdmFsdWU7CisgICAgfQorCisgICAgLy8gRXF1
YWxpdHkgY29tcGFyaXNvbnMKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4gYm9vbCBvcGVyYXRv
cj09KENoZWNrZWQ8VCwgVj4gcmhzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpID09IHJo
cy5nZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRv
cj09KFUgcmhzKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPmhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuIHNhZmVFcXVhbHMo
bV92YWx1ZSwgcmhzKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+IGNvbnN0IENoZWNrZWQgb3BlcmF0b3I9PShDaGVja2VkPFUsIFY+IHJocykKKyAg
ICB7CisgICAgICAgIHJldHVybiBnZXQoKSA9PSBDaGVja2VkKHJocy5nZXQoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3IhPShVIHJocykKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IHJocyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IC8vIERpc2FsbG93IGltcGxpY2l0IGNvbnZlcnNpb24gb2YgZmxvYXRpbmcgcG9pbnQgdG8gaW50
ZWdlciB0eXBlcworICAgIENoZWNrZWQoZmxvYXQpOworICAgIENoZWNrZWQoZG91YmxlKTsKKyAg
ICB2b2lkIG9wZXJhdG9yPShmbG9hdCk7CisgICAgdm9pZCBvcGVyYXRvcj0oZG91YmxlKTsKKyAg
ICB2b2lkIG9wZXJhdG9yKz0oZmxvYXQpOworICAgIHZvaWQgb3BlcmF0b3IrPShkb3VibGUpOwor
ICAgIHZvaWQgb3BlcmF0b3ItPShmbG9hdCk7CisgICAgdm9pZCBvcGVyYXRvci09KGRvdWJsZSk7
CisgICAgVCBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1l
IFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvcisoQ2hl
Y2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywgQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+
IHJocykKK3sKKyAgICBVIHg7CisgICAgViB5OworICAgIGJvb2wgb3ZlcmZsb3dlZCA9IGxocy5z
YWZlR2V0KHgpIHx8IHJocy5zYWZlR2V0KHkpOworICAgIHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6
UmVzdWx0VHlwZSByZXN1bHQ7CisgICAgb3ZlcmZsb3dlZCB8PSAhc2FmZUFkZCh4LCB5LCByZXN1
bHQpOworICAgIGlmIChvdmVyZmxvd2VkKQorICAgICAgICByZXR1cm4gUmVzdWx0T3ZlcmZsb3dl
ZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlw
ZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9y
LShDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFu
ZGxlcj4gcmhzKQoreworICAgIFUgeDsKKyAgICBWIHk7CisgICAgYm9vbCBvdmVyZmxvd2VkID0g
bGhzLnNhZmVHZXQoeCkgfHwgcmhzLnNhZmVHZXQoeSk7CisgICAgdHlwZW5hbWUgUmVzdWx0PFUs
IFY+OjpSZXN1bHRUeXBlIHJlc3VsdDsKKyAgICBvdmVyZmxvd2VkIHw9ICFzYWZlU3ViKHgsIHks
IHJlc3VsdCk7CisgICAgaWYgKG92ZXJmbG93ZWQpCisgICAgICAgIHJldHVybiBSZXN1bHRPdmVy
Zmxvd2VkOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tl
ZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3Bl
cmF0b3IqKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZs
b3dIYW5kbGVyPiByaHMpCit7CisgICAgVSB4OworICAgIFYgeTsKKyAgICBib29sIG92ZXJmbG93
ZWQgPSBsaHMuc2FmZUdldCh4KSB8fCByaHMuc2FmZUdldCh5KTsKKyAgICB0eXBlbmFtZSBSZXN1
bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0OworICAgIG92ZXJmbG93ZWQgfD0gIXNhZmVNdWx0
aXBseSh4LCB5LCByZXN1bHQpOworICAgIGlmIChvdmVyZmxvd2VkKQorICAgICAgICByZXR1cm4g
UmVzdWx0T3ZlcmZsb3dlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5s
aW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hh
bmRsZXI+IG9wZXJhdG9yKyhDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBWIHJocykK
K3sKKyAgICByZXR1cm4gbGhzICsgQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+KHJocyk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3Vs
dFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3ItKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5k
bGVyPiBsaHMsIFYgcmhzKQoreworICAgIHJldHVybiBsaHMgLSBDaGVja2VkPFYsIE92ZXJmbG93
SGFuZGxlcj4ocmhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJl
c3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvciooQ2hlY2tl
ZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywgViByaHMpCit7CisgICAgcmV0dXJuIGxocyAqIENo
ZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPihyaHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENo
ZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
IG9wZXJhdG9yKyhVIGxocywgQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAg
ICByZXR1cm4gQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+KGxocykgKyByaHM7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUs
IE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3ItKFUgbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFu
ZGxlcj4gcmhzKQoreworICAgIHJldHVybiBDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4obGhz
KSAtIHJoczsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxV
LCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvciooVSBsaHMsIENoZWNr
ZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiByaHMpCit7CisgICAgcmV0dXJuIENoZWNrZWQ8VSwgT3Zl
cmZsb3dIYW5kbGVyPihsaHMpICogcmhzOworfQorCit9CisKK3VzaW5nIFdURjo6Q2hlY2tlZDsK
K3VzaW5nIFdURjo6UmVjb3JkT3ZlcmZsb3c7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKaW5kZXggOTAzYzY5MjJhZmM4YjM0ZTVi
YjA2MDVkMWZiYjgwZGFiZmJiMTQ4Yy4uMWE4N2NmNzNmZDU5ODM3NTU0OWIyMDQwOGI0Y2YyM2Rh
NGY5NmEzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0
ZXIuY3BwCkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm06OldvcmRCb3VuZGFyeShpbnZlcnQsIGlucHV0
UG9zaXRpb24pKTsKICAgICB9CiAKLSAgICB2b2lkIGF0b21QYXR0ZXJuQ2hhcmFjdGVyKFVDaGFy
IGNoLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQg
cXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIHZvaWQgYXRv
bVBhdHRlcm5DaGFyYWN0ZXIoVUNoYXIgY2gsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBm
cmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVy
VHlwZSBxdWFudGl0eVR5cGUpCiAgICAgewogICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3Jl
Q2FzZSkgewogICAgICAgICAgICAgVUNoYXIgbG8gPSBVbmljb2RlOjp0b0xvd2VyKGNoKTsKQEAg
LTE1MDYsMjIgKzE1MDYsMjIgQEAgcHVibGljOgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXMuYXBwZW5kKEJ5dGVUZXJtKGNoLCBpbnB1dFBvc2l0aW9uLCBmcmFtZUxvY2F0aW9uLCBx
dWFudGl0eUNvdW50LCBxdWFudGl0eVR5cGUpKTsKICAgICB9CiAKLSAgICB2b2lkIGF0b21DaGFy
YWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3MsIGJvb2wgaW52ZXJ0LCBp
bnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgcXVhbnRp
dHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIHZvaWQgYXRvbUNoYXJh
Y3RlckNsYXNzKENoYXJhY3RlckNsYXNzKiBjaGFyYWN0ZXJDbGFzcywgYm9vbCBpbnZlcnQsIGlu
dCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVk
PiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgewogICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKGNoYXJhY3RlckNs
YXNzLCBpbnZlcnQsIGlucHV0UG9zaXRpb24pKTsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmF0b20ucXVhbnRp
dHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uYXRvbS5xdWFudGl0eUNvdW50
ID0gcXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5hdG9tLnF1YW50aXR5VHlwZSA9
IHF1YW50aXR5VHlwZTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURp
c2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlv
bjsKICAgICB9CiAKLSAgICB2b2lkIGF0b21CYWNrUmVmZXJlbmNlKHVuc2lnbmVkIHN1YnBhdHRl
cm5JZCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVk
IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0
b21CYWNrUmVmZXJlbmNlKHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgaW50IGlucHV0UG9zaXRpb24s
IHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQs
IFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJw
YXR0ZXJuSWQpOwogCiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0
ZVRlcm06OkJhY2tSZWZlcmVuY2Uoc3VicGF0dGVybklkLCBpbnB1dFBvc2l0aW9uKSk7CiAKLSAg
ICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5z
aXplKCkgLSAxXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50OworICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAt
IDFdLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0g
MV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CiAgICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVM
b2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAgICAgfQpAQCAtMTU4Miw3ICsxNTgyLDcgQEAgcHVi
bGljOgogICAgICAgICBtX2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4ID0gYmVnaW5UZXJtICsgMTsK
ICAgICB9CiAKLSAgICB2b2lkIGF0b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5kKGludCBpbnB1
dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50
LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisgICAgdm9pZCBhdG9tUGFyZW50aGV0aWNh
bEFzc2VydGlvbkVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwg
Q2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlU
eXBlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYmVnaW5UZXJtID0gcG9wUGFyZW50aGVzZXNT
dGFjaygpOwogICAgICAgICBjbG9zZUFsdGVybmF0aXZlKGJlZ2luVGVybSArIDEpOwpAQCAtMTU5
OCw5ICsxNTk4LDkgQEAgcHVibGljOgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
ZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAg
ICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBm
cmFtZUxvY2F0aW9uOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRl
cm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5
Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1d
LmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwotICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsK
KyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlD
b3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKICAgICB9CiAK
QEAgLTE2ODAsNyArMTY4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zW2VuZEluZGV4XS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICB9CiAK
LSAgICB2b2lkIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQodW5zaWduZWQgbGFzdFN1YnBh
dHRlcm5JZCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2ln
bmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSwgdW5zaWduZWQg
Y2FsbEZyYW1lU2l6ZSA9IDApCisgICAgdm9pZCBhdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5k
KHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBm
cmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVy
VHlwZSBxdWFudGl0eVR5cGUsIHVuc2lnbmVkIGNhbGxGcmFtZVNpemUgPSAwKQogICAgIHsKICAg
ICAgICAgdW5zaWduZWQgYmVnaW5UZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAg
ICBjbG9zZUFsdGVybmF0aXZlKGJlZ2luVGVybSArIDEpOwpAQCAtMTcwNiwxMiArMTcwNiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYWxsUGFyZW50aGVzZXNJbmZvLmFwcGVuZChwYXJlbnRoZXNl
c0Rpc2p1bmN0aW9uKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChC
eXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklk
LCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CiAKLSAg
ICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eUNv
dW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2Jl
Z2luVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAg
ICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eVR5cGUg
PSBxdWFudGl0eVR5cGU7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRl
cm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgIH0KIAotICAgIHZvaWQgYXRv
bVBhcmVudGhlc2VzT25jZUVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2Nh
dGlvbiwgdW5zaWduZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBl
KQorICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzT25jZUVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5z
aWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVh
bnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYmVnaW5U
ZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAgICBjbG9zZUFsdGVybmF0aXZlKGJl
Z2luVGVybSArIDEpOwpAQCAtMTcyNywxMyArMTcyNywxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBl
bmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5k
VGVybV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAKLSAgICAgICAgbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlD
b3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5x
dWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7
Ci0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5
Q291bnQgPSBxdWFudGl0eUNvdW50OworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
ZW5kVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAg
ICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0g
cXVhbnRpdHlUeXBlOwogICAgIH0KIAotICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzVGVybWluYWxF
bmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1
YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0b21Q
YXJlbnRoZXNlc1Rlcm1pbmFsRW5kKGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxv
Y2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBx
dWFudGl0eVR5cGUpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBiZWdpblRlcm0gPSBwb3BQYXJl
bnRoZXNlc1N0YWNrKCk7CiAgICAgICAgIGNsb3NlQWx0ZXJuYXRpdmUoYmVnaW5UZXJtICsgMSk7
CkBAIC0xNzQ5LDkgKzE3NDksOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tlbmRUZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5U
ZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uZnJhbWVMb2Nh
dGlvbiA9IGZyYW1lTG9jYXRpb247CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAg
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0g
cXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2Jl
Z2luVGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7Ci0gICAgICAgIG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0
eUNvdW50OworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5x
dWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuaApp
bmRleCA3OGE4ZjM0Mzg5MzY3NDRmYjkzOTY4NjI0YzEzN2YwNWQ0NTEwMDU5Li45MjNlY2ExZGEw
ZjNiNWUwMTQzZWFmN2ZiN2Y2Nzk4ODNhN2ZkMTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuaApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0cnVjdCBCeXRl
VGVybSB7CiAgICAgYm9vbCBtX2ludmVydCA6IDE7CiAgICAgaW50IGlucHV0UG9zaXRpb247CiAK
LSAgICBCeXRlVGVybShVQ2hhciBjaCwgaW50IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUp
CisgICAgQnl0ZVRlcm0oVUNoYXIgY2gsIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2Nh
dGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVh
bnRpdHlUeXBlKQogICAgICAgICA6IGZyYW1lTG9jYXRpb24oZnJhbWVMb2NhdGlvbikKICAgICAg
ICAgLCBtX2NhcHR1cmUoZmFsc2UpCiAgICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCkBAIC0xMjYs
MTEgKzEyNiwxMSBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogCiAgICAgICAgIGF0b20ucGF0dGVybkNo
YXJhY3RlciA9IGNoOwogICAgICAgICBhdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsK
LSAgICAgICAgYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgYXRv
bS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC5nZXQoKTsKICAgICAgICAgaW5wdXRQb3Np
dGlvbiA9IGlucHV0UG9zOwogICAgIH0KIAotICAgIEJ5dGVUZXJtKFVDaGFyIGxvLCBVQ2hhciBo
aSwgaW50IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0
eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisgICAgQnl0ZVRlcm0oVUNoYXIg
bG8sIFVDaGFyIGhpLCBpbnQgaW5wdXRQb3MsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENoZWNr
ZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkK
ICAgICAgICAgOiBmcmFtZUxvY2F0aW9uKGZyYW1lTG9jYXRpb24pCiAgICAgICAgICwgbV9jYXB0
dXJlKGZhbHNlKQogICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQpAQCAtMTUwLDcgKzE1MCw3IEBA
IHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIGF0b20uY2FzZWRDaGFyYWN0ZXIubG8gPSBsbzsK
ICAgICAgICAgYXRvbS5jYXNlZENoYXJhY3Rlci5oaSA9IGhpOwogICAgICAgICBhdG9tLnF1YW50
aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKLSAgICAgICAgYXRvbS5xdWFudGl0eUNvdW50ID0gcXVh
bnRpdHlDb3VudDsKKyAgICAgICAgYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC5n
ZXQoKTsKICAgICAgICAgaW5wdXRQb3NpdGlvbiA9IGlucHV0UG9zOwogICAgIH0KIApAQCAtMjA0
LDE3ICsyMDQsMTcgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAgICAgcmV0dXJuIHRlcm07CiAg
ICAgfQogCi0gICAgc3RhdGljIEJ5dGVUZXJtIENoZWNrSW5wdXQodW5zaWduZWQgY291bnQpCisg
ICAgc3RhdGljIEJ5dGVUZXJtIENoZWNrSW5wdXQoQ2hlY2tlZDx1bnNpZ25lZD4gY291bnQpCiAg
ICAgewogICAgICAgICBCeXRlVGVybSB0ZXJtKFR5cGVDaGVja0lucHV0KTsKLSAgICAgICAgdGVy
bS5jaGVja0lucHV0Q291bnQgPSBjb3VudDsKKyAgICAgICAgdGVybS5jaGVja0lucHV0Q291bnQg
PSBjb3VudC5nZXQoKTsKICAgICAgICAgcmV0dXJuIHRlcm07CiAgICAgfQogCi0gICAgc3RhdGlj
IEJ5dGVUZXJtIFVuY2hlY2tJbnB1dCh1bnNpZ25lZCBjb3VudCkKKyAgICBzdGF0aWMgQnl0ZVRl
cm0gVW5jaGVja0lucHV0KENoZWNrZWQ8dW5zaWduZWQ+IGNvdW50KQogICAgIHsKICAgICAgICAg
Qnl0ZVRlcm0gdGVybShUeXBlVW5jaGVja0lucHV0KTsKLSAgICAgICAgdGVybS5jaGVja0lucHV0
Q291bnQgPSBjb3VudDsKKyAgICAgICAgdGVybS5jaGVja0lucHV0Q291bnQgPSBjb3VudC5nZXQo
KTsKICAgICAgICAgcmV0dXJuIHRlcm07CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJySklULmNwcAppbmRleCA4ZDUzNDRmN2QwYTM5NDA0ZGJjMGM3ZWIwMDQxYjkzNTE2
NzAzYzRjLi40MDQ1NmUwZDQ0ZDNkMDNmOWM3ODg2ZTZkYzA1Mzg5MGM4MWRmOTFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcApAQCAtNTYwLDcgKzU2MCw3IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIGlm
ICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tlZCkKICAgICAgICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKIAotICAgICAgICAgICAgcmVhZENoYXJhY3Rl
cigodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCksIGNoYXJhY3Rlcik7CisgICAgICAg
ICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJh
Y3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hE
ZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkpOwogICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKIApAQCAtNzE2LDEwICs3MTYsMTAgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKIAogICAgICAgICBtb3ZlKGluZGV4LCBjb3Vu
dFJlZ2lzdGVyKTsKLSAgICAgICAgc3ViMzIoSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCksIGNv
dW50UmVnaXN0ZXIpOworICAgICAgICBzdWIzMihJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50Lmdl
dCgpKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKLSAgICAg
ICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAodGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIHRlcm0tPnF1YW50aXR5Q291bnQpICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIEJhc2VJbmRleCBhZGRyZXNzKGlucHV0LCBjb3VudFJlZ2lz
dGVyLCBUaW1lc1R3bywgKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgQ2hlY2tl
ZDxpbnQ+KHRlcm0tPnF1YW50aXR5Q291bnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFVD
aGFyKSkpLmdldCgpKTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBp
c0FTQ0lJQWxwaGEoY2gpKSB7CiAgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgY2hhcmFjdGVy
KTsKQEAgLTc2NSw3ICs3NjUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ID09IHF1YW50aWZ5
SW5maW5pdGUpCiAgICAgICAgICAgICBqdW1wKGxvb3ApOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRp
dHlDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGJyYW5jaDMyKE5vdEVx
dWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LmdldCgpKSkubGlu
a1RvKGxvb3AsIHRoaXMpOwogCiAgICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7CiAgICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CkBAIC04MTcsNyArODE3LDcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogCiAgICAgICAgIG5vbkdyZWVkeUZh
aWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eUNvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCi0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJl
cy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50
aXR5Q291bnQpKSk7CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNo
MzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQuZ2V0KCkp
KSk7CiAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShj
aCkpIHsKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1f
Y2hlY2tlZCwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwg
Y2hhcmFjdGVyKTsKQEAgLTg0NSw3ICs4NDUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVy
ID0gcmVnVDA7CiAKICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAgICAgICByZWFkQ2hh
cmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFy
YWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0
LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQpA
QCAtODY5LDExICs4NjksMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlbWJsZXIgewogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdU
MTsKIAogICAgICAgICBtb3ZlKGluZGV4LCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgc3ViMzIo
SW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBzdWIz
MihJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LmdldCgpKSwgY291bnRSZWdpc3Rlcik7CiAKICAg
ICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAg
ICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHRl
cm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQgKyB0ZXJtLT5xdWFudGl0eUNvdW50KSAqIHNp
emVvZihVQ2hhcikpLCBjaGFyYWN0ZXIpOworICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0
LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVj
a2VkICsgQ2hlY2tlZDxpbnQ+KHRlcm0tPnF1YW50aXR5Q291bnQpKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFVDaGFyKSkpLmdldCgpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFy
YWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwog
CiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKQEAgLTkxOSw3ICs5MTksNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXgpOwogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlm
eUluZmluaXRlKSB7Ci0gICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3Rl
ciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAg
ICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFu
dGl0eUNvdW50LmdldCgpKSkubGlua1RvKGxvb3AsIHRoaXMpOwogICAgICAgICAgICAgZmFpbHVy
ZXMuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAganVtcChsb29w
KTsKQEAgLTk3Miw3ICs5NzIsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiwg
Y291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGF0RW5k
T2ZJbnB1dCgpKTsKLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVx
dWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkpOworICAgICAg
ICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIs
IEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQuZ2V0KCkpKSk7CiAKICAgICAgICAgSnVtcExpc3Qg
bWF0Y2hEZXN0OwogICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBt
X2NoZWNrZWQsIGNoYXJhY3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJyUGF0dGVybi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0
dGVybi5jcHAKaW5kZXggZmM4ZThlZTAwZDljNThiYmViYWRmMDJiZTZkZGE5YjQyNjAyNWI1MC4u
MmJiY2VlMjkyNDBiYWY4MTI2NDE0YWMwZTMxNTcyMjViM2I0MWVkZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcApAQCAtNTExLDcgKzUxMSw3IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyhQYXR0ZXJuQWx0ZXJuYXRp
dmUqIGFsdGVybmF0aXZlLCB1bnNpZ25lZCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgdW5zaWduZWQg
aW5pdGlhbElucHV0UG9zaXRpb24pCiAgICAgewogICAgICAgICBhbHRlcm5hdGl2ZS0+bV9oYXNG
aXhlZFNpemUgPSB0cnVlOwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50SW5wdXRQb3NpdGlvbiA9
IGluaXRpYWxJbnB1dFBvc2l0aW9uOworICAgICAgICBDaGVja2VkPHVuc2lnbmVkPiBjdXJyZW50
SW5wdXRQb3NpdGlvbiA9IGluaXRpYWxJbnB1dFBvc2l0aW9uOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhbHRlcm5hdGl2ZS0+bV90ZXJtcy5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBhbHRlcm5hdGl2ZS0+bV90ZXJtc1tpXTsKQEAg
LTUyMCwxMSArNTIwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06
OlR5cGVBc3NlcnRpb25CT0w6CiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNz
ZXJ0aW9uRU9MOgogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbldv
cmRCb3VuZGFyeToKLSAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50
SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJy
ZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJhY2tSZWZlcmVuY2U6Ci0gICAgICAgICAgICAg
ICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb247CisgICAgICAgICAg
ICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7CiAg
ICAgICAgICAgICAgICAgdGVybS5mcmFtZUxvY2F0aW9uID0gY3VycmVudENhbGxGcmFtZVNpemU7
CiAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgKz0gWWFyclN0YWNrU3BhY2VG
b3JCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTsKICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2
ZS0+bV9oYXNGaXhlZFNpemUgPSBmYWxzZTsKQEAgLTUzNCw3ICs1MzQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5
cGVQYXR0ZXJuQ2hhcmFjdGVyOgotICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9
IGN1cnJlbnRJbnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlv
biA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uLmdldCgpOwogICAgICAgICAgICAgICAgIGlmICh0ZXJt
LnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkgewogICAgICAgICAgICAgICAg
ICAgICB0ZXJtLmZyYW1lTG9jYXRpb24gPSBjdXJyZW50Q2FsbEZyYW1lU2l6ZTsKICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNr
VHJhY2tJbmZvUGF0dGVybkNoYXJhY3RlcjsKQEAgLTU0NCw3ICs1NDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5
cGVDaGFyYWN0ZXJDbGFzczoKLSAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBj
dXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24g
PSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAodGVybS5x
dWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpIHsKICAgICAgICAgICAgICAgICAg
ICAgdGVybS5mcmFtZUxvY2F0aW9uID0gY3VycmVudENhbGxGcmFtZVNpemU7CiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1Ry
YWNrSW5mb0NoYXJhY3RlckNsYXNzOwpAQCAtNTU5LDE4ICs1NTksMTggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSAmJiAhdGVybS5wYXJlbnRo
ZXNlcy5pc0NvcHkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBl
ICE9IFF1YW50aWZpZXJGaXhlZENvdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dENhbGxGcmFtZVNpemUgKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXNPbmNlOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVw
RGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRD
YWxsRnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRDYWxsRnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUsIGN1cnJlbnRJbnB1dFBv
c2l0aW9uLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcXVhbnRpdHkgaXMgZml4
ZWQsIHRoZW4gcHJlLWNoZWNrIGl0cyBtaW5pbXVtIHNpemUuCiAgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRJbnB1dFBvc2l0aW9uICs9IHRlcm0ucGFyZW50aGVzZXMu
ZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHRlcm0uaW5w
dXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICB0
ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRlcm0ucGFyZW50aGVzZXMuaXNUZXJtaW5hbCkgewogICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSArPSBZYXJyU3RhY2tTcGFjZUZvckJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlc1Rlcm1pbmFsOwotICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVwRGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVz
ZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDYWxsRnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlv
bik7Ci0gICAgICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1
dFBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNl
dHVwRGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJl
bnRDYWxsRnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uLmdldCgp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlcm0uaW5w
dXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICBz
ZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCAwLCBj
dXJyZW50SW5wdXRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3Np
dGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uLmdldCgpOworICAgICAgICAgICAgICAgICAgICBz
ZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCAwLCBj
dXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRD
YWxsRnJhbWVTaXplICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2Vz
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBGaXhlZCBjb3VudCBvZiAx
IGNvdWxkIGJlIGFjY2VwdGVkLCBpZiB0aGV5IGhhdmUgYSBmaXhlZCBzaXplICpBTkQqIGlmIGFs
bCBhbHRlcm5hdGl2ZXMgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aC4KQEAgLTU3OCw5ICs1NzgsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUGF0
dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgotICAgICAgICAgICAgICAgIHRl
cm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAg
IHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uLmdldCgpOwogICAgICAg
ICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlvbiA9IGN1cnJlbnRDYWxsRnJhbWVTaXplOwotICAg
ICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNl
dHModGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUgKyBZ
YXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLCBjdXJy
ZW50SW5wdXRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUg
PSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBj
dXJyZW50Q2FsbEZyYW1lU2l6ZSArIFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVu
dGhldGljYWxBc3NlcnRpb24sIGN1cnJlbnRJbnB1dFBvc2l0aW9uLmdldCgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZURvdFN0
YXJFbmNsb3N1cmU6CkBAIC01OTAsNyArNTkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPSBjdXJyZW50
SW5wdXRQb3NpdGlvbiAtIGluaXRpYWxJbnB1dFBvc2l0aW9uOworICAgICAgICBhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSA9IChjdXJyZW50SW5wdXRQb3NpdGlvbiAtIGluaXRpYWxJbnB1dFBv
c2l0aW9uKS5nZXQoKTsKICAgICAgICAgcmV0dXJuIGN1cnJlbnRDYWxsRnJhbWVTaXplOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKaW5kZXggOTdjMzg3
MDQyNWVmYzY3ZGE1NDE5NGNlYWJkNzNjMjZiMTczNTFlOS4uZTQ2NDc5ZWY1OWNiMTRiM2FhOGQ2
MDc3ODUzNmMzZGYwMTRlN2NjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyclBhdHRlcm4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0
dGVybi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIFlhcnJQYXR0ZXJuX2gKIAogI2luY2x1
ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CiAKQEAgLTExNyw3ICsxMTgsNyBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogICAgICAgICB9
IGFuY2hvcnM7CiAgICAgfTsKICAgICBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGU7Ci0gICAg
dW5zaWduZWQgcXVhbnRpdHlDb3VudDsKKyAgICBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNv
dW50OwogICAgIGludCBpbnB1dFBvc2l0aW9uOwogICAgIHVuc2lnbmVkIGZyYW1lTG9jYXRpb247
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwODE0YmIyNDc2YmNkMGI4MDBjYmUxZDVjODQ0NzI1ZGY5N2E5NzEz
Li42YWQ2MTQwZTUwMTJjZDg0YjQzODIwMWIyZDBmNjBiYTRkNjVlY2YyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgtMzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY2hlY2tlZCBhcml0aG1ldGljCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGZvcndhcmRpbmcg
aGVhZGVyIGZvciBDaGVja2VkQXJpdGhtZXRpYy5oCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVh
ZGVycy93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaDogQWRkZWQuCisKIDIwMTEtMDgtMjkgIE9saXZl
ciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBUeXBlZEFycmF5cyBkb24ndCBl
bnN1cmUgdGhhdCBkZW5vcm1hbGlzZWQgdmFsdWVzIGFyZSBub3JtYWxpc2VkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9DaGVja2VkQXJpdGhtZXRp
Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJjNDhhZTUyZWQ5YjkxMzVkMTE4Y2Y2OTJjYzZjZmRjMGE0NDcyZTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0Rf
Q2hlY2tlZEFyaXRobWV0aWNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DaGVja2VkQXJpdGhtZXRp
Y19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGMx
Mzk4ZDE3ZjljNjE1Mjk5MDc4YTdjYWE1OTAwODMwMTM2YjFhOTcuLmRkY2UyYTg1MjIzZTgwZDBl
ZDA1NjM1ZjJlMDYwZDQyZDBhMDQ4OTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOC0zMCAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjaGVja2Vk
IGFyaXRobWV0aWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY3MDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHRlc3QgY2FzZXMgZm9yIENoZWNrZWQ8PgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOiBBZGRlZC4K
KwogMjAxMS0wOC0yOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAg
ICAgICBEdW1wUmVuZGVyVHJlZSBzaG91bGQgYmVnaW4gZWFjaCB0ZXN0IHdpdGggYW4gZW1wdHkg
Y29va2llIHN0b3JlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyNDkyMzg4NTJmY2I0ZmNk
OTMzODkwY2I5YjQyMTVhYTQzMzQ4ZTcuLmYyOTQxYzgzYzEyNTdhM2FmN2U3NWUzYTU5ZmYzMTMz
Y2FhZTJlOWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMSw2ICsyMSw3IEBACiAJCTM3
MjAwQjkyMTNBMTYyMzAwMDdBNEZBRCAvKiBWZWN0b3JSZXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MjAwQjkxMTNBMTYyMzAwMDdBNEZB
RCAvKiBWZWN0b3JSZXZlcnNlLmNwcCAqLzsgfTsKIAkJNEJGREZGQTcxMzE0Nzc2QzAwNjFGMjRC
IC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QkZERkZBNjEzMTQ3NzZDMDA2MUYyNEIgLyog
SGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCAqLzsgfTsKIAkJNEJGREZGQTkxMzE0
Nzc3NzAwNjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCRkRGRkE4MTMxNDc3NzcwMDYxRjI0
QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgKi87IH07CisJCUE3RTY5QjVFMTQwQzEx
NzIwMDIyMzQxMiAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNjlCNUQxNDBDMTE3MjAwMjIz
NDEyIC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi87IH07CiAJCUJDMTMxODg1
MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxODg0MTE3MTE0QjYwMEI2OTcy
NyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKIAkJQkMxMzFBOUIxMTcxMzE2OTAw
QjY5NzI3IC8qIG1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzEzMUE5QTExNzEzMTY5MDBCNjk3MjcgLyogbWFpbi5tbSAqLzsgfTsKIAkJQkMx
MzFBQTkxMTcxMzFGQzAwQjY5NzI3IC8qIFRlc3RzQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEzMUFBODExNzEzMUZDMDBCNjk3
MjcgLyogVGVzdHNDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTEzNCw2ICsxMzUsNyBAQAogCQk0
QkZERkZBNjEzMTQ3NzZDMDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRlc3RSZXN1bHRO
b2RlSGFuZGxlX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCRkRG
RkE4MTMxNDc3NzcwMDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1
RSAvKiBUZXN0V2ViS2l0QVBJICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBUZXN0V2ViS2l0QVBJOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OworCQlBN0U2OUI1RDE0MEMxMTcyMDAyMjM0MTIgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVy
YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoZWNrZWRB
cml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MTMxODgzMTE3MTE0QTgwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzEzMTg4NDExNzExNEI2MDBCNjk3MjcgLyogUGxhdGZvcm1VdGls
aXRpZXNNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0
Zm9ybVV0aWxpdGllc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMzFB
OUExMTcxMzE2OTAwQjY5NzI3IC8qIG1haW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBtYWluLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUw
LDYgKzM1Miw3IEBACiAJCQkJQzAxMzYzQzcxM0MzOTk3MzAwRUYzOTY0IC8qIFN0cmluZ09wZXJh
dG9ycy5jcHAgKi8sCiAJCQkJQkM5MDk2NEIxMjU1NjFCRjAwMDgzNzU2IC8qIFZlY3RvckJhc2lj
LmNwcCAqLywKIAkJCQkzNzIwMEI5MTEzQTE2MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2ZXJzZS5j
cHAgKi8sCisJCQkJQTdFNjlCNUQxNDBDMTE3MjAwMjIzNDEyIC8qIENoZWNrZWRBcml0aG1ldGlj
T3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFdURjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC01NTAsNiArNTUzLDcgQEAKIAkJCQlDMDg1ODdCRjEzRkU5NTZDMDAx
RUY0RTUgLyogV2ViS2l0QWdub3N0aWNUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzA4NTg3
RkMxM0ZFQzM5QjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDMDg1ODgwMDEzRkVDM0E2MDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RTd2l6
emxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE3RTY5QjVFMTQwQzExNzIwMDIyMzQxMiAvKiBD
aGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9u
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTFlZGUzNmMzZjA4MmJjNGY5MTU3YjVkODhjOTkxZmZmMDg2MTVi
MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvQ2hlY2tlZEFy
aXRobWV0aWNPcGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DaGVja2VkQXJpdGhtZXRpYy5oPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKKyNkZWZpbmUgQ2hlY2tlZEFyaXRobWV0aWNUZXN0KHR5cGUsIGNv
ZXJjZUxpdGVyYWwsIE1peGVkU2lnbmVkbmVzc1Rlc3QpIFwKKyAgICBURVNUKFdURiwgQ2hlY2tl
ZF8jI3R5cGUpIFwKKyAgICB7IFwKKyAgICAgICAgQ2hlY2tlZDx0eXBlLCBSZWNvcmRPdmVyZmxv
dz4gdmFsdWU7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksIHZhbHVlLmdl
dCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWF4
KCksICh2YWx1ZSArIHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpKS5nZXQoKSk7IFwK
KyAgICAgICAgRVhQRUNUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpLCAoc3Rk
OjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWF4KCkgKyB2YWx1ZSkuZ2V0KCkpOyBcCisgICAgICAg
IEVYUEVDVF9FUShzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptaW4oKSwgKHZhbHVlICsgc3Rk
OjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWluKCkpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1Rf
RVEoc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWluKCksIChzdGQ6Om51bWVyaWNfbGltaXRz
PHR5cGU+OjptaW4oKSArIHZhbHVlKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMCksICh2YWx1ZSAqIGNvZXJjZUxpdGVyYWwoMCkpLmdldCgpKTsgXAorICAgICAg
ICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKGNvZXJjZUxpdGVyYWwoMCkgKiB2YWx1ZSku
Z2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDApLCAodmFsdWUgKiB2
YWx1ZSkuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDApLCAodmFs
dWUgLSBjb2VyY2VMaXRlcmFsKDApKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMCksIChjb2VyY2VMaXRlcmFsKDApIC0gdmFsdWUpLmdldCgpKTsgXAorICAgICAg
ICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKHZhbHVlIC0gdmFsdWUpLmdldCgpKTsgXAor
ICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKHZhbHVlKyspLmdldCgpKTsgXAor
ICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxKSwgKHZhbHVlLS0pLmdldCgpKTsgXAor
ICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxKSwgKCsrdmFsdWUpLmdldCgpKTsgXAor
ICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKC0tdmFsdWUpLmdldCgpKTsgXAor
ICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxMCksICh2YWx1ZSArPSBjb2VyY2VMaXRl
cmFsKDEwKSkuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDEwKSwg
dmFsdWUuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDEwMCksICh2
YWx1ZSAqPSBjb2VyY2VMaXRlcmFsKDEwKSkuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShj
b2VyY2VMaXRlcmFsKDEwMCksIHZhbHVlLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29l
cmNlTGl0ZXJhbCgwKSwgKHZhbHVlIC09IGNvZXJjZUxpdGVyYWwoMTAwKSkuZ2V0KCkpOyBcCisg
ICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDApLCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAg
ICAgdmFsdWUgPSAxMDsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxMCksIHZh
bHVlLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKHZhbHVl
IC0gY29lcmNlTGl0ZXJhbCgxMCkpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNl
TGl0ZXJhbCgxMCksIHZhbHVlLmdldCgpKTsgXAorICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dHlwZT46Om1pbigpOyBcCisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCAoQ2hlY2tl
ZDx0eXBlLCBSZWNvcmRPdmVyZmxvdz4odmFsdWUgLSBjb2VyY2VMaXRlcmFsKDEpKSkuaGFzT3Zl
cmZsb3dlZCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoZmFsc2UsICh2YWx1ZS0tKS5oYXNPdmVy
Zmxvd2VkKCkpOyBcCisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2Vk
KCkpOyBcCisgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWF4KCk7
IFwKKyAgICAgICAgRVhQRUNUX0VRKGZhbHNlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpOyBcCisg
ICAgICAgIEVYUEVDVF9FUSh0cnVlLCAoQ2hlY2tlZDx0eXBlLCBSZWNvcmRPdmVyZmxvdz4odmFs
dWUgKyBjb2VyY2VMaXRlcmFsKDEpKSkuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICBFWFBF
Q1RfRVEoZmFsc2UsICh2YWx1ZSsrKS5oYXNPdmVyZmxvd2VkKCkpOyBcCisgICAgICAgIEVYUEVD
VF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpOyBcCisgICAgICAgIHZhbHVlID0gc3Rk
OjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWF4KCk7IFwKKyAgICAgICAgRVhQRUNUX0VRKHRydWUs
ICh2YWx1ZSArPSBjb2VyY2VMaXRlcmFsKDEpKS5oYXNPdmVyZmxvd2VkKCkpOyBcCisgICAgICAg
IEVYUEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpOyBcCisgICAgICAgIHZhbHVl
ID0gMTA7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoY29lcmNlTGl0
ZXJhbCgwKSwgKHZhbHVlICsgLTEwKS5nZXQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVz
c1Rlc3QoRVhQRUNUX0VRKDBVLCAodmFsdWUgLSAxMFUpLmdldCgpKSk7IFwKKyAgICAgICAgTWl4
ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKC0xMCArIHZhbHVl
KS5nZXQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKDBVLCAo
MTBVIC0gdmFsdWUpLmdldCgpKSk7IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHR5cGU+OjptaW4oKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9F
USh0cnVlLCAoQ2hlY2tlZDx0eXBlLCBSZWNvcmRPdmVyZmxvdz4odmFsdWUgLSAxKSkuaGFzT3Zl
cmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoZmFs
c2UsICh2YWx1ZS0tKS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5l
c3NUZXN0KEVYUEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAg
ICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpOyBcCisgICAgICAgIE1p
eGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGZhbHNlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkp
KTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCAoQ2hlY2tl
ZDx0eXBlLCBSZWNvcmRPdmVyZmxvdz4odmFsdWUgKyAxKSkuaGFzT3ZlcmZsb3dlZCgpKSk7IFwK
KyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoZmFsc2UsICh2YWx1ZSsrKS5o
YXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9F
USh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICB2YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rl
c3QoRVhQRUNUX0VRKHRydWUsICh2YWx1ZSArPSAxKS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAg
ICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxv
d2VkKCkpKTsgXAorICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1p
bigpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKHRydWUsICh2YWx1
ZSAtIDFVKS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0
KEVYUEVDVF9FUShmYWxzZSwgKHZhbHVlLS0pLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAg
IE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKHRydWUsIHZhbHVlLmhhc092ZXJmbG93ZWQo
KSkpOyBcCisgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWF4KCk7
IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoZmFsc2UsIHZhbHVlLmhh
c092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VR
KHRydWUsIChDaGVja2VkPHR5cGUsIFJlY29yZE92ZXJmbG93Pih2YWx1ZSArIDFVKSkuaGFzT3Zl
cmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoZmFs
c2UsICh2YWx1ZSsrKS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5l
c3NUZXN0KEVYUEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAg
ICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpOyBcCisgICAgICAgIE1p
eGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKHRydWUsICh2YWx1ZSArPSAxVSkuaGFzT3ZlcmZs
b3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwg
dmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICB9CisKKyNkZWZpbmUgQ29lcmNlTGl0ZXJh
bFRvVW5zaWduZWQoeCkgeCMjVQorI2RlZmluZSBDb2VyY2VMaXRlcmFsTm9wKHgpIHgKKyNkZWZp
bmUgQWxsb3dNaXhlZFNpZ25lZG5lc3NUZXN0KHgpIHgKKyNkZWZpbmUgSWdub3JlTWl4ZWRTaWdu
ZWRuZXNzVGVzdCh4KQorQ2hlY2tlZEFyaXRobWV0aWNUZXN0KGludDhfdCwgQ29lcmNlTGl0ZXJh
bE5vcCwgSWdub3JlTWl4ZWRTaWduZWRuZXNzVGVzdCkKK0NoZWNrZWRBcml0aG1ldGljVGVzdChp
bnQxNl90LCBDb2VyY2VMaXRlcmFsTm9wLCBJZ25vcmVNaXhlZFNpZ25lZG5lc3NUZXN0KQorQ2hl
Y2tlZEFyaXRobWV0aWNUZXN0KGludDMyX3QsIENvZXJjZUxpdGVyYWxOb3AsIEFsbG93TWl4ZWRT
aWduZWRuZXNzVGVzdCkKK0NoZWNrZWRBcml0aG1ldGljVGVzdCh1aW50MzJfdCwgQ29lcmNlTGl0
ZXJhbFRvVW5zaWduZWQsIEFsbG93TWl4ZWRTaWduZWRuZXNzVGVzdCkKK0NoZWNrZWRBcml0aG1l
dGljVGVzdChpbnQ2NF90LCBDb2VyY2VMaXRlcmFsTm9wLCBJZ25vcmVNaXhlZFNpZ25lZG5lc3NU
ZXN0KQorQ2hlY2tlZEFyaXRobWV0aWNUZXN0KHVpbnQ2NF90LCBDb2VyY2VMaXRlcmFsVG9VbnNp
Z25lZCwgSWdub3JlTWl4ZWRTaWduZWRuZXNzVGVzdCkKKworfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105708</attachid>
            <date>2011-08-30 15:32:01 -0700</date>
            <delta_ts>2011-08-30 15:59:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67095-20110830153200.patch</filename>
            <type>text/plain</type>
            <size>66708</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwOTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVj
M2JiYzJlY2FhZDAzN2Q2NjBmMTcyY2IyNjQxMDQwMTcwMmNiNDMuLmQ1YjM2MzlmNDM0NDcwODlj
YzZhOTVhZmIwZWZjYzNmYzRlYzYyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDkxIEBACiAyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNoZWNrZWQgYXJpdGhtZXRpYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwOTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjaGVja2VkIGFyaXRobWV0
aWMgY2xhc3MgQ2hlY2tlZDxUPiB0aGF0IHByb3ZpZGVzIG92ZXJmbG93LXNhZmUKKyAgICAgICAg
YXJpdGhtZXRpYyBvdmVyIGFsbCBpbnRlZ3JhbCB0eXBlcy4gIENoZWNrZWQ8VD4gc3VwcG9ydHMg
YWRkaXRpb24sIHN1YnRyYWN0aW9uCisgICAgICAgIGFuZCBtdWx0aXBsaWNhdGlvbiwgYWxvbmcg
d2l0aCAiYm9vbCIgY29udmVyc2lvbnMgYW5kIGVxdWFsaXR5IG9wZXJhdG9ycy4KKworICAgICAg
ICBDaGVja2VkPD4gY2FuIGJlIHVzZWQgaW4gZWl0aGVyIENSQVNIKCkgb24gb3ZlcmZsb3cgb3Ig
ZGVsYXllZCBmYWlsdXJlIG1vZGVzLAorICAgICAgICBhbHRob3VnaCB0aGUgZGVmYXVsdCBpcyB0
byBDUkFTSCgpLgorCisgICAgICAgIFRvIGVuc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSBpbiB1
c2UgKHJhdGhlciB0aGFuIGNoZWNraW5nIGluIGRlYWQgY29kZSkgSSd2ZQorICAgICAgICBtYWRl
IGEgY291cGxlIG9mIHByb3BlcnRpZXMgaW4gWUFSUiB1c2UgQ2hlY2tlZDxpbnQ+IGFuZCBDaGVj
a2VkPHVuc2lnbmVkPgorICAgICAgICBpbnN0ZWFkIG9mIHJhdyB2YWx1ZSBhcml0aG1ldGljLiAg
VGhpcyBoYXMgcmVzdWx0ZWQgaW4gYSBtb2RlcmF0ZSBzZXQgb2YgY2hhbmdlcywKKyAgICAgICAg
dG8gWUFSUiAtIG1vc3RseSBhZGRpbmcgLmdldCgpIGNhbGxzLCBidXQgYSBjb3VwbGUgb2YgY2Fz
dHMgZnJvbSB1bnNpZ25lZCBsb25nCisgICAgICAgIHRvIHVuc2lnbmVkIGZvciBzb21lIHVzZXMg
b2Ygc2l6ZW9mLCBhcyBDaGVja2VkPD4gY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQKKyAgICAg
ICAgbWl4ZWQgc2lnbmVkLW5lc3Mgb2YgdHlwZXMgd2lkZXIgdGhhdCAzMiBiaXRzLgorCisgICAg
ICAgIEhhcHBpbHkgdGhlIGluY3JlYXNlZCB0eXBlIHNhZmV0eSBvZiBDaGVja2VkPD4gbWVhbnMg
dGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0bworICAgICAgICBhY2NpZGVudGFsbHkgYXNzaWduIGF3
YXkgcHJlY2lzaW9uLCBub3IgYWNjaWRlbnRhbGx5IGNhbGwgaW50ZWdlciBvdmVybG9hZCBvZgor
ICAgICAgICBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIGJvb2wgdmVyc2lvbi4KKworICAgICAg
ICBObyBtZWFzdXJhYmxlIHJlZ3Jlc3Npb24gaW4gcGVyZm9ybWFuY2UsIGFuZCBTdW5TcGlkZXIg
Y2xhaW1zIHRoaXMgcGF0Y2ggdG8gYmUKKyAgICAgICAgYSBwcm9ncmVzc2lvbiBvZiAwLjMlLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q3Jh
c2hPbk92ZXJmbG93OjpvdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93
OjpjbGVhck92ZXJmbG93KToKKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93OjpoYXNPdmVy
Zmxvd2VkKToKKyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6OlJlY29yZE92ZXJmbG93KToK
KyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6Om92ZXJmbG93ZWQpOgorICAgICAgICAoV1RG
OjpSZWNvcmRPdmVyZmxvdzo6Y2xlYXJPdmVyZmxvdyk6CisgICAgICAgIChXVEY6OlJlY29yZE92
ZXJmbG93OjpoYXNPdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6aXNJbkJvdW5kcyk6CisgICAg
ICAgIChXVEY6OnNhZmVBZGQpOgorICAgICAgICAoV1RGOjpzYWZlU3ViKToKKyAgICAgICAgKFdU
Rjo6c2FmZU11bHRpcGx5KToKKyAgICAgICAgKFdURjo6c2FmZUVxdWFscyk6CisgICAgICAgIChX
VEY6OndvcmtBcm91bmRDbGFuZ0J1Zyk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6OkNoZWNrZWQp
OgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDaGVj
a2VkOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3ItLSk6Cisg
ICAgICAgIChXVEY6OkNoZWNrZWQ6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6
Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6
Z2V0KToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OkNoZWNrZWQ6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvcio9
KToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkNo
ZWNrZWQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAo
V1RGOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAqIHlh
cnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tUGF0dGVybkNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxl
cjo6YXRvbUNoYXJhY3RlckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tQmFja1JlZmVyZW5jZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6
YXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRl
Q29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc09uY2VFbmQpOgorICAgICAgICAoSlND
OjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc1Rlcm1pbmFsRW5kKToKKyAgICAg
ICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVy
bTo6Qnl0ZVRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6Q2hlY2tJbnB1dCk6
CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpVbmNoZWNrSW5wdXQpOgorICAgICAgICAq
IHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omdl
bmVyYXRlQXNzZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJy
R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkpOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJD
bGFzc09uY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUNo
YXJhY3RlckNsYXNzRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpn
ZW5lcmF0ZUNoYXJhY3RlckNsYXNzR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkpOgorICAgICAgICAqIHlh
cnIvWWFyclBhdHRlcm4uY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0
cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyk6CisgICAgICAgICogeWFyci9ZYXJyUGF0
dGVybi5oOgorCisyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
ICAgICAgICAgVHlwZWRBcnJheXMgZG9uJ3QgZW5zdXJlIHRoYXQgZGVub3JtYWxpc2VkIHZhbHVl
cyBhcmUgbm9ybWFsaXNlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjcxNzgKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBjMGM2YjcwM2UzYzVlMGQ3ZjY2YjFhZTg0YzQ5YWU3ZGEzMzI5NzZhLi42ZDJlMjdk
MmI3YmJjYmJmZGNjOTM2ODY1ZjhlNTUyNTZjN2I4ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDU5LDYgKzQ1OSw3IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxv
Y2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQ29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJl
ZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQppbmRleCA2MTIwNDkyZTI5Mjg0NjI5M2IyNTM4MTNjMjk4ZDQxYThiZmZiMzRkLi4yODA3
MTMyNTVkZjM2MGMwYmFmNGQ1NmVlYmI1MTQzNjliYzZmNzg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMTQwLDYgKzE0MCw3IEBACiAgICAgICAgICAg
ICAnd3RmL0Jsb29tRmlsdGVyLmgnLAogICAgICAgICAgICAgJ3d0Zi9CdW1wUG9pbnRlckFsbG9j
YXRvci5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmgnLAorICAgICAgICAgICAgJ3d0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oJywKICAgICAgICAgICAgICd3dGYvQ29tcGlsZXIuaCcsCiAg
ICAgICAgICAgICAnd3RmL0NvbXBsZXguaCcsCiAgICAgICAgICAgICAnd3RmL0Nyb3NzVGhyZWFk
UmVmQ291bnRlZC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDM0OGMyNmYwMTk4MWQxMzk3
NGI0ZWIzYjc1M2EyYzk5OWMyZjhiMmQuLmEzODg5ODhmN2E2ZGQ3OGUyNThkMjk5YjFhMzhkMWJj
Y2Y3OGM3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtNTY1LDYgKzU2NSwxMCBAQAogCQkJ
PgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDaGVja2Vk
QXJpdGhtZXRpYy5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHd0ZlxDb21waWxlci5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGNiNjY3ZDhiYWMyZWExNjE5OWU4NjZlMDRlOGE1MTRmOTFhZDdmNDku
Ljc1MzdmNWNiZDE2NDU0OGE2NmI3MTJhZGViNGM2OGIwYTBkODM1NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00MjIsNiArNDIyLDcgQEAKIAkJQTdBMUY3QUMwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAq
LzsgfTsKIAkJQTdBMUY3QUQwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBMUY3QUIwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsg
fTsKKwkJQTdCQzBDODIxNDA2MDhCMDAwQjFCQjcxIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JDMEM4MTE0MDYw
OEIwMDBCMUJCNzEgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyog
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAgKi87IH07CiAJCUE3QzQwQzBBMTMwQjA1N0QwMEQwMDJBMSAvKiBCbG9j
a1N0YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0M0MEMwNzEzMEIwNTdEMDBEMDAyQTEgLyogQmxvY2tTdGFjay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzQwQzBCMTMwQjA1N0QwMEQwMDJB
MSAvKiBTZW50aW5lbExpbmtlZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QzQwQzA4MTMwQjA1N0QwMEQwMDJBMSAvKiBTZW50aW5lbExpbmtl
ZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTE0OSw2ICsxMTUwLDcgQEAKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRh
eENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JE
QjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0JDMEM4MTE0MDYwOEIwMDBCMUJCNzEg
LyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2hlY2tlZEFyaXRobWV0aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUU4
QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAv
KiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gS2V5d29yZExvb2t1cEdlbmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdDMjI1Q0QxMzk5ODQ5QzAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5d29yZExvb2t1cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTY4Niw2ICsxNjg4LDcgQEAKIAkJCQk4NjY3NkQ0RDExRkVE
NTVEMDA0QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlBN0ExRjdBQTBG
MjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBN0ExRjdBQjBGMjUyQjND
MDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi8sCisJCQkJQTdCQzBDODExNDA2MDhCMDAwQjFCQjcx
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFF
IC8qIENvbXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBs
ZXguaCAqLywKIAkJCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi8sCkBAIC0yNjA4LDYgKzI2MTEsNyBAQAogCQkJCTg2NjczOUQyMTNCRkRFNzEw
MDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZE
RTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzY2QkFFNDEzRjQ5MkNDMDBDMjNGQUUgLyogQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE3QkMwQzgyMTQwNjA4QjAwMEIxQkI3MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRBcml0
aG1ldGljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzdmMGNiOWIxN2E0MjAzYmJjOGU1MTExZWJhZDBhZTY0ZDQ1NzA1MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaApAQCAtMCwwICsxLDY5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIENoZWNrZWRBcml0aG1ldGljX2gKKyNkZWZpbmUgQ2hlY2tl
ZEFyaXRobWV0aWNfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorCisjaW5jbHVkZSA8bGlt
aXRzPgorCisvKiBDaGVja2VkPFQ+CisgKgorICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIG1lY2hh
bmlzbSB0byBwZXJmb3JtIG92ZXJmbG93LXNhZmUgaW50ZWdlciBhcml0aG1ldGljCisgKiB3aXRo
b3V0IGhhdmluZyB0byBtYW51YWxseSBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBhbGwgdGhlIHJlcXVp
cmVkIGJvdW5kcyBjaGVja3MKKyAqIGRpcmVjdGx5IGluIHlvdXIgY29kZS4KKyAqCisgKiBUaGVy
ZSBhcmUgdHdvIG1vZGVzIG9mIG9wZXJhdGlvbjoKKyAqICAtIFRoZSBkZWZhdWx0IGlzIENoZWNr
ZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93PiwgYW5kIGNyYXNoZXMgYXQgdGhlIHBvaW50CisgKiAgICBh
bmQgb3ZlcmZsb3cgaGFzIG9jY3VycmVkLgorICogIC0gVGhlIGFsdGVybmF0aXZlIGlzIENoZWNr
ZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+LCB3aGljaCB1c2VzIGFuIGFkZGl0aW9uYWwKKyAqICAgIGJ5
dGUgb2Ygc3RvcmFnZSB0byB0cmFjayB3aGV0aGVyIGFuIG92ZXJmbG93IGhhcyBvY2N1cnJlZCwg
c3Vic2VxdWVudAorICogICAgdW5jaGVja2VkIG9wZXJhdGlvbnMgd2lsbCBjcmFzaCBpZiBhbiBv
dmVyZmxvdyBoYXMgb2NjdXJlZAorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIHByb3ZpZGUgYSBj
dXN0b20gb3ZlcmZsb3cgaGFuZGxlciwgaW4gd2hpY2ggY2FzZSB5b3UgbmVlZAorICogdG8gc3Vw
cG9ydCB0aGVzZSBmdW5jdGlvbnM6CisgKiAgLSB2b2lkIG92ZXJmbG93ZWQoKTsKKyAqICAgIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gb3BlcmF0aW9uIGhhcyBwcm9kdWNlZCBhbiBv
dmVyZmxvdy4KKyAqICAtIGJvb2wgaGFzT3ZlcmZsb3dlZCgpOworICogICAgVGhpcyBmdW5jdGlv
biBtdXN0IHJldHVybiB0cnVlIGlmIG92ZXJmbG93ZWQoKSBoYXMgYmVlbiBjYWxsZWQgb24gYW4K
KyAqICAgIGluc3RhbmNlIGFuZCBmYWxzZSBpZiBpdCBoYXMgbm90LgorICogIC0gdm9pZCBjbGVh
ck92ZXJmbG93KCk7CisgKiAgICBVc2VkIHRvIHJlc2V0IG92ZXJmbG93IHRyYWNraW5nIHdoZW4g
YSB2YWx1ZSBpcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoCisgKiAgICBhIG5ldyB2YWx1ZS4KKyAq
CisgKiBDaGVja2VkPFQ+IHdvcmtzIGZvciBhbGwgaW50ZWdlciB0eXBlcywgd2l0aCB0aGUgZm9s
bG93aW5nIGNhdmVhdHM6CisgKiAgLSBNaXhpbmcgc2lnbmVkbmVzcyBvZiBvcGVyYW5kcyBpcyBv
bmx5IHN1cHBvcnRlZCBmb3IgdHlwZXMgbmFycm93ZXIgdGhhbgorICogICAgNjRiaXRzLgorICog
IC0gSXQgZG9lcyBoYXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LCBzbyB0aWdodCBsb29wcyBtYXkg
d2FudCB0byBiZSBjYXJlZnVsCisgKiAgICB3aGVuIHVzaW5nIGl0LgorICoKKyAqLworCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgQ3Jhc2hPbk92ZXJmbG93IHsKK3Byb3RlY3RlZDoKKyAgICBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgb3ZlcmZsb3dlZCgpCisgICAgeworICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpIHsgfQorCitwdWJsaWM6
CisgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisK
K2NsYXNzIFJlY29yZE92ZXJmbG93IHsKK3Byb3RlY3RlZDoKKyAgICBSZWNvcmRPdmVyZmxvdygp
CisgICAgICAgIDogbV9vdmVyZmxvd2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IG92ZXJmbG93ZWQoKQorICAgIHsKKyAgICAgICAgbV9vdmVyZmxvd2VkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIGNsZWFyT3ZlcmZsb3coKQorICAgIHsKKyAgICAgICAgbV9vdmVyZmxvd2Vk
ID0gZmFsc2U7CisgICAgfQorCitwdWJsaWM6CisgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVyZmxvd2VkOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgY2hh
ciBtX292ZXJmbG93ZWQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgY2xhc3MgT3ZlcmZs
b3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PiBjbGFzcyBDaGVja2VkOwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8VD4gPjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRh
cmdldCwgdHlwZW5hbWUgU291cmNlLCBib29sIHRhcmdldFNpZ25lZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VGFyZ2V0Pjo6aXNfc2lnbmVkLCBib29sIHNvdXJjZVNpZ25lZCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8U291cmNlPjo6aXNfc2lnbmVkPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNr
ZXI8VGFyZ2V0LCBTb3VyY2UsIGZhbHNlLCBmYWxzZT4geworICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIFNhbWUgc2lnbmVkbmVzcyBzbyBp
bXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gd2lsbCBhbHdheXMgaW5jcmVhc2UgcHJlY2lzaW9uCisg
ICAgICAgIC8vIHRvIHdpZGVzdCB0eXBlCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0
LCBTb3VyY2UsIHRydWUsIHRydWU+IHsKKyAgICBzdGF0aWMgYm9vbCBpbkJvdW5kcyhTb3VyY2Ug
dmFsdWUpCisgICAgeworICAgICAgICAvLyBTYW1lIHNpZ25lZG5lc3Mgc28gaW1wbGljaXQgdHlw
ZSBjb252ZXJzaW9uIHdpbGwgYWx3YXlzIGluY3JlYXNlIHByZWNpc2lvbgorICAgICAgICAvLyB0
byB3aWRlc3QgdHlwZQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUYXJnZXQ+
OjptaW4oKSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46
Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1l
IFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3VyY2UsIGZhbHNlLCB0cnVl
PiB7CisgICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgLy8gVGFyZ2V0IGlzIHVuc2lnbmVkIHNvIGFueSB2YWx1ZSBsZXNzIHRoYW4gemVybyBpcyBj
bGVhcmx5IHVuc2FmZQorICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAvLyBJZiBvdXIgKHVuc2lnbmVkKSBUYXJnZXQgaXMgdGhlIHNhbWUg
b3IgZ3JlYXRlciB3aWR0aCB3ZSBjYW4KKyAgICAgICAgLy8gY29udmVydCB2YWx1ZSB0byB0eXBl
IFRhcmdldCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24KKyAgICAgICAgaWYgKHNpemVvZihUYXJn
ZXQpID49IHNpemVvZihTb3VyY2UpKSAKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
YXJnZXQ+KHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOworICAg
ICAgICAvLyBUaGUgc2lnbmVkIFNvdXJjZSB0eXBlIGhhcyBncmVhdGVyIHByZWNpc2lvbiB0aGFu
IHRoZSB0YXJnZXQgc28KKyAgICAgICAgLy8gbWF4KFRhcmdldCkgLT4gU291cmNlIHdpbGwgd2lk
ZW4uCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDxTb3VyY2U+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCkpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0
LCBTb3VyY2UsIHRydWUsIGZhbHNlPiB7CisgICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gU2lnbmVkIHRhcmdldCB3aXRoIGFuIHVuc2lnbmVk
IHNvdXJjZQorICAgICAgICBpZiAoc2l6ZW9mKFRhcmdldCkgPD0gc2l6ZW9mKFNvdXJjZSkpIAor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0PFNvdXJjZT4oc3RkOjpudW1l
cmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKSk7CisgICAgICAgIC8vIFRhcmdldCBpcyBXaWRlciB0
aGFuIFNvdXJjZSBzbyB3ZSdyZSBndWFyYW50ZWVkIHRvIGZpdCBhbnkgdmFsdWUgaW4KKyAgICAg
ICAgLy8gdW5zaWduZWQgU291cmNlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgVHlwZUNvbXBhcmUgewor
ICAgIHN0YXRpYyBjb25zdCBib29sIFNhbWVUeXBlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4gc3RydWN0IFR5cGVDb21wYXJlPFUsIFU+IHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBTYW1lVHlwZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0
eXBlbmFtZSBTb3VyY2UsIGJvb2wgU2FtZVR5cGUgPSBUeXBlQ29tcGFyZTxUYXJnZXQsIFNvdXJj
ZT46OlNhbWVUeXBlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tFbGlkZXI7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja0VsaWRlcjxUYXJn
ZXQsIFNvdXJjZSwgdHJ1ZT4geworICAgIHN0YXRpYyBib29sIGluQm91bmRzKFNvdXJjZSkgeyBy
ZXR1cm4gdHJ1ZTsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNv
dXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrRWxpZGVyPFRhcmdldCwgU291cmNlLCBmYWxzZT4gOiBw
dWJsaWMgQm91bmRzQ2hlY2tlcjxUYXJnZXQsIFNvdXJjZT4geworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbkJv
dW5kcyhTb3VyY2UgdmFsdWUpCit7CisgICAgcmV0dXJuIEJvdW5kc0NoZWNrRWxpZGVyPFRhcmdl
dCwgU291cmNlPjo6aW5Cb3VuZHModmFsdWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IFJlbW92ZUNoZWNrZWQgeworICAgIHR5cGVkZWYgVCBDbGVhblR5cGU7CisgICAgc3Rh
dGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOyAgICAKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENyYXNoT25PdmVy
Zmxvdz4gPiB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5
cGUgQ2xlYW5UeXBlOworICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0g
MDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVj
a2VkPFQsIFJlY29yZE92ZXJmbG93PiA+IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNo
ZWNrZWQ8VD46OkNsZWFuVHlwZSBDbGVhblR5cGU7CisgICAgc3RhdGljIGNvbnN0IENsZWFuVHlw
ZSBEZWZhdWx0VmFsdWUgPSAwOworfTsKKworLy8gVGhlIFJlc3VsdEJhc2UgYW5kIFNpZ25lZG5l
c3NTZWxlY3RvciBhcmUgdXNlZCB0byB3b3JrYXJvdW5kIHR5cGVvZiBub3QgYmVpbmcKKy8vIGF2
YWlsYWJsZSBpbiBNU1ZDCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgYm9vbCB1
SXNCaWdnZXIgPSAoc2l6ZW9mKFUpID4gc2l6ZW9mKFYpKSwgYm9vbCBzYW1lU2l6ZSA9IChzaXpl
b2YoVSkgPT0gc2l6ZW9mKFYpKT4gc3RydWN0IFJlc3VsdEJhc2U7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFJlc3VsdEJhc2U8VSwgViwgdHJ1ZSwgZmFsc2U+IHsK
KyAgICB0eXBlZGVmIFUgUmVzdWx0VHlwZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPiBzdHJ1Y3QgUmVzdWx0QmFzZTxVLCBWLCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0
eXBlZGVmIFYgUmVzdWx0VHlwZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVPiBzdHJ1Y3Qg
UmVzdWx0QmFzZTxVLCBVLCBmYWxzZSwgdHJ1ZT4geworICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBl
OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIGJvb2wgdUlzU2lnbmVk
ID0gc3RkOjpudW1lcmljX2xpbWl0czxVPjo6aXNfc2lnbmVkLCBib29sIHZJc1NpZ25lZCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8Vj46OmlzX3NpZ25lZD4gc3RydWN0IFNpZ25lZG5lc3NTZWxlY3Rv
cjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1Nl
bGVjdG9yPFUsIFYsIHRydWUsIHRydWU+IHsKKyAgICB0eXBlZGVmIFUgUmVzdWx0VHlwZTsKK307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1Nl
bGVjdG9yPFUsIFYsIGZhbHNlLCBmYWxzZT4geworICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBTaWduZWRuZXNz
U2VsZWN0b3I8VSwgViwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0eXBlZGVmIFYgUmVzdWx0VHlwZTsK
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVz
c1NlbGVjdG9yPFUsIFYsIGZhbHNlLCB0cnVlPiB7CisgICAgdHlwZWRlZiBVIFJlc3VsdFR5cGU7
Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFJlc3VsdEJh
c2U8VSwgViwgZmFsc2UsIHRydWU+IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFNpZ25lZG5lc3NT
ZWxlY3RvcjxVLCBWPjo6UmVzdWx0VHlwZSBSZXN1bHRUeXBlOworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHQgOiBSZXN1bHRCYXNlPHR5cGVuYW1l
IFJlbW92ZUNoZWNrZWQ8VT46OkNsZWFuVHlwZSwgdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxWPjo6
Q2xlYW5UeXBlPiB7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTEhTLCB0eXBlbmFtZSBSSFMs
IHR5cGVuYW1lIFJlc3VsdFR5cGUgPSB0eXBlbmFtZSBSZXN1bHQ8TEhTLCBSSFM+OjpSZXN1bHRU
eXBlLCAKKyAgICBib29sIGxoc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8TEhTPjo6aXNf
c2lnbmVkLCBib29sIHJoc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8UkhTPjo6aXNfc2ln
bmVkPiBzdHJ1Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBM
SFMsIHR5cGVuYW1lIFJIUywgdHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRobWV0aWNP
cGVyYXRpb25zPExIUywgUkhTLCBSZXN1bHRUeXBlLCB0cnVlLCB0cnVlPiB7CisgICAgLy8gTEhT
IGFuZCBSSFMgYXJlIHNpZ25lZCB0eXBlcworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uCisgICAg
c3RhdGljIGlubGluZSBib29sIHNpZ25zTWF0Y2goTEhTIGxocywgUkhTIHJocykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAobGhzIF4gcmhzKSA+PSAwOworICAgIH0KKworICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBhZGQoTEhTIGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VO
VVNFRF9SRVRVUk4KKyAgICB7CisgICAgICAgIGlmIChzaWduc01hdGNoKGxocywgcmhzKSkgewor
ICAgICAgICAgICAgaWYgKGxocyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51
bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSAtIHJocykgPCBsaHMpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgUmVzdWx0VHlwZSB0ZW1wID0gbGhzIC0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRU
eXBlPjo6bWluKCk7CisgICAgICAgICAgICAgICAgaWYgKHJocyA8IC10ZW1wKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gLy8gaWYg
dGhlIHNpZ25zIGRvIG5vdCBtYXRjaCB0aGlzIG9wZXJhdGlvbiBjYW4ndCBvdmVyZmxvdworICAg
ICAgICByZXN1bHQgPSBsaHMgKyByaHM7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoTEhTIGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYg
cmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KKyAgICB7CisgICAgICAgIGlmICghc2lnbnNNYXRj
aChsaHMsIHJocykpIHsKKyAgICAgICAgICAgIGlmIChsaHMgPj0gMCkgeworICAgICAgICAgICAg
ICAgIGlmIChsaHMgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSArIHJo
cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAocmhzID4gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRU
eXBlPjo6bWF4KCkgKyBsaHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBpZiB0aGUgc2lnbnMgbWF0Y2ggdGhpcyBvcGVyYXRp
b24gY2FuJ3Qgb3ZlcmZsb3cKKyAgICAgICAgcmVzdWx0ID0gbGhzIC0gcmhzOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHkoTEhT
IGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KKyAg
ICB7CisgICAgICAgIGlmIChzaWduc01hdGNoKGxocywgcmhzKSkgeworICAgICAgICAgICAgaWYg
KGxocyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGxocyAmJiAoc3RkOjpudW1lcmljX2xp
bWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLyBsaHMpIDwgcmhzKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChsaHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkgfHwgcmhzID09
IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGlt
aXRzPFJlc3VsdFR5cGU+OjptYXgoKSAvIC1saHMpIDwgLXJocykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGxocyA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocmhzICYmIGxocyA8IChz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSAvIHJocykpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGxocyAmJiByaHMgPCAoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6
bWluKCkgLyBsaHMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gbGhzICogcmhzOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxzKExIUyBs
aHMsIFJIUyByaHMpIHsgcmV0dXJuIGxocyA9PSByaHM7IH0KKworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIExIUywgdHlwZW5hbWUgUkhTLCB0eXBlbmFtZSBSZXN1bHRUeXBlPiBzdHJ1Y3QgQXJp
dGhtZXRpY09wZXJhdGlvbnM8TEhTLCBSSFMsIFJlc3VsdFR5cGUsIGZhbHNlLCBmYWxzZT4gewor
ICAgIC8vIExIUyBhbmQgUkhTIGFyZSB1bnNpZ25lZCB0eXBlcyBzbyBib3VuZHMgY2hlY2tzIGFy
ZSBuaWNlIGFuZCBlYXN5CisgICAgc3RhdGljIGlubGluZSBib29sIGFkZChMSFMgbGhzLCBSSFMg
cmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVSTgorICAgIHsKKyAgICAg
ICAgUmVzdWx0VHlwZSB0ZW1wID0gbGhzICsgcmhzOworICAgICAgICBpZiAodGVtcCA8IGxocykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gdGVtcDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIHN1YihMSFMg
bGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVSTgorICAg
IHsKKyAgICAgICAgUmVzdWx0VHlwZSB0ZW1wID0gbGhzIC0gcmhzOworICAgICAgICBpZiAodGVt
cCA+IGxocykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gdGVt
cDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29s
IG11bHRpcGx5KExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkgV0FSTl9VTlVT
RURfUkVUVVJOCisgICAgeworICAgICAgICBSZXN1bHRUeXBlIHRlbXAgPSBsaHMgKiByaHM7Cisg
ICAgICAgIGlmICh0ZW1wIDwgbGhzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXN1bHQgPSB0ZW1wOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgZXF1YWxzKExIUyBsaHMsIFJIUyByaHMpIHsgcmV0dXJuIGxocyA9PSBy
aHM7IH0KKworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGU+IHN0cnVjdCBBcml0
aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlLCB0cnVlLCBmYWxzZT4g
eworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGQoaW50NjRfdCBsaHMsIGludDY0X3QgcmhzLCBS
ZXN1bHRUeXBlJiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IHRlbXAgPSBsaHMgKyBy
aHM7CisgICAgICAgIGlmICh0ZW1wIDwgc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6
bWluKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh0ZW1wID4gc3Rk
OjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KHRlbXApOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSBib29s
IHN1YihpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGludDY0X3QgdGVtcCA9IGxocyAtIHJoczsKKyAgICAgICAgaWYgKHRlbXAgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKHRlbXAgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5
cGU+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8UmVzdWx0VHlwZT4odGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBtdWx0aXBseShpbnQ2NF90IGxocywgaW50NjRf
dCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGludDY0X3QgdGVtcCA9
IGxocyAqIHJoczsKKyAgICAgICAgaWYgKHRlbXAgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3Vs
dFR5cGU+OjptaW4oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHRl
bXAgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVzdWx0VHlwZT4o
dGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbHMoaW50IGxocywgdW5zaWduZWQgcmhzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDY0X3Q+KGxocykgPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmhzKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRo
bWV0aWNPcGVyYXRpb25zPHVuc2lnbmVkLCBpbnQsIFJlc3VsdFR5cGUsIGZhbHNlLCB0cnVlPiB7
CisgICAgc3RhdGljIGlubGluZSBib29sIGFkZChpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJl
c3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0
aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlPjo6YWRkKHJocywgbGhzLCByZXN1bHQpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgc3ViKGludDY0X3QgbGhzLCBpbnQ2
NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyaXRo
bWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+OjpzdWIobGhzLCByaHMs
IHJlc3VsdCk7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIG11bHRpcGx5KGludDY0
X3QgbGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+Ojpt
dWx0aXBseShyaHMsIGxocywgcmVzdWx0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJv
b2wgZXF1YWxzKHVuc2lnbmVkIGxocywgaW50IHJocykKKyAgICB7CisgICAgICAgIHJldHVybiBB
cml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlPjo6ZXF1YWxzKHJo
cywgbGhzKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgUj4gc3RhdGljIGlubGluZSBib29sIHNhZmVBZGQoVSBsaHMsIFYgcmhzLCBSJiBy
ZXN1bHQpCit7CisgICAgcmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPFUsIFYsIFI+OjphZGQo
bGhzLCByaHMsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBSPiBzdGF0aWMgaW5saW5lIGJvb2wgc2FmZVN1YihVIGxocywgViByaHMsIFIm
IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgViwgUj46OnN1
YihsaHMsIHJocywgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlTXVsdGlwbHkoVSBsaHMsIFYg
cmhzLCBSJiByZXN1bHQpCit7CisgICAgcmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPFUsIFYs
IFI+OjptdWx0aXBseShsaHMsIHJocywgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlRXF1YWxzKFUgbGhzLCBWIHJo
cykKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgVj46OmVxdWFscyhsaHMs
IHJocyk7Cit9CisKK2VudW0gUmVzdWx0T3ZlcmZsb3dlZFRhZyB7IFJlc3VsdE92ZXJmbG93ZWQg
fTsKKyAgICAKKy8vIEZJWE1FOiBOZWVkZWQgdG8gd29ya2Fyb3VuZCBodHRwOi8vbGx2bS5vcmcv
YnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MDEKK3N0YXRpYyBpbmxpbmUgYm9vbCB3b3JrQXJvdW5k
Q2xhbmdCdWcoKSB7IHJldHVybiB0cnVlOyB9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBjbGFz
cyBPdmVyZmxvd0hhbmRsZXI+IGNsYXNzIENoZWNrZWQgOiBwdWJsaWMgT3ZlcmZsb3dIYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1QsIGNsYXNzIF9PdmVyZmxvd0hh
bmRsZXI+IGZyaWVuZCBjbGFzcyBDaGVja2VkOworICAgIENoZWNrZWQoKQorICAgICAgICA6IG1f
dmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgQ2hlY2tlZChSZXN1bHRPdmVyZmxvd2VkVGFn
KQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcyB3aGVuIGNsYW5nIGZpeGVzIGh0dHA6Ly9sbHZtLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9p
ZD0xMDgwMQorICAgICAgICBpZiAod29ya0Fyb3VuZENsYW5nQnVnKCkpCisgICAgICAgICAgICB0
aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IENo
ZWNrZWQoVSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghaXNJbkJvdW5kczxUPih2YWx1ZSkp
CisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
PiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VCwgVj4mIHJocykKKyAgICAgICAgOiBtX3ZhbHVlKHJo
cy5tX3ZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmhz
KQorICAgICAgICA6IE92ZXJmbG93SGFuZGxlcihyaHMpCisgICAgeworICAgICAgICBpZiAoIWlz
SW5Cb3VuZHM8VD4ocmhzLm1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgp
OworICAgICAgICBtX3ZhbHVlID0gcmhzLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VSwgVj4m
IHJocykKKyAgICB7CisgICAgICAgIGlmIChyaHMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAg
ICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8VD4ocmhzLm1f
dmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBtX3ZhbHVl
ID0gcmhzLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNrZWQmIG9wZXJhdG9y
PShDaGVja2VkIHJocykKKyAgICB7CisgICAgICAgIHRoaXMtPmNsZWFyT3ZlcmZsb3coKTsKKyAg
ICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxv
d2VkKCk7CisgICAgICAgIG1fdmFsdWUgPSByaHMubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gY29uc3QgQ2hlY2tl
ZCYgb3BlcmF0b3I9KFUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSBDaGVj
a2VkKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+IGNvbnN0IENoZWNrZWQmIG9wZXJhdG9yPShjb25zdCBDaGVja2VkPFUsIFY+JiByaHMp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSBDaGVja2VkKHJocyk7CisgICAgfQorICAg
IAorICAgIC8vIHByZWZpeAorICAgIGNvbnN0IENoZWNrZWQmIG9wZXJhdG9yKysoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCisg
ICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUrKzsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICBjb25zdCBDaGVja2VkJiBvcGVyYXRv
ci0tKCkKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46Om1pbigpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBtX3Zh
bHVlLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgLy8gcG9zdGZp
eCBvcGVyYXRvcnMKKyAgICBjb25zdCBDaGVja2VkIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAg
ICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCisgICAg
ICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIHJldHVybiBDaGVja2VkKG1fdmFs
dWUrKyk7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNrZWQgb3BlcmF0b3ItLShpbnQpCisg
ICAgeworICAgICAgICBpZiAobV92YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4o
KSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuIENoZWNr
ZWQobV92YWx1ZS0tKTsKKyAgICB9CisgICAgCisgICAgLy8gQm9vbGVhbiBvcGVyYXRvcnMKKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhpcy0+aGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuICFtX3ZhbHVl
OworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCogKENoZWNrZWQ6OipVbnNwZWNpZmllZEJvb2xU
eXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSkgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lm
aWVkQm9vbFR5cGUqPigxKSA6IDA7CisgICAgfQorCisgICAgLy8gVmFsdWUgYWNjZXNzb3JzLiBn
ZXQoKSB3aWxsIGNyYXNoIGlmIHRoZXJlJ3MgYmVlbiBhbiBvdmVyZmxvdy4KKyAgICBUIGdldCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorICAgIAorICAg
IGJvb2wgc2FmZUdldChUJiB2YWx1ZSkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOCisgICAgewor
ICAgICAgICB2YWx1ZSA9IG1fdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzLT5oYXNPdmVyZmxv
d2VkKCk7CisgICAgfQorCisgICAgLy8gTXV0YXRpbmcgYXNzaWdubWVudAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKz0oVSByaHMpCisgICAgeworICAg
ICAgICBpZiAoIXNhZmVBZGQobV92YWx1ZSwgcmhzLCBtX3ZhbHVlKSkKKyAgICAgICAgICAgIHRo
aXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yLT0oVSByaHMpCisgICAg
eworICAgICAgICBpZiAoIXNhZmVTdWIobV92YWx1ZSwgcmhzLCBtX3ZhbHVlKSkKKyAgICAgICAg
ICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKj0oVSByaHMp
CisgICAgeworICAgICAgICBpZiAoIXNhZmVNdWx0aXBseShtX3ZhbHVlLCByaHMsIG1fdmFsdWUp
KQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25z
dCBDaGVja2VkIG9wZXJhdG9yKz0oQ2hlY2tlZDxVLCBWPiByaHMpCisgICAgeworICAgICAgICBp
ZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzICs9IHJocy5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yLT0oQ2hl
Y2tlZDxVLCBWPiByaHMpCisgICAgeworICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzIC09
IHJocy5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKj0oQ2hlY2tlZDxVLCBWPiByaHMpCisgICAgewor
ICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJm
bG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzICo9IHJocy5tX3ZhbHVlOworICAgIH0KKwor
ICAgIC8vIEVxdWFsaXR5IGNvbXBhcmlzb25zCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+IGJv
b2wgb3BlcmF0b3I9PShDaGVja2VkPFQsIFY+IHJocykKKyAgICB7CisgICAgICAgIHJldHVybiBn
ZXQoKSA9PSByaHMuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGJv
b2wgb3BlcmF0b3I9PShVIHJocykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLT5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIHJldHVybiBz
YWZlRXF1YWxzKG1fdmFsdWUsIHJocyk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yPT0oQ2hlY2tlZDxVLCBW
PiByaHMpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCkgPT0gQ2hlY2tlZChyaHMuZ2V0KCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBib29sIG9wZXJhdG9yIT0oVSBy
aHMpCisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSByaHMpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICAvLyBEaXNhbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGZsb2F0aW5nIHBv
aW50IHRvIGludGVnZXIgdHlwZXMKKyAgICBDaGVja2VkKGZsb2F0KTsKKyAgICBDaGVja2VkKGRv
dWJsZSk7CisgICAgdm9pZCBvcGVyYXRvcj0oZmxvYXQpOworICAgIHZvaWQgb3BlcmF0b3I9KGRv
dWJsZSk7CisgICAgdm9pZCBvcGVyYXRvcis9KGZsb2F0KTsKKyAgICB2b2lkIG9wZXJhdG9yKz0o
ZG91YmxlKTsKKyAgICB2b2lkIG9wZXJhdG9yLT0oZmxvYXQpOworICAgIHZvaWQgb3BlcmF0b3It
PShkb3VibGUpOworICAgIFQgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tl
ZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3Bl
cmF0b3IrKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZs
b3dIYW5kbGVyPiByaHMpCit7CisgICAgVSB4OworICAgIFYgeTsKKyAgICBib29sIG92ZXJmbG93
ZWQgPSBsaHMuc2FmZUdldCh4KSB8fCByaHMuc2FmZUdldCh5KTsKKyAgICB0eXBlbmFtZSBSZXN1
bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0OworICAgIG92ZXJmbG93ZWQgfD0gIXNhZmVBZGQo
eCwgeSwgcmVzdWx0KTsKKyAgICBpZiAob3ZlcmZsb3dlZCkKKyAgICAgICAgcmV0dXJuIFJlc3Vs
dE92ZXJmbG93ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBD
aGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVy
PiBvcGVyYXRvci0oQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywgQ2hlY2tlZDxWLCBP
dmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAgICBVIHg7CisgICAgViB5OworICAgIGJvb2wgb3Zl
cmZsb3dlZCA9IGxocy5zYWZlR2V0KHgpIHx8IHJocy5zYWZlR2V0KHkpOworICAgIHR5cGVuYW1l
IFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSByZXN1bHQ7CisgICAgb3ZlcmZsb3dlZCB8PSAhc2Fm
ZVN1Yih4LCB5LCByZXN1bHQpOworICAgIGlmIChvdmVyZmxvd2VkKQorICAgICAgICByZXR1cm4g
UmVzdWx0T3ZlcmZsb3dlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5s
aW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hh
bmRsZXI+IG9wZXJhdG9yKihDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBDaGVja2Vk
PFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAgIFUgeDsKKyAgICBWIHk7CisgICAgYm9v
bCBvdmVyZmxvd2VkID0gbGhzLnNhZmVHZXQoeCkgfHwgcmhzLnNhZmVHZXQoeSk7CisgICAgdHlw
ZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlIHJlc3VsdDsKKyAgICBvdmVyZmxvd2VkIHw9
ICFzYWZlTXVsdGlwbHkoeCwgeSwgcmVzdWx0KTsKKyAgICBpZiAob3ZlcmZsb3dlZCkKKyAgICAg
ICAgcmV0dXJuIFJlc3VsdE92ZXJmbG93ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4g
c3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwg
T3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvcisoQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxo
cywgViByaHMpCit7CisgICAgcmV0dXJuIGxocyArIENoZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVy
PihyaHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUs
IFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yLShDaGVja2VkPFUsIE92
ZXJmbG93SGFuZGxlcj4gbGhzLCBWIHJocykKK3sKKyAgICByZXR1cm4gbGhzIC0gQ2hlY2tlZDxW
LCBPdmVyZmxvd0hhbmRsZXI+KHJocyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0
eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0
b3IqKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIFYgcmhzKQoreworICAgIHJldHVy
biBsaHMgKiBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4ocmhzKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGlj
IGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZs
b3dIYW5kbGVyPiBvcGVyYXRvcisoVSBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiBy
aHMpCit7CisgICAgcmV0dXJuIENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPihsaHMpICsgcmhz
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpS
ZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yLShVIGxocywgQ2hlY2tlZDxWLCBP
dmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAgICByZXR1cm4gQ2hlY2tlZDxVLCBPdmVyZmxvd0hh
bmRsZXI+KGxocykgLSByaHM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFt
ZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKFUg
bGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAgIHJldHVybiBDaGVj
a2VkPFUsIE92ZXJmbG93SGFuZGxlcj4obGhzKSAqIHJoczsKK30KKworfQorCit1c2luZyBXVEY6
OkNoZWNrZWQ7Cit1c2luZyBXVEY6OlJlY29yZE92ZXJmbG93OworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCmluZGV4IDkwM2M2OTIy
YWZjOGIzNGU1YmIwNjA1ZDFmYmI4MGRhYmZiYjE0OGMuLjFhODdjZjczZmQ1OTgzNzU1NDliMjA0
MDhiNGNmMjNkYTRmOTZhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJJbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckludGVycHJldGVyLmNwcApAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgcHVibGljOgogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpXb3JkQm91bmRhcnkoaW52
ZXJ0LCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGF0dGVybkNoYXJh
Y3RlcihVQ2hhciBjaCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24s
IHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAg
ICB2b2lkIGF0b21QYXR0ZXJuQ2hhcmFjdGVyKFVDaGFyIGNoLCBpbnQgaW5wdXRQb3NpdGlvbiwg
dW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwg
UXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX2lnbm9yZUNhc2UpIHsKICAgICAgICAgICAgIFVDaGFyIGxvID0gVW5pY29kZTo6dG9Mb3dl
cihjaCk7CkBAIC0xNTA2LDIyICsxNTA2LDIyIEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShjaCwgaW5wdXRQb3NpdGlvbiwgZnJhbWVM
b2NhdGlvbiwgcXVhbnRpdHlDb3VudCwgcXVhbnRpdHlUeXBlKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBhdG9tQ2hhcmFjdGVyQ2xhc3MoQ2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzLCBib29s
IGludmVydCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2ln
bmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB2b2lk
IGF0b21DaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3MsIGJvb2wg
aW52ZXJ0LCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tl
ZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQog
ICAgIHsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShj
aGFyYWN0ZXJDbGFzcywgaW52ZXJ0LCBpbnB1dFBvc2l0aW9uKSk7CiAKLSAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5h
dG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50OworICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmF0b20ucXVh
bnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0
aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uYXRvbS5xdWFu
dGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9IGZy
YW1lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBhdG9tQmFja1JlZmVyZW5jZSh1bnNpZ25l
ZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
LCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisg
ICAgdm9pZCBhdG9tQmFja1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1
dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFu
dGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgewogICAgICAgICBB
U1NFUlQoc3VicGF0dGVybklkKTsKIAogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMu
YXBwZW5kKEJ5dGVUZXJtOjpCYWNrUmVmZXJlbmNlKHN1YnBhdHRlcm5JZCwgaW5wdXRQb3NpdGlv
bikpOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXMuc2l6ZSgpIC0gMV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsK
KyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJt
cy5zaXplKCkgLSAxXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50LmdldCgpOwog
ICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
LnNpemUoKSAtIDFdLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAt
IDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgIH0KQEAgLTE1ODIsNyArMTU4
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJyZW50QWx0ZXJuYXRpdmVJbmRleCA9IGJlZ2lu
VGVybSArIDE7CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGFyZW50aGV0aWNhbEFzc2VydGlvbkVu
ZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgcXVh
bnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIHZvaWQgYXRvbVBh
cmVudGhldGljYWxBc3NlcnRpb25FbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1l
TG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBl
IHF1YW50aXR5VHlwZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVybSA9IHBvcFBh
cmVudGhlc2VzU3RhY2soKTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdpblRlcm0gKyAx
KTsKQEAgLTE1OTgsOSArMTU5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRlcm0gLSBiZWdp
blRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5mcmFtZUxv
Y2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50OworICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5Q291bnQg
PSBxdWFudGl0eUNvdW50LmdldCgpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
YmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKLSAgICAgICAgbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50
aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9t
LnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50LmdldCgpOwogICAgICAgICBtX2JvZHlEaXNq
dW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7
CiAgICAgfQogCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tlbmRJbmRleF0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247
CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKHVuc2lnbmVk
IGxhc3RTdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUs
IHVuc2lnbmVkIGNhbGxGcmFtZVNpemUgPSAwKQorICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzU3Vi
cGF0dGVybkVuZCh1bnNpZ25lZCBsYXN0U3VicGF0dGVybklkLCBpbnQgaW5wdXRQb3NpdGlvbiwg
dW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwg
UXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlLCB1bnNpZ25lZCBjYWxsRnJhbWVTaXplID0gMCkK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3RhY2so
KTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKQEAgLTE3MDYsMTIg
KzE3MDYsMTIgQEAgcHVibGljOgogICAgICAgICBtX2FsbFBhcmVudGhlc2VzSW5mby5hcHBlbmQo
cGFyZW50aGVzZXNEaXNqdW5jdGlvbik7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
cy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sIHN1
YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgY2FwdHVyZSwgaW5wdXRQb3NpdGlv
bikpOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20u
cXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0
KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVh
bnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXNbYmVnaW5UZXJtXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICB9CiAKLSAg
ICB2b2lkIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1
YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoaW50IGlucHV0UG9z
aXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5
Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKICAgICB7CiAgICAgICAgIHVuc2ln
bmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3RhY2soKTsKICAgICAgICAgY2xvc2VBbHRl
cm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKQEAgLTE3MjcsMTMgKzE3MjcsMTMgQEAgcHVibGljOgog
ICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNl
c1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogCi0gICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9
IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRl
cm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVh
bnRpdHlUeXBlOwotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRv
bS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0
KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50
aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKICAgICB9CiAKLSAgICB2b2lkIGF0b21QYXJlbnRoZXNl
c1Rlcm1pbmFsRW5kKGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1
bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisgICAg
dm9pZCBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWdu
ZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRp
ZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgYmVnaW5UZXJt
ID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAgICBjbG9zZUFsdGVybmF0aXZlKGJlZ2lu
VGVybSArIDEpOwpAQCAtMTc0OSw5ICsxNzQ5LDkgQEAgcHVibGljOgogICAgICAgICBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVy
bSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1d
LmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0
aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7
CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRp
dHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwotICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eUNvdW50
ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRl
cm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50
aXR5VHlwZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmgKaW5kZXggNzhhOGYzNDM4OTM2NzQ0ZmI5Mzk2ODYyNGMxMzdmMDVkNDUxMDA1OS4u
OTIzZWNhMWRhMGYzYjVlMDE0M2VhZjdmYjdmNjc5ODgzYTdmZDE3NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmgKQEAgLTEwNyw3ICsxMDcsNyBAQCBz
dHJ1Y3QgQnl0ZVRlcm0gewogICAgIGJvb2wgbV9pbnZlcnQgOiAxOwogICAgIGludCBpbnB1dFBv
c2l0aW9uOwogCi0gICAgQnl0ZVRlcm0oVUNoYXIgY2gsIGludCBpbnB1dFBvcywgdW5zaWduZWQg
ZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVh
bnRpdHlUeXBlKQorICAgIEJ5dGVUZXJtKFVDaGFyIGNoLCBpbnQgaW5wdXRQb3MsIHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZp
ZXJUeXBlIHF1YW50aXR5VHlwZSkKICAgICAgICAgOiBmcmFtZUxvY2F0aW9uKGZyYW1lTG9jYXRp
b24pCiAgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQogICAgICAgICAsIG1faW52ZXJ0KGZhbHNl
KQpAQCAtMTI2LDExICsxMjYsMTEgQEAgc3RydWN0IEJ5dGVUZXJtIHsKIAogICAgICAgICBhdG9t
LnBhdHRlcm5DaGFyYWN0ZXIgPSBjaDsKICAgICAgICAgYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFu
dGl0eVR5cGU7Ci0gICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7Cisg
ICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAg
IGlucHV0UG9zaXRpb24gPSBpbnB1dFBvczsKICAgICB9CiAKLSAgICBCeXRlVGVybShVQ2hhciBs
bywgVUNoYXIgaGksIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWdu
ZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIEJ5dGVU
ZXJtKFVDaGFyIGxvLCBVQ2hhciBoaSwgaW50IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFu
dGl0eVR5cGUpCiAgICAgICAgIDogZnJhbWVMb2NhdGlvbihmcmFtZUxvY2F0aW9uKQogICAgICAg
ICAsIG1fY2FwdHVyZShmYWxzZSkKICAgICAgICAgLCBtX2ludmVydChmYWxzZSkKQEAgLTE1MCw3
ICsxNTAsNyBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgICAgICBhdG9tLmNhc2VkQ2hhcmFjdGVy
LmxvID0gbG87CiAgICAgICAgIGF0b20uY2FzZWRDaGFyYWN0ZXIuaGkgPSBoaTsKICAgICAgICAg
YXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7Ci0gICAgICAgIGF0b20ucXVhbnRpdHlD
b3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50
aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIGlucHV0UG9zaXRpb24gPSBpbnB1dFBvczsKICAgICB9
CiAKQEAgLTIwNCwxNyArMjA0LDE3IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIHJldHVy
biB0ZXJtOwogICAgIH0KIAotICAgIHN0YXRpYyBCeXRlVGVybSBDaGVja0lucHV0KHVuc2lnbmVk
IGNvdW50KQorICAgIHN0YXRpYyBCeXRlVGVybSBDaGVja0lucHV0KENoZWNrZWQ8dW5zaWduZWQ+
IGNvdW50KQogICAgIHsKICAgICAgICAgQnl0ZVRlcm0gdGVybShUeXBlQ2hlY2tJbnB1dCk7Ci0g
ICAgICAgIHRlcm0uY2hlY2tJbnB1dENvdW50ID0gY291bnQ7CisgICAgICAgIHRlcm0uY2hlY2tJ
bnB1dENvdW50ID0gY291bnQuZ2V0KCk7CiAgICAgICAgIHJldHVybiB0ZXJtOwogICAgIH0KIAot
ICAgIHN0YXRpYyBCeXRlVGVybSBVbmNoZWNrSW5wdXQodW5zaWduZWQgY291bnQpCisgICAgc3Rh
dGljIEJ5dGVUZXJtIFVuY2hlY2tJbnB1dChDaGVja2VkPHVuc2lnbmVkPiBjb3VudCkKICAgICB7
CiAgICAgICAgIEJ5dGVUZXJtIHRlcm0oVHlwZVVuY2hlY2tJbnB1dCk7Ci0gICAgICAgIHRlcm0u
Y2hlY2tJbnB1dENvdW50ID0gY291bnQ7CisgICAgICAgIHRlcm0uY2hlY2tJbnB1dENvdW50ID0g
Y291bnQuZ2V0KCk7CiAgICAgICAgIHJldHVybiB0ZXJtOwogICAgIH0KICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggOGQ1MzQ0ZjdkMGEzOTQwNGRiYzBjN2Vi
MDA0MWI5MzUxNjcwM2M0Yy4uNDA0NTZlMGQ0NGQzZDAzZjljNzg4NmU2ZGMwNTM4OTBjODFkZjkx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTU2MCw3ICs1NjAs
NyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAg
ICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWQpCiAgICAgICAgICAg
ICAgICAgbWF0Y2hEZXN0LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAKLSAgICAgICAgICAgIHJl
YWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpLCBjaGFyYWN0ZXIp
OworICAgICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVj
a2VkLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0
ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKICAgICAg
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTcxNiwxMCArNzE2LDEwIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CiAKICAgICAgICAgbW92ZShp
bmRleCwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5
Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgc3ViMzIoSW1tMzIodGVybS0+cXVhbnRp
dHlDb3VudC5nZXQoKSksIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIExhYmVsIGxvb3AodGhp
cyk7Ci0gICAgICAgIEJhc2VJbmRleCBhZGRyZXNzKGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1l
c1R3bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQgKyB0ZXJtLT5xdWFudGl0eUNv
dW50KSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwg
Y291bnRSZWdpc3RlciwgVGltZXNUd28sICgodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tl
ZCArIENoZWNrZWQ8aW50Pih0ZXJtLT5xdWFudGl0eUNvdW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihVQ2hhcikpKS5nZXQoKSk7CiAKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9y
ZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewogICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3Ms
IGNoYXJhY3Rlcik7CkBAIC03NjUsNyArNzY1LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCA9
PSBxdWFudGlmeUluZmluaXRlKQogICAgICAgICAgICAganVtcChsb29wKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRl
cm0tPnF1YW50aXR5Q291bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBicmFu
Y2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC5n
ZXQoKSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKIAogICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMp
OwogICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwpAQCAtODE3LDcgKzgxNyw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKIAogICAgICAgICBu
b25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgbm9uR3Jl
ZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0
ZXJtLT5xdWFudGl0eUNvdW50KSkpOworICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNv
dW50LmdldCgpKSkpOwogICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FT
Q0lJQWxwaGEoY2gpKSB7CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9z
aXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBvcjMyKFRydXN0ZWRJ
bW0zMigzMiksIGNoYXJhY3Rlcik7CkBAIC04NDUsNyArODQ1LDcgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBjb25zdCBSZWdpc3RlcklE
IGNoYXJhY3RlciA9IHJlZ1QwOwogCiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAg
ICAgcmVhZENoYXJhY3RlcigodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCksIGNoYXJh
Y3Rlcik7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hl
Y2tlZCwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIs
IG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0ZXJtLT5p
bnZlcnQoKSkKQEAgLTg2OSwxMSArODY5LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lz
dGVyID0gcmVnVDE7CiAKICAgICAgICAgbW92ZShpbmRleCwgY291bnRSZWdpc3Rlcik7Ci0gICAg
ICAgIHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAg
ICAgICAgc3ViMzIoSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC5nZXQoKSksIGNvdW50UmVnaXN0
ZXIpOwogCiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG1hdGNo
RGVzdDsKLSAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGlt
ZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgdGVybS0+cXVhbnRpdHlD
b3VudCkgKiBzaXplb2YoVUNoYXIpKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgbG9hZDE2KEJhc2VJ
bmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sICgodGVybS0+aW5wdXRQb3NpdGlv
biAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50Pih0ZXJtLT5xdWFudGl0eUNvdW50KSkgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihVQ2hhcikpKS5nZXQoKSksIGNoYXJhY3Rlcik7CiAgICAgICAg
IG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHRlcm0tPmNoYXJhY3Rl
ckNsYXNzKTsKIAogICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCkBAIC05MTksNyArOTE5LDcg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIGluZGV4KTsKICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQg
IT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNv
dW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpKS5saW5rVG8obG9vcCwgdGhp
cyk7CisgICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIo
dGVybS0+cXVhbnRpdHlDb3VudC5nZXQoKSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IGp1bXAobG9vcCk7CkBAIC05NzIsNyArOTcyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1l
TG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFw
cGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCkp
KTsKKyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3Vu
dFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LmdldCgpKSkpOwogCiAgICAgICAg
IEp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBv
c2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyclBhdHRlcm4uY3BwCmluZGV4IGZjOGU4ZWUwMGQ5YzU4YmJlYmFkZjAyYmU2ZGRhOWI0
MjYwMjViNTAuLjJiYmNlZTI5MjQwYmFmODEyNjQxNGFjMGUzMTU3MjI1YjNiNDFlZGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKQEAgLTUxMSw3ICs1MTEs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2V0dXBBbHRlcm5hdGl2ZU9mZnNldHMoUGF0dGVy
bkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSwgdW5zaWduZWQgY3VycmVudENhbGxGcmFtZVNpemUs
IHVuc2lnbmVkIGluaXRpYWxJbnB1dFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgYWx0ZXJuYXRp
dmUtPm1faGFzRml4ZWRTaXplID0gdHJ1ZTsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudElucHV0
UG9zaXRpb24gPSBpbml0aWFsSW5wdXRQb3NpdGlvbjsKKyAgICAgICAgQ2hlY2tlZDx1bnNpZ25l
ZD4gY3VycmVudElucHV0UG9zaXRpb24gPSBpbml0aWFsSW5wdXRQb3NpdGlvbjsKIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmUtPm1fdGVybXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gYWx0ZXJuYXRpdmUtPm1fdGVy
bXNbaV07CkBAIC01MjAsMTEgKzUyMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIFBh
dHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZUFzc2VydGlvbkVPTDoKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVB
c3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAgICAgICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9u
ID0gY3VycmVudElucHV0UG9zaXRpb247CisgICAgICAgICAgICAgICAgdGVybS5pbnB1dFBvc2l0
aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVmZXJlbmNlOgotICAg
ICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uOwor
ICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9u
LmdldCgpOwogICAgICAgICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlvbiA9IGN1cnJlbnRDYWxs
RnJhbWVTaXplOwogICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFlhcnJT
dGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U7CiAgICAgICAgICAgICAgICAg
YWx0ZXJuYXRpdmUtPm1faGFzRml4ZWRTaXplID0gZmFsc2U7CkBAIC01MzQsNyArNTM0LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFBhdHRl
cm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcjoKLSAgICAgICAgICAgICAgICB0ZXJtLmlucHV0
UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXJtLmlu
cHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAg
ICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgdGVybS5mcmFtZUxvY2F0aW9uID0gY3VycmVudENhbGxGcmFtZVNpemU7
CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFlhcnJTdGFja1Nw
YWNlRm9yQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI7CkBAIC01NDQsNyArNTQ0LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFBhdHRl
cm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3M6Ci0gICAgICAgICAgICAgICAgdGVybS5pbnB1dFBv
c2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb247CisgICAgICAgICAgICAgICAgdGVybS5pbnB1
dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKHRlcm0ucXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50KSB7CiAgICAgICAg
ICAgICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlvbiA9IGN1cnJlbnRDYWxsRnJhbWVTaXplOwog
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSArPSBZYXJyU3RhY2tTcGFj
ZUZvckJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczsKQEAgLTU1OSwxOCArNTU5LDE4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNvdW50ID09IDEgJiYgIXRl
cm0ucGFyZW50aGVzZXMuaXNDb3B5KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1
YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5m
b1BhcmVudGhlc2VzT25jZTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNp
emUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9u
LCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElucHV0UG9zaXRpb24pOworICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVwRGlzanVuY3Rpb25PZmZzZXRz
KHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDYWxsRnJhbWVTaXplLCBjdXJy
ZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHF1YW50
aXR5IGlzIGZpeGVkLCB0aGVuIHByZS1jaGVjayBpdHMgbWluaW11bSBzaXplLgogICAgICAgICAg
ICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW5wdXRQb3NpdGlvbiArPSB0ZXJtLnBh
cmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplOwotICAgICAgICAgICAgICAgICAg
ICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnBhcmVudGhlc2VzLmlzVGVybWluYWwp
IHsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgKz0gWWFyclN0YWNr
U3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDsKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJt
LnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElu
cHV0UG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBj
dXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFt
ZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0
aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3Np
dGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKLSAgICAgICAgICAg
ICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJlbnRoZXNlcy5kaXNqdW5j
dGlvbiwgMCwgY3VycmVudElucHV0UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICB0ZXJt
LmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJlbnRoZXNlcy5kaXNqdW5j
dGlvbiwgMCwgY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCkpOwogICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gRml4ZWQg
Y291bnQgb2YgMSBjb3VsZCBiZSBhY2NlcHRlZCwgaWYgdGhleSBoYXZlIGEgZml4ZWQgc2l6ZSAq
QU5EKiBpZiBhbGwgYWx0ZXJuYXRpdmVzIGFyZSBvZiB0aGUgc2FtZSBsZW5ndGguCkBAIC01Nzgs
OSArNTc4LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbjoKLSAgICAgICAg
ICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAg
ICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQo
KTsKICAgICAgICAgICAgICAgICB0ZXJtLmZyYW1lTG9jYXRpb24gPSBjdXJyZW50Q2FsbEZyYW1l
U2l6ZTsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVwRGlzanVu
Y3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDYWxsRnJh
bWVTaXplICsgWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGV0aWNhbEFzc2Vy
dGlvbiwgY3VycmVudElucHV0UG9zaXRpb24pOworICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxs
RnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUgKyBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFj
a0luZm9QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLCBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06
OlR5cGVEb3RTdGFyRW5jbG9zdXJlOgpAQCAtNTkwLDcgKzU5MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
ID0gY3VycmVudElucHV0UG9zaXRpb24gLSBpbml0aWFsSW5wdXRQb3NpdGlvbjsKKyAgICAgICAg
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPSAoY3VycmVudElucHV0UG9zaXRpb24gLSBpbml0
aWFsSW5wdXRQb3NpdGlvbikuZ2V0KCk7CiAgICAgICAgIHJldHVybiBjdXJyZW50Q2FsbEZyYW1l
U2l6ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJQYXR0ZXJuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCmlu
ZGV4IDk3YzM4NzA0MjVlZmM2N2RhNTQxOTRjZWFiZDczYzI2YjE3MzUxZTkuLmU0NjQ3OWVmNTlj
YjE0YjNhYThkNjA3Nzg1MzZjM2RmMDE0ZTdjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyclBhdHRlcm4uaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBZYXJyUGF0dGVybl9o
CiAKICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvVW5pY29kZS5oPgogCkBAIC0xMTcsNyArMTE4LDcgQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsK
ICAgICAgICAgfSBhbmNob3JzOwogICAgIH07CiAgICAgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlU
eXBlOwotICAgIHVuc2lnbmVkIHF1YW50aXR5Q291bnQ7CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4g
cXVhbnRpdHlDb3VudDsKICAgICBpbnQgaW5wdXRQb3NpdGlvbjsKICAgICB1bnNpZ25lZCBmcmFt
ZUxvY2F0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgxNGJiMjQ3NmJjZDBiODAwY2JlMWQ1Yzg0NDcy
NWRmOTdhOTcxMy4uNmFkNjE0MGU1MDEyY2Q4NGI0MzgyMDFiMmQwZjYwYmE0ZDY1ZWNmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNoZWNrZWQgYXJpdGhtZXRp
YworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwOTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBm
b3J3YXJkaW5nIGhlYWRlciBmb3IgQ2hlY2tlZEFyaXRobWV0aWMuaAorCisgICAgICAgICogRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL0NoZWNrZWRBcml0aG1ldGljLmg6IEFkZGVkLgorCiAyMDExLTA4
LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgVHlwZWRBcnJh
eXMgZG9uJ3QgZW5zdXJlIHRoYXQgZGVub3JtYWxpc2VkIHZhbHVlcyBhcmUgbm9ybWFsaXNlZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0NoZWNrZWRB
cml0aG1ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQ2hlY2tl
ZEFyaXRobWV0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzQ4YWU1MmVkOWI5MTM1ZDExOGNmNjkyY2M2Y2Zk
YzBhNDQ3MmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdl
YkNvcmVfRldEX0NoZWNrZWRBcml0aG1ldGljX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfQ2hlY2tl
ZEFyaXRobWV0aWNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBjMTM5OGQxN2Y5YzYxNTI5OTA3OGE3Y2FhNTkwMDgzMDEzNmIxYTk3Li5kZGNlMmE4
NTIyM2U4MGQwZWQwNTYzNWYyZTA2MGQ0MmQwYTA0ODk2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMzAg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgY2hlY2tlZCBhcml0aG1ldGljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NzA5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCB0ZXN0IGNhc2VzIGZvciBDaGVja2VkPD4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNw
cDogQWRkZWQuCisKIDIwMTEtMDgtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5j
b20+CiAKICAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hvdWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRo
IGFuIGVtcHR5IGNvb2tpZSBzdG9yZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3MjQ5MjM4
ODUyZmNiNGZjZDkzMzg5MGNiOWI0MjE1YWE0MzM0OGU3Li5mMjk0MWM4M2MxMjU3YTNhZjdlNzVl
M2E1OWZmMzEzM2NhYWUyZTllIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjEsNiArMjEs
NyBAQAogCQkzNzIwMEI5MjEzQTE2MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2ZXJzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzIwMEI5MTEzQTE2
MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2ZXJzZS5jcHAgKi87IH07CiAJCTRCRkRGRkE3MTMxNDc3
NkMwMDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJGREZGQTYxMzE0Nzc2QzAw
NjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi87IH07CiAJCTRC
RkRGRkE5MTMxNDc3NzcwMDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QkZERkZBODEzMTQ3
Nzc3MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwICovOyB9OworCQlBN0U2
OUI1RTE0MEMxMTcyMDAyMjM0MTIgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTY5QjVEMTQw
QzExNzIwMDIyMzQxMiAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovOyB9Owog
CQlCQzEzMTg4NTExNzExNEI2MDBCNjk3MjcgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEzMTg4NDExNzEx
NEI2MDBCNjk3MjcgLyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gKi87IH07CiAJCUJDMTMxQTlC
MTE3MTMxNjkwMEI2OTcyNyAvKiBtYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMxMzFBOUExMTcxMzE2OTAwQjY5NzI3IC8qIG1haW4ubW0gKi87
IH07CiAJCUJDMTMxQUE5MTE3MTMxRkMwMEI2OTcyNyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzFBQTgxMTcx
MzFGQzAwQjY5NzI3IC8qIFRlc3RzQ29udHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzQsNiArMTM1
LDcgQEAKIAkJNEJGREZGQTYxMzE0Nzc2QzAwNjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFu
ZGxlX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXRU
ZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QkZERkZBODEzMTQ3Nzc3MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGl0VGVzdFJlc3VsdE5v
ZGVIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZB
QTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKKwkJQTdFNjlCNUQxNDBDMTE3MjAwMjIzNDEyIC8qIENoZWNrZWRBcml0
aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzEzMTg4MzExNzExNEE4MDBCNjk3MjcgLyogUGxhdGZvcm1VdGlsaXRpZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1VdGlsaXRpZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMzE4ODQxMTcxMTRCNjAwQjY5NzI3IC8qIFBs
YXRmb3JtVXRpbGl0aWVzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUGxhdGZvcm1VdGlsaXRpZXNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMTMxQTlBMTE3MTMxNjkwMEI2OTcyNyAvKiBtYWluLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gbWFpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM1MCw2ICszNTIsNyBAQAogCQkJCUMwMTM2M0M3MTNDMzk5NzMwMEVGMzk2NCAvKiBT
dHJpbmdPcGVyYXRvcnMuY3BwICovLAogCQkJCUJDOTA5NjRCMTI1NTYxQkYwMDA4Mzc1NiAvKiBW
ZWN0b3JCYXNpYy5jcHAgKi8sCiAJCQkJMzcyMDBCOTExM0ExNjIzMDAwN0E0RkFEIC8qIFZlY3Rv
clJldmVyc2UuY3BwICovLAorCQkJCUE3RTY5QjVEMTQwQzExNzIwMDIyMzQxMiAvKiBDaGVja2Vk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBXVEY7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTUwLDYgKzU1Myw3IEBACiAJCQkJQzA4NTg3QkYx
M0ZFOTU2QzAwMUVGNEU1IC8qIFdlYktpdEFnbm9zdGljVGVzdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUMwODU4N0ZDMTNGRUMzOUIwMDFFRjRFNSAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzA4NTg4MDAxM0ZFQzNBNjAwMUVGNEU1IC8qIEluc3RhbmNl
TWV0aG9kU3dpenpsZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlBN0U2OUI1RTE0MEMxMTcyMDAy
MjM0MTIgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9DaGVja2VkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9DaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxZWRlMzZjM2YwODJiYzRmOTE1N2I1ZDg4Yzk5
MWZmZjA4NjE1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjZGVmaW5lIENoZWNrZWRBcml0aG1ldGljVGVz
dCh0eXBlLCBjb2VyY2VMaXRlcmFsLCBNaXhlZFNpZ25lZG5lc3NUZXN0KSBcCisgICAgVEVTVChX
VEYsIENoZWNrZWRfIyN0eXBlKSBcCisgICAgeyBcCisgICAgICAgIENoZWNrZWQ8dHlwZSwgUmVj
b3JkT3ZlcmZsb3c+IHZhbHVlOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDAp
LCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8
dHlwZT46Om1heCgpLCAodmFsdWUgKyBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptYXgoKSku
Z2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+Ojpt
YXgoKSwgKHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpICsgdmFsdWUpLmdldCgpKTsg
XAorICAgICAgICBFWFBFQ1RfRVEoc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWluKCksICh2
YWx1ZSArIHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1pbigpKS5nZXQoKSk7IFwKKyAgICAg
ICAgRVhQRUNUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1pbigpLCAoc3RkOjpudW1l
cmljX2xpbWl0czx0eXBlPjo6bWluKCkgKyB2YWx1ZSkuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVD
VF9FUShjb2VyY2VMaXRlcmFsKDApLCAodmFsdWUgKiBjb2VyY2VMaXRlcmFsKDApKS5nZXQoKSk7
IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksIChjb2VyY2VMaXRlcmFsKDAp
ICogdmFsdWUpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwg
KHZhbHVlICogdmFsdWUpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJh
bCgwKSwgKHZhbHVlIC0gY29lcmNlTGl0ZXJhbCgwKSkuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVD
VF9FUShjb2VyY2VMaXRlcmFsKDApLCAoY29lcmNlTGl0ZXJhbCgwKSAtIHZhbHVlKS5nZXQoKSk7
IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSAtIHZhbHVlKS5n
ZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSsrKS5n
ZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMSksICh2YWx1ZS0tKS5n
ZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMSksICgrK3ZhbHVlKS5n
ZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICgtLXZhbHVlKS5n
ZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMTApLCAodmFsdWUgKz0g
Y29lcmNlTGl0ZXJhbCgxMCkpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0
ZXJhbCgxMCksIHZhbHVlLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJh
bCgxMDApLCAodmFsdWUgKj0gY29lcmNlTGl0ZXJhbCgxMCkpLmdldCgpKTsgXAorICAgICAgICBF
WFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxMDApLCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAgICAgRVhQ
RUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSAtPSBjb2VyY2VMaXRlcmFsKDEwMCkpLmdl
dCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgdmFsdWUuZ2V0KCkp
OyBcCisgICAgICAgIHZhbHVlID0gMTA7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVy
YWwoMTApLCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwo
MCksICh2YWx1ZSAtIGNvZXJjZUxpdGVyYWwoMTApKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNU
X0VRKGNvZXJjZUxpdGVyYWwoMTApLCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAgICAgdmFsdWUgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptaW4oKTsgXAorICAgICAgICBFWFBFQ1RfRVEodHJ1
ZSwgKENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+KHZhbHVlIC0gY29lcmNlTGl0ZXJhbCgx
KSkpLmhhc092ZXJmbG93ZWQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGZhbHNlLCAodmFsdWUt
LSkuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFz
T3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlw
ZT46Om1heCgpOyBcCisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwgdmFsdWUuaGFzT3ZlcmZsb3dl
ZCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgKENoZWNrZWQ8dHlwZSwgUmVjb3JkT3Zl
cmZsb3c+KHZhbHVlICsgY29lcmNlTGl0ZXJhbCgxKSkpLmhhc092ZXJmbG93ZWQoKSk7IFwKKyAg
ICAgICAgRVhQRUNUX0VRKGZhbHNlLCAodmFsdWUrKykuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAg
ICAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICB2
YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpOyBcCisgICAgICAgIEVYUEVD
VF9FUSh0cnVlLCAodmFsdWUgKz0gY29lcmNlTGl0ZXJhbCgxKSkuaGFzT3ZlcmZsb3dlZCgpKTsg
XAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAg
ICAgICB2YWx1ZSA9IDEwOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VR
KGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSArIC0xMCkuZ2V0KCkpKTsgXAorICAgICAgICBNaXhl
ZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSgwVSwgKHZhbHVlIC0gMTBVKS5nZXQoKSkpOyBcCisg
ICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICgt
MTAgKyB2YWx1ZSkuZ2V0KCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVD
VF9FUSgwVSwgKDEwVSAtIHZhbHVlKS5nZXQoKSkpOyBcCisgICAgICAgIHZhbHVlID0gc3RkOjpu
dW1lcmljX2xpbWl0czx0eXBlPjo6bWluKCk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVz
dChFWFBFQ1RfRVEodHJ1ZSwgKENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+KHZhbHVlIC0g
MSkpLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQ
RUNUX0VRKGZhbHNlLCAodmFsdWUtLSkuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4
ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7
IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptYXgoKTsgXAor
ICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUShmYWxzZSwgdmFsdWUuaGFzT3Zl
cmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1
ZSwgKENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+KHZhbHVlICsgMSkpLmhhc092ZXJmbG93
ZWQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGZhbHNlLCAo
dmFsdWUrKykuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVz
dChFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgdmFs
dWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptYXgoKTsgXAorICAgICAgICBNaXhlZFNp
Z25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCAodmFsdWUgKz0gMSkuaGFzT3ZlcmZsb3dlZCgp
KSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUu
aGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHR5cGU+OjptaW4oKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0
cnVlLCAodmFsdWUgLSAxVSkuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWdu
ZWRuZXNzVGVzdChFWFBFQ1RfRVEoZmFsc2UsICh2YWx1ZS0tKS5oYXNPdmVyZmxvd2VkKCkpKTsg
XAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNP
dmVyZmxvd2VkKCkpKTsgXAorICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlw
ZT46Om1heCgpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGZhbHNl
LCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0
KEVYUEVDVF9FUSh0cnVlLCAoQ2hlY2tlZDx0eXBlLCBSZWNvcmRPdmVyZmxvdz4odmFsdWUgKyAx
VSkpLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQ
RUNUX0VRKGZhbHNlLCAodmFsdWUrKykuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4
ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7
IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptYXgoKTsgXAor
ICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCAodmFsdWUgKz0gMVUp
Lmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNU
X0VRKHRydWUsIHZhbHVlLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgfQorCisjZGVmaW5lIENv
ZXJjZUxpdGVyYWxUb1Vuc2lnbmVkKHgpIHgjI1UKKyNkZWZpbmUgQ29lcmNlTGl0ZXJhbE5vcCh4
KSB4CisjZGVmaW5lIEFsbG93TWl4ZWRTaWduZWRuZXNzVGVzdCh4KSB4CisjZGVmaW5lIElnbm9y
ZU1peGVkU2lnbmVkbmVzc1Rlc3QoeCkKK0NoZWNrZWRBcml0aG1ldGljVGVzdChpbnQ4X3QsIENv
ZXJjZUxpdGVyYWxOb3AsIElnbm9yZU1peGVkU2lnbmVkbmVzc1Rlc3QpCitDaGVja2VkQXJpdGht
ZXRpY1Rlc3QoaW50MTZfdCwgQ29lcmNlTGl0ZXJhbE5vcCwgSWdub3JlTWl4ZWRTaWduZWRuZXNz
VGVzdCkKK0NoZWNrZWRBcml0aG1ldGljVGVzdChpbnQzMl90LCBDb2VyY2VMaXRlcmFsTm9wLCBB
bGxvd01peGVkU2lnbmVkbmVzc1Rlc3QpCitDaGVja2VkQXJpdGhtZXRpY1Rlc3QodWludDMyX3Qs
IENvZXJjZUxpdGVyYWxUb1Vuc2lnbmVkLCBBbGxvd01peGVkU2lnbmVkbmVzc1Rlc3QpCitDaGVj
a2VkQXJpdGhtZXRpY1Rlc3QoaW50NjRfdCwgQ29lcmNlTGl0ZXJhbE5vcCwgSWdub3JlTWl4ZWRT
aWduZWRuZXNzVGVzdCkKK0NoZWNrZWRBcml0aG1ldGljVGVzdCh1aW50NjRfdCwgQ29lcmNlTGl0
ZXJhbFRvVW5zaWduZWQsIElnbm9yZU1peGVkU2lnbmVkbmVzc1Rlc3QpCisKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105713</attachid>
            <date>2011-08-30 15:59:06 -0700</date>
            <delta_ts>2011-08-31 11:22:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67095-20110830155905.patch</filename>
            <type>text/plain</type>
            <size>66732</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwOTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVj
M2JiYzJlY2FhZDAzN2Q2NjBmMTcyY2IyNjQxMDQwMTcwMmNiNDMuLmQ1YjM2MzlmNDM0NDcwODlj
YzZhOTVhZmIwZWZjYzNmYzRlYzYyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDkxIEBACiAyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
KyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNoZWNrZWQgYXJpdGhtZXRpYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwOTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjaGVja2VkIGFyaXRobWV0
aWMgY2xhc3MgQ2hlY2tlZDxUPiB0aGF0IHByb3ZpZGVzIG92ZXJmbG93LXNhZmUKKyAgICAgICAg
YXJpdGhtZXRpYyBvdmVyIGFsbCBpbnRlZ3JhbCB0eXBlcy4gIENoZWNrZWQ8VD4gc3VwcG9ydHMg
YWRkaXRpb24sIHN1YnRyYWN0aW9uCisgICAgICAgIGFuZCBtdWx0aXBsaWNhdGlvbiwgYWxvbmcg
d2l0aCAiYm9vbCIgY29udmVyc2lvbnMgYW5kIGVxdWFsaXR5IG9wZXJhdG9ycy4KKworICAgICAg
ICBDaGVja2VkPD4gY2FuIGJlIHVzZWQgaW4gZWl0aGVyIENSQVNIKCkgb24gb3ZlcmZsb3cgb3Ig
ZGVsYXllZCBmYWlsdXJlIG1vZGVzLAorICAgICAgICBhbHRob3VnaCB0aGUgZGVmYXVsdCBpcyB0
byBDUkFTSCgpLgorCisgICAgICAgIFRvIGVuc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSBpbiB1
c2UgKHJhdGhlciB0aGFuIGNoZWNraW5nIGluIGRlYWQgY29kZSkgSSd2ZQorICAgICAgICBtYWRl
IGEgY291cGxlIG9mIHByb3BlcnRpZXMgaW4gWUFSUiB1c2UgQ2hlY2tlZDxpbnQ+IGFuZCBDaGVj
a2VkPHVuc2lnbmVkPgorICAgICAgICBpbnN0ZWFkIG9mIHJhdyB2YWx1ZSBhcml0aG1ldGljLiAg
VGhpcyBoYXMgcmVzdWx0ZWQgaW4gYSBtb2RlcmF0ZSBzZXQgb2YgY2hhbmdlcywKKyAgICAgICAg
dG8gWUFSUiAtIG1vc3RseSBhZGRpbmcgLmdldCgpIGNhbGxzLCBidXQgYSBjb3VwbGUgb2YgY2Fz
dHMgZnJvbSB1bnNpZ25lZCBsb25nCisgICAgICAgIHRvIHVuc2lnbmVkIGZvciBzb21lIHVzZXMg
b2Ygc2l6ZW9mLCBhcyBDaGVja2VkPD4gY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQKKyAgICAg
ICAgbWl4ZWQgc2lnbmVkLW5lc3Mgb2YgdHlwZXMgd2lkZXIgdGhhdCAzMiBiaXRzLgorCisgICAg
ICAgIEhhcHBpbHkgdGhlIGluY3JlYXNlZCB0eXBlIHNhZmV0eSBvZiBDaGVja2VkPD4gbWVhbnMg
dGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0bworICAgICAgICBhY2NpZGVudGFsbHkgYXNzaWduIGF3
YXkgcHJlY2lzaW9uLCBub3IgYWNjaWRlbnRhbGx5IGNhbGwgaW50ZWdlciBvdmVybG9hZCBvZgor
ICAgICAgICBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIGJvb2wgdmVyc2lvbi4KKworICAgICAg
ICBObyBtZWFzdXJhYmxlIHJlZ3Jlc3Npb24gaW4gcGVyZm9ybWFuY2UsIGFuZCBTdW5TcGlkZXIg
Y2xhaW1zIHRoaXMgcGF0Y2ggdG8gYmUKKyAgICAgICAgYSBwcm9ncmVzc2lvbiBvZiAwLjMlLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q3Jh
c2hPbk92ZXJmbG93OjpvdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93
OjpjbGVhck92ZXJmbG93KToKKyAgICAgICAgKFdURjo6Q3Jhc2hPbk92ZXJmbG93OjpoYXNPdmVy
Zmxvd2VkKToKKyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6OlJlY29yZE92ZXJmbG93KToK
KyAgICAgICAgKFdURjo6UmVjb3JkT3ZlcmZsb3c6Om92ZXJmbG93ZWQpOgorICAgICAgICAoV1RG
OjpSZWNvcmRPdmVyZmxvdzo6Y2xlYXJPdmVyZmxvdyk6CisgICAgICAgIChXVEY6OlJlY29yZE92
ZXJmbG93OjpoYXNPdmVyZmxvd2VkKToKKyAgICAgICAgKFdURjo6aXNJbkJvdW5kcyk6CisgICAg
ICAgIChXVEY6OnNhZmVBZGQpOgorICAgICAgICAoV1RGOjpzYWZlU3ViKToKKyAgICAgICAgKFdU
Rjo6c2FmZU11bHRpcGx5KToKKyAgICAgICAgKFdURjo6c2FmZUVxdWFscyk6CisgICAgICAgIChX
VEY6OndvcmtBcm91bmRDbGFuZ0J1Zyk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6OkNoZWNrZWQp
OgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDaGVj
a2VkOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3ItLSk6Cisg
ICAgICAgIChXVEY6OkNoZWNrZWQ6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkNoZWNrZWQ6
Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6
Z2V0KToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OkNoZWNrZWQ6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpDaGVja2VkOjpvcGVyYXRvcio9
KToKKyAgICAgICAgKFdURjo6Q2hlY2tlZDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkNo
ZWNrZWQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAo
V1RGOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAqIHlh
cnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tUGF0dGVybkNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxl
cjo6YXRvbUNoYXJhY3RlckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tQmFja1JlZmVyZW5jZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6
YXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRl
Q29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc09uY2VFbmQpOgorICAgICAgICAoSlND
OjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc1Rlcm1pbmFsRW5kKToKKyAgICAg
ICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVy
bTo6Qnl0ZVRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6Q2hlY2tJbnB1dCk6
CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpVbmNoZWNrSW5wdXQpOgorICAgICAgICAq
IHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omdl
bmVyYXRlQXNzZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJy
R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkpOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJD
bGFzc09uY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUNo
YXJhY3RlckNsYXNzRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpn
ZW5lcmF0ZUNoYXJhY3RlckNsYXNzR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkpOgorICAgICAgICAqIHlh
cnIvWWFyclBhdHRlcm4uY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0
cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyk6CisgICAgICAgICogeWFyci9ZYXJyUGF0
dGVybi5oOgorCisyMDExLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
ICAgICAgICAgVHlwZWRBcnJheXMgZG9uJ3QgZW5zdXJlIHRoYXQgZGVub3JtYWxpc2VkIHZhbHVl
cyBhcmUgbm9ybWFsaXNlZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjcxNzgKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBjMGM2YjcwM2UzYzVlMGQ3ZjY2YjFhZTg0YzQ5YWU3ZGEzMzI5NzZhLi42ZDJlMjdk
MmI3YmJjYmJmZGNjOTM2ODY1ZjhlNTUyNTZjN2I4ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDU5LDYgKzQ1OSw3IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxv
Y2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQ29tcGlsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJl
ZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DcnlwdG9ncmFwaGljYWxs
eVJhbmRvbU51bWJlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQppbmRleCA2MTIwNDkyZTI5Mjg0NjI5M2IyNTM4MTNjMjk4ZDQxYThiZmZiMzRkLi4yODA3
MTMyNTVkZjM2MGMwYmFmNGQ1NmVlYmI1MTQzNjliYzZmNzg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMTQwLDYgKzE0MCw3IEBACiAgICAgICAgICAg
ICAnd3RmL0Jsb29tRmlsdGVyLmgnLAogICAgICAgICAgICAgJ3d0Zi9CdW1wUG9pbnRlckFsbG9j
YXRvci5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmgnLAorICAgICAgICAgICAgJ3d0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oJywKICAgICAgICAgICAgICd3dGYvQ29tcGlsZXIuaCcsCiAg
ICAgICAgICAgICAnd3RmL0NvbXBsZXguaCcsCiAgICAgICAgICAgICAnd3RmL0Nyb3NzVGhyZWFk
UmVmQ291bnRlZC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDM0OGMyNmYwMTk4MWQxMzk3
NGI0ZWIzYjc1M2EyYzk5OWMyZjhiMmQuLmEzODg5ODhmN2E2ZGQ3OGUyNThkMjk5YjFhMzhkMWJj
Y2Y3OGM3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtNTY1LDYgKzU2NSwxMCBAQAogCQkJ
PgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDaGVja2Vk
QXJpdGhtZXRpYy5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHd0ZlxDb21waWxlci5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGNiNjY3ZDhiYWMyZWExNjE5OWU4NjZlMDRlOGE1MTRmOTFhZDdmNDku
Ljc1MzdmNWNiZDE2NDU0OGE2NmI3MTJhZGViNGM2OGIwYTBkODM1NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00MjIsNiArNDIyLDcgQEAKIAkJQTdBMUY3QUMwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAq
LzsgfTsKIAkJQTdBMUY3QUQwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBMUY3QUIwRjI1MkIzQzAw
RTE4NEUyIC8qIEJ5dGVBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsg
fTsKKwkJQTdCQzBDODIxNDA2MDhCMDAwQjFCQjcxIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0JDMEM4MTE0MDYw
OEIwMDBCMUJCNzEgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyog
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAgKi87IH07CiAJCUE3QzQwQzBBMTMwQjA1N0QwMEQwMDJBMSAvKiBCbG9j
a1N0YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0M0MEMwNzEzMEIwNTdEMDBEMDAyQTEgLyogQmxvY2tTdGFjay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzQwQzBCMTMwQjA1N0QwMEQwMDJB
MSAvKiBTZW50aW5lbExpbmtlZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QzQwQzA4MTMwQjA1N0QwMEQwMDJBMSAvKiBTZW50aW5lbExpbmtl
ZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTE0OSw2ICsxMTUwLDcgQEAKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRh
eENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JE
QjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0JDMEM4MTE0MDYwOEIwMDBCMUJCNzEg
LyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2hlY2tlZEFyaXRobWV0aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUU4
QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAv
KiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gS2V5d29yZExvb2t1cEdlbmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdDMjI1Q0QxMzk5ODQ5QzAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2V5d29yZExvb2t1cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTY4Niw2ICsxNjg4LDcgQEAKIAkJCQk4NjY3NkQ0RDExRkVE
NTVEMDA0QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlBN0ExRjdBQTBG
MjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBN0ExRjdBQjBGMjUyQjND
MDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi8sCisJCQkJQTdCQzBDODExNDA2MDhCMDAwQjFCQjcx
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQkM2NkJBRTIxM0Y0OTI4RjAwQzIzRkFF
IC8qIENvbXBpbGVyLmggKi8sCiAJCQkJRkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBs
ZXguaCAqLywKIAkJCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi8sCkBAIC0yNjA4LDYgKzI2MTEsNyBAQAogCQkJCTg2NjczOUQyMTNCRkRFNzEw
MDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZE
RTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzY2QkFFNDEzRjQ5MkNDMDBDMjNGQUUgLyogQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE3QkMwQzgyMTQwNjA4QjAwMEIxQkI3MSAvKiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRBcml0
aG1ldGljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmVlMWQzZTMwZjY4ZWRjMzYwMDkwYjBlNDcxYzNlNDVmMTliZjNiYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaApAQCAtMCwwICsxLDY5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIENoZWNrZWRBcml0aG1ldGljX2gKKyNkZWZpbmUgQ2hlY2tl
ZEFyaXRobWV0aWNfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorCisjaW5jbHVkZSA8bGlt
aXRzPgorCisvKiBDaGVja2VkPFQ+CisgKgorICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIG1lY2hh
bmlzbSB0byBwZXJmb3JtIG92ZXJmbG93LXNhZmUgaW50ZWdlciBhcml0aG1ldGljCisgKiB3aXRo
b3V0IGhhdmluZyB0byBtYW51YWxseSBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBhbGwgdGhlIHJlcXVp
cmVkIGJvdW5kcyBjaGVja3MKKyAqIGRpcmVjdGx5IGluIHlvdXIgY29kZS4KKyAqCisgKiBUaGVy
ZSBhcmUgdHdvIG1vZGVzIG9mIG9wZXJhdGlvbjoKKyAqICAtIFRoZSBkZWZhdWx0IGlzIENoZWNr
ZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93PiwgYW5kIGNyYXNoZXMgYXQgdGhlIHBvaW50CisgKiAgICBh
bmQgb3ZlcmZsb3cgaGFzIG9jY3VycmVkLgorICogIC0gVGhlIGFsdGVybmF0aXZlIGlzIENoZWNr
ZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+LCB3aGljaCB1c2VzIGFuIGFkZGl0aW9uYWwKKyAqICAgIGJ5
dGUgb2Ygc3RvcmFnZSB0byB0cmFjayB3aGV0aGVyIGFuIG92ZXJmbG93IGhhcyBvY2N1cnJlZCwg
c3Vic2VxdWVudAorICogICAgdW5jaGVja2VkIG9wZXJhdGlvbnMgd2lsbCBjcmFzaCBpZiBhbiBv
dmVyZmxvdyBoYXMgb2NjdXJlZAorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIHByb3ZpZGUgYSBj
dXN0b20gb3ZlcmZsb3cgaGFuZGxlciwgaW4gd2hpY2ggY2FzZSB5b3UgbmVlZAorICogdG8gc3Vw
cG9ydCB0aGVzZSBmdW5jdGlvbnM6CisgKiAgLSB2b2lkIG92ZXJmbG93ZWQoKTsKKyAqICAgIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gb3BlcmF0aW9uIGhhcyBwcm9kdWNlZCBhbiBv
dmVyZmxvdy4KKyAqICAtIGJvb2wgaGFzT3ZlcmZsb3dlZCgpOworICogICAgVGhpcyBmdW5jdGlv
biBtdXN0IHJldHVybiB0cnVlIGlmIG92ZXJmbG93ZWQoKSBoYXMgYmVlbiBjYWxsZWQgb24gYW4K
KyAqICAgIGluc3RhbmNlIGFuZCBmYWxzZSBpZiBpdCBoYXMgbm90LgorICogIC0gdm9pZCBjbGVh
ck92ZXJmbG93KCk7CisgKiAgICBVc2VkIHRvIHJlc2V0IG92ZXJmbG93IHRyYWNraW5nIHdoZW4g
YSB2YWx1ZSBpcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoCisgKiAgICBhIG5ldyB2YWx1ZS4KKyAq
CisgKiBDaGVja2VkPFQ+IHdvcmtzIGZvciBhbGwgaW50ZWdlciB0eXBlcywgd2l0aCB0aGUgZm9s
bG93aW5nIGNhdmVhdHM6CisgKiAgLSBNaXhpbmcgc2lnbmVkbmVzcyBvZiBvcGVyYW5kcyBpcyBv
bmx5IHN1cHBvcnRlZCBmb3IgdHlwZXMgbmFycm93ZXIgdGhhbgorICogICAgNjRiaXRzLgorICog
IC0gSXQgZG9lcyBoYXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LCBzbyB0aWdodCBsb29wcyBtYXkg
d2FudCB0byBiZSBjYXJlZnVsCisgKiAgICB3aGVuIHVzaW5nIGl0LgorICoKKyAqLworCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgQ3Jhc2hPbk92ZXJmbG93IHsKK3Byb3RlY3RlZDoKKyAgICBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgb3ZlcmZsb3dlZCgpCisgICAgeworICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpIHsgfQorCitwdWJsaWM6
CisgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK307CisK
K2NsYXNzIFJlY29yZE92ZXJmbG93IHsKK3Byb3RlY3RlZDoKKyAgICBSZWNvcmRPdmVyZmxvdygp
CisgICAgICAgIDogbV9vdmVyZmxvd2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IG92ZXJmbG93ZWQoKQorICAgIHsKKyAgICAgICAgbV9vdmVyZmxvd2VkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIGNsZWFyT3ZlcmZsb3coKQorICAgIHsKKyAgICAgICAgbV9vdmVyZmxvd2Vk
ID0gZmFsc2U7CisgICAgfQorCitwdWJsaWM6CisgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVyZmxvd2VkOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgY2hh
ciBtX292ZXJmbG93ZWQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgY2xhc3MgT3ZlcmZs
b3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PiBjbGFzcyBDaGVja2VkOwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8VD4gPjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRh
cmdldCwgdHlwZW5hbWUgU291cmNlLCBib29sIHRhcmdldFNpZ25lZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VGFyZ2V0Pjo6aXNfc2lnbmVkLCBib29sIHNvdXJjZVNpZ25lZCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8U291cmNlPjo6aXNfc2lnbmVkPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNr
ZXI8VGFyZ2V0LCBTb3VyY2UsIGZhbHNlLCBmYWxzZT4geworICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIFNhbWUgc2lnbmVkbmVzcyBzbyBp
bXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gd2lsbCBhbHdheXMgaW5jcmVhc2UgcHJlY2lzaW9uCisg
ICAgICAgIC8vIHRvIHdpZGVzdCB0eXBlCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0
LCBTb3VyY2UsIHRydWUsIHRydWU+IHsKKyAgICBzdGF0aWMgYm9vbCBpbkJvdW5kcyhTb3VyY2Ug
dmFsdWUpCisgICAgeworICAgICAgICAvLyBTYW1lIHNpZ25lZG5lc3Mgc28gaW1wbGljaXQgdHlw
ZSBjb252ZXJzaW9uIHdpbGwgYWx3YXlzIGluY3JlYXNlIHByZWNpc2lvbgorICAgICAgICAvLyB0
byB3aWRlc3QgdHlwZQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUYXJnZXQ+
OjptaW4oKSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46
Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1l
IFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3VyY2UsIGZhbHNlLCB0cnVl
PiB7CisgICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgLy8gVGFyZ2V0IGlzIHVuc2lnbmVkIHNvIGFueSB2YWx1ZSBsZXNzIHRoYW4gemVybyBpcyBj
bGVhcmx5IHVuc2FmZQorICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAvLyBJZiBvdXIgKHVuc2lnbmVkKSBUYXJnZXQgaXMgdGhlIHNhbWUg
b3IgZ3JlYXRlciB3aWR0aCB3ZSBjYW4KKyAgICAgICAgLy8gY29udmVydCB2YWx1ZSB0byB0eXBl
IFRhcmdldCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24KKyAgICAgICAgaWYgKHNpemVvZihUYXJn
ZXQpID49IHNpemVvZihTb3VyY2UpKSAKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
YXJnZXQ+KHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOworICAg
ICAgICAvLyBUaGUgc2lnbmVkIFNvdXJjZSB0eXBlIGhhcyBncmVhdGVyIHByZWNpc2lvbiB0aGFu
IHRoZSB0YXJnZXQgc28KKyAgICAgICAgLy8gbWF4KFRhcmdldCkgLT4gU291cmNlIHdpbGwgd2lk
ZW4uCisgICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDxTb3VyY2U+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCkpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0
LCBTb3VyY2UsIHRydWUsIGZhbHNlPiB7CisgICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gU2lnbmVkIHRhcmdldCB3aXRoIGFuIHVuc2lnbmVk
IHNvdXJjZQorICAgICAgICBpZiAoc2l6ZW9mKFRhcmdldCkgPD0gc2l6ZW9mKFNvdXJjZSkpIAor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0PFNvdXJjZT4oc3RkOjpudW1l
cmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKSk7CisgICAgICAgIC8vIFRhcmdldCBpcyBXaWRlciB0
aGFuIFNvdXJjZSBzbyB3ZSdyZSBndWFyYW50ZWVkIHRvIGZpdCBhbnkgdmFsdWUgaW4KKyAgICAg
ICAgLy8gdW5zaWduZWQgU291cmNlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgVHlwZUNvbXBhcmUgewor
ICAgIHN0YXRpYyBjb25zdCBib29sIFNhbWVUeXBlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4gc3RydWN0IFR5cGVDb21wYXJlPFUsIFU+IHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBTYW1lVHlwZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0
eXBlbmFtZSBTb3VyY2UsIGJvb2wgU2FtZVR5cGUgPSBUeXBlQ29tcGFyZTxUYXJnZXQsIFNvdXJj
ZT46OlNhbWVUeXBlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tFbGlkZXI7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja0VsaWRlcjxUYXJn
ZXQsIFNvdXJjZSwgdHJ1ZT4geworICAgIHN0YXRpYyBib29sIGluQm91bmRzKFNvdXJjZSkgeyBy
ZXR1cm4gdHJ1ZTsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNv
dXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrRWxpZGVyPFRhcmdldCwgU291cmNlLCBmYWxzZT4gOiBw
dWJsaWMgQm91bmRzQ2hlY2tlcjxUYXJnZXQsIFNvdXJjZT4geworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbkJv
dW5kcyhTb3VyY2UgdmFsdWUpCit7CisgICAgcmV0dXJuIEJvdW5kc0NoZWNrRWxpZGVyPFRhcmdl
dCwgU291cmNlPjo6aW5Cb3VuZHModmFsdWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IFJlbW92ZUNoZWNrZWQgeworICAgIHR5cGVkZWYgVCBDbGVhblR5cGU7CisgICAgc3Rh
dGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOyAgICAKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENyYXNoT25PdmVy
Zmxvdz4gPiB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5
cGUgQ2xlYW5UeXBlOworICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0g
MDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVj
a2VkPFQsIFJlY29yZE92ZXJmbG93PiA+IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNo
ZWNrZWQ8VD46OkNsZWFuVHlwZSBDbGVhblR5cGU7CisgICAgc3RhdGljIGNvbnN0IENsZWFuVHlw
ZSBEZWZhdWx0VmFsdWUgPSAwOworfTsKKworLy8gVGhlIFJlc3VsdEJhc2UgYW5kIFNpZ25lZG5l
c3NTZWxlY3RvciBhcmUgdXNlZCB0byB3b3JrYXJvdW5kIHR5cGVvZiBub3QgYmVpbmcKKy8vIGF2
YWlsYWJsZSBpbiBNU1ZDCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgYm9vbCB1
SXNCaWdnZXIgPSAoc2l6ZW9mKFUpID4gc2l6ZW9mKFYpKSwgYm9vbCBzYW1lU2l6ZSA9IChzaXpl
b2YoVSkgPT0gc2l6ZW9mKFYpKT4gc3RydWN0IFJlc3VsdEJhc2U7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFJlc3VsdEJhc2U8VSwgViwgdHJ1ZSwgZmFsc2U+IHsK
KyAgICB0eXBlZGVmIFUgUmVzdWx0VHlwZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPiBzdHJ1Y3QgUmVzdWx0QmFzZTxVLCBWLCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0
eXBlZGVmIFYgUmVzdWx0VHlwZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVPiBzdHJ1Y3Qg
UmVzdWx0QmFzZTxVLCBVLCBmYWxzZSwgdHJ1ZT4geworICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBl
OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIGJvb2wgdUlzU2lnbmVk
ID0gc3RkOjpudW1lcmljX2xpbWl0czxVPjo6aXNfc2lnbmVkLCBib29sIHZJc1NpZ25lZCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8Vj46OmlzX3NpZ25lZD4gc3RydWN0IFNpZ25lZG5lc3NTZWxlY3Rv
cjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1Nl
bGVjdG9yPFUsIFYsIHRydWUsIHRydWU+IHsKKyAgICB0eXBlZGVmIFUgUmVzdWx0VHlwZTsKK307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1Nl
bGVjdG9yPFUsIFYsIGZhbHNlLCBmYWxzZT4geworICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBTaWduZWRuZXNz
U2VsZWN0b3I8VSwgViwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0eXBlZGVmIFYgUmVzdWx0VHlwZTsK
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVz
c1NlbGVjdG9yPFUsIFYsIGZhbHNlLCB0cnVlPiB7CisgICAgdHlwZWRlZiBVIFJlc3VsdFR5cGU7
Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFJlc3VsdEJh
c2U8VSwgViwgZmFsc2UsIHRydWU+IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFNpZ25lZG5lc3NT
ZWxlY3RvcjxVLCBWPjo6UmVzdWx0VHlwZSBSZXN1bHRUeXBlOworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHQgOiBSZXN1bHRCYXNlPHR5cGVuYW1l
IFJlbW92ZUNoZWNrZWQ8VT46OkNsZWFuVHlwZSwgdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxWPjo6
Q2xlYW5UeXBlPiB7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTEhTLCB0eXBlbmFtZSBSSFMs
IHR5cGVuYW1lIFJlc3VsdFR5cGUgPSB0eXBlbmFtZSBSZXN1bHQ8TEhTLCBSSFM+OjpSZXN1bHRU
eXBlLCAKKyAgICBib29sIGxoc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8TEhTPjo6aXNf
c2lnbmVkLCBib29sIHJoc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8UkhTPjo6aXNfc2ln
bmVkPiBzdHJ1Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBM
SFMsIHR5cGVuYW1lIFJIUywgdHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRobWV0aWNP
cGVyYXRpb25zPExIUywgUkhTLCBSZXN1bHRUeXBlLCB0cnVlLCB0cnVlPiB7CisgICAgLy8gTEhT
IGFuZCBSSFMgYXJlIHNpZ25lZCB0eXBlcworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uCisgICAg
c3RhdGljIGlubGluZSBib29sIHNpZ25zTWF0Y2goTEhTIGxocywgUkhTIHJocykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAobGhzIF4gcmhzKSA+PSAwOworICAgIH0KKworICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBhZGQoTEhTIGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VO
VVNFRF9SRVRVUk4KKyAgICB7CisgICAgICAgIGlmIChzaWduc01hdGNoKGxocywgcmhzKSkgewor
ICAgICAgICAgICAgaWYgKGxocyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51
bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSAtIHJocykgPCBsaHMpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgUmVzdWx0VHlwZSB0ZW1wID0gbGhzIC0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRU
eXBlPjo6bWluKCk7CisgICAgICAgICAgICAgICAgaWYgKHJocyA8IC10ZW1wKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gLy8gaWYg
dGhlIHNpZ25zIGRvIG5vdCBtYXRjaCB0aGlzIG9wZXJhdGlvbiBjYW4ndCBvdmVyZmxvdworICAg
ICAgICByZXN1bHQgPSBsaHMgKyByaHM7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoTEhTIGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYg
cmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KKyAgICB7CisgICAgICAgIGlmICghc2lnbnNNYXRj
aChsaHMsIHJocykpIHsKKyAgICAgICAgICAgIGlmIChsaHMgPj0gMCkgeworICAgICAgICAgICAg
ICAgIGlmIChsaHMgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSArIHJo
cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAocmhzID4gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRU
eXBlPjo6bWF4KCkgKyBsaHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBpZiB0aGUgc2lnbnMgbWF0Y2ggdGhpcyBvcGVyYXRp
b24gY2FuJ3Qgb3ZlcmZsb3cKKyAgICAgICAgcmVzdWx0ID0gbGhzIC0gcmhzOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHkoTEhT
IGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KKyAg
ICB7CisgICAgICAgIGlmIChzaWduc01hdGNoKGxocywgcmhzKSkgeworICAgICAgICAgICAgaWYg
KGxocyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGxocyAmJiAoc3RkOjpudW1lcmljX2xp
bWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLyBsaHMpIDwgcmhzKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChsaHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkgfHwgcmhzID09
IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGlt
aXRzPFJlc3VsdFR5cGU+OjptYXgoKSAvIC1saHMpIDwgLXJocykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGxocyA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocmhzICYmIGxocyA8IChz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSAvIHJocykpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGxocyAmJiByaHMgPCAoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6
bWluKCkgLyBsaHMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gbGhzICogcmhzOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxzKExIUyBs
aHMsIFJIUyByaHMpIHsgcmV0dXJuIGxocyA9PSByaHM7IH0KKworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIExIUywgdHlwZW5hbWUgUkhTLCB0eXBlbmFtZSBSZXN1bHRUeXBlPiBzdHJ1Y3QgQXJp
dGhtZXRpY09wZXJhdGlvbnM8TEhTLCBSSFMsIFJlc3VsdFR5cGUsIGZhbHNlLCBmYWxzZT4gewor
ICAgIC8vIExIUyBhbmQgUkhTIGFyZSB1bnNpZ25lZCB0eXBlcyBzbyBib3VuZHMgY2hlY2tzIGFy
ZSBuaWNlIGFuZCBlYXN5CisgICAgc3RhdGljIGlubGluZSBib29sIGFkZChMSFMgbGhzLCBSSFMg
cmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVSTgorICAgIHsKKyAgICAg
ICAgUmVzdWx0VHlwZSB0ZW1wID0gbGhzICsgcmhzOworICAgICAgICBpZiAodGVtcCA8IGxocykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gdGVtcDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIHN1YihMSFMg
bGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIFdBUk5fVU5VU0VEX1JFVFVSTgorICAg
IHsKKyAgICAgICAgUmVzdWx0VHlwZSB0ZW1wID0gbGhzIC0gcmhzOworICAgICAgICBpZiAodGVt
cCA+IGxocykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gdGVt
cDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29s
IG11bHRpcGx5KExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkgV0FSTl9VTlVT
RURfUkVUVVJOCisgICAgeworICAgICAgICBSZXN1bHRUeXBlIHRlbXAgPSBsaHMgKiByaHM7Cisg
ICAgICAgIGlmICh0ZW1wIDwgbGhzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXN1bHQgPSB0ZW1wOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgZXF1YWxzKExIUyBsaHMsIFJIUyByaHMpIHsgcmV0dXJuIGxocyA9PSBy
aHM7IH0KKworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGU+IHN0cnVjdCBBcml0
aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlLCB0cnVlLCBmYWxzZT4g
eworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGQoaW50NjRfdCBsaHMsIGludDY0X3QgcmhzLCBS
ZXN1bHRUeXBlJiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IHRlbXAgPSBsaHMgKyBy
aHM7CisgICAgICAgIGlmICh0ZW1wIDwgc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6
bWluKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh0ZW1wID4gc3Rk
OjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KHRlbXApOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSBib29s
IHN1YihpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIGludDY0X3QgdGVtcCA9IGxocyAtIHJoczsKKyAgICAgICAgaWYgKHRlbXAgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKHRlbXAgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5
cGU+OjptYXgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8UmVzdWx0VHlwZT4odGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBtdWx0aXBseShpbnQ2NF90IGxocywgaW50NjRf
dCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGludDY0X3QgdGVtcCA9
IGxocyAqIHJoczsKKyAgICAgICAgaWYgKHRlbXAgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3Vs
dFR5cGU+OjptaW4oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHRl
bXAgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVzdWx0VHlwZT4o
dGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbHMoaW50IGxocywgdW5zaWduZWQgcmhzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDY0X3Q+KGxocykgPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmhzKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRo
bWV0aWNPcGVyYXRpb25zPHVuc2lnbmVkLCBpbnQsIFJlc3VsdFR5cGUsIGZhbHNlLCB0cnVlPiB7
CisgICAgc3RhdGljIGlubGluZSBib29sIGFkZChpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJl
c3VsdFR5cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0
aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlPjo6YWRkKHJocywgbGhzLCByZXN1bHQpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgc3ViKGludDY0X3QgbGhzLCBpbnQ2
NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyaXRo
bWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+OjpzdWIobGhzLCByaHMs
IHJlc3VsdCk7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIG11bHRpcGx5KGludDY0
X3QgbGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+Ojpt
dWx0aXBseShyaHMsIGxocywgcmVzdWx0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJv
b2wgZXF1YWxzKHVuc2lnbmVkIGxocywgaW50IHJocykKKyAgICB7CisgICAgICAgIHJldHVybiBB
cml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlPjo6ZXF1YWxzKHJo
cywgbGhzKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgUj4gc3RhdGljIGlubGluZSBib29sIHNhZmVBZGQoVSBsaHMsIFYgcmhzLCBSJiBy
ZXN1bHQpCit7CisgICAgcmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPFUsIFYsIFI+OjphZGQo
bGhzLCByaHMsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBSPiBzdGF0aWMgaW5saW5lIGJvb2wgc2FmZVN1YihVIGxocywgViByaHMsIFIm
IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgViwgUj46OnN1
YihsaHMsIHJocywgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlTXVsdGlwbHkoVSBsaHMsIFYg
cmhzLCBSJiByZXN1bHQpCit7CisgICAgcmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPFUsIFYs
IFI+OjptdWx0aXBseShsaHMsIHJocywgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlRXF1YWxzKFUgbGhzLCBWIHJo
cykKK3sKKyAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgVj46OmVxdWFscyhsaHMs
IHJocyk7Cit9CisKK2VudW0gUmVzdWx0T3ZlcmZsb3dlZFRhZyB7IFJlc3VsdE92ZXJmbG93ZWQg
fTsKKyAgICAKKy8vIEZJWE1FOiBOZWVkZWQgdG8gd29ya2Fyb3VuZCBodHRwOi8vbGx2bS5vcmcv
YnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MDEKK3N0YXRpYyBpbmxpbmUgYm9vbCB3b3JrQXJvdW5k
Q2xhbmdCdWcoKSB7IHJldHVybiB0cnVlOyB9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBjbGFz
cyBPdmVyZmxvd0hhbmRsZXI+IGNsYXNzIENoZWNrZWQgOiBwdWJsaWMgT3ZlcmZsb3dIYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1QsIGNsYXNzIF9PdmVyZmxvd0hh
bmRsZXI+IGZyaWVuZCBjbGFzcyBDaGVja2VkOworICAgIENoZWNrZWQoKQorICAgICAgICA6IG1f
dmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgQ2hlY2tlZChSZXN1bHRPdmVyZmxvd2VkVGFn
KQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcyB3aGVuIGNsYW5nIGZpeGVzIGh0dHA6Ly9sbHZtLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9p
ZD0xMDgwMQorICAgICAgICBpZiAod29ya0Fyb3VuZENsYW5nQnVnKCkpCisgICAgICAgICAgICB0
aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IENo
ZWNrZWQoVSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghaXNJbkJvdW5kczxUPih2YWx1ZSkp
CisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUgPSBzdGF0
aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
PiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VCwgVj4mIHJocykKKyAgICAgICAgOiBtX3ZhbHVlKHJo
cy5tX3ZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmhz
KQorICAgICAgICA6IE92ZXJmbG93SGFuZGxlcihyaHMpCisgICAgeworICAgICAgICBpZiAoIWlz
SW5Cb3VuZHM8VD4ocmhzLm1fdmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgp
OworICAgICAgICBtX3ZhbHVlID0gcmhzLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VSwgVj4m
IHJocykKKyAgICB7CisgICAgICAgIGlmIChyaHMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAg
ICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8VD4ocmhzLm1f
dmFsdWUpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBtX3ZhbHVl
ID0gcmhzLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNrZWQmIG9wZXJhdG9y
PShDaGVja2VkIHJocykKKyAgICB7CisgICAgICAgIHRoaXMtPmNsZWFyT3ZlcmZsb3coKTsKKyAg
ICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxv
d2VkKCk7CisgICAgICAgIG1fdmFsdWUgPSByaHMubV92YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gY29uc3QgQ2hlY2tl
ZCYgb3BlcmF0b3I9KFUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSBDaGVj
a2VkKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+IGNvbnN0IENoZWNrZWQmIG9wZXJhdG9yPShjb25zdCBDaGVja2VkPFUsIFY+JiByaHMp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSBDaGVja2VkKHJocyk7CisgICAgfQorICAg
IAorICAgIC8vIHByZWZpeAorICAgIGNvbnN0IENoZWNrZWQmIG9wZXJhdG9yKysoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCisg
ICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIG1fdmFsdWUrKzsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICBjb25zdCBDaGVja2VkJiBvcGVyYXRv
ci0tKCkKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46Om1pbigpKQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICBtX3Zh
bHVlLS07CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgLy8gcG9zdGZp
eCBvcGVyYXRvcnMKKyAgICBjb25zdCBDaGVja2VkIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAg
ICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCisgICAg
ICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIHJldHVybiBDaGVja2VkKG1fdmFs
dWUrKyk7CisgICAgfQorICAgIAorICAgIGNvbnN0IENoZWNrZWQgb3BlcmF0b3ItLShpbnQpCisg
ICAgeworICAgICAgICBpZiAobV92YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4o
KSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuIENoZWNr
ZWQobV92YWx1ZS0tKTsKKyAgICB9CisgICAgCisgICAgLy8gQm9vbGVhbiBvcGVyYXRvcnMKKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhpcy0+aGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuICFtX3ZhbHVl
OworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCogKENoZWNrZWQ6OipVbnNwZWNpZmllZEJvb2xU
eXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgIHJldHVybiAobV92YWx1ZSkgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lm
aWVkQm9vbFR5cGUqPigxKSA6IDA7CisgICAgfQorCisgICAgLy8gVmFsdWUgYWNjZXNzb3JzLiBn
ZXQoKSB3aWxsIGNyYXNoIGlmIHRoZXJlJ3MgYmVlbiBhbiBvdmVyZmxvdy4KKyAgICBUIGdldCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorICAgIAorICAg
IGJvb2wgc2FmZUdldChUJiB2YWx1ZSkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOCisgICAgewor
ICAgICAgICB2YWx1ZSA9IG1fdmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzLT5oYXNPdmVyZmxv
d2VkKCk7CisgICAgfQorCisgICAgLy8gTXV0YXRpbmcgYXNzaWdubWVudAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKz0oVSByaHMpCisgICAgeworICAg
ICAgICBpZiAoIXNhZmVBZGQobV92YWx1ZSwgcmhzLCBtX3ZhbHVlKSkKKyAgICAgICAgICAgIHRo
aXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yLT0oVSByaHMpCisgICAg
eworICAgICAgICBpZiAoIXNhZmVTdWIobV92YWx1ZSwgcmhzLCBtX3ZhbHVlKSkKKyAgICAgICAg
ICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKj0oVSByaHMp
CisgICAgeworICAgICAgICBpZiAoIXNhZmVNdWx0aXBseShtX3ZhbHVlLCByaHMsIG1fdmFsdWUp
KQorICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25z
dCBDaGVja2VkIG9wZXJhdG9yKz0oQ2hlY2tlZDxVLCBWPiByaHMpCisgICAgeworICAgICAgICBp
ZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzICs9IHJocy5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yLT0oQ2hl
Y2tlZDxVLCBWPiByaHMpCisgICAgeworICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzIC09
IHJocy5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKj0oQ2hlY2tlZDxVLCBWPiByaHMpCisgICAgewor
ICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHRoaXMtPm92ZXJm
bG93ZWQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzICo9IHJocy5tX3ZhbHVlOworICAgIH0KKwor
ICAgIC8vIEVxdWFsaXR5IGNvbXBhcmlzb25zCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+IGJv
b2wgb3BlcmF0b3I9PShDaGVja2VkPFQsIFY+IHJocykKKyAgICB7CisgICAgICAgIHJldHVybiBn
ZXQoKSA9PSByaHMuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGJv
b2wgb3BlcmF0b3I9PShVIHJocykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLT5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CisgICAgICAgIHJldHVybiBz
YWZlRXF1YWxzKG1fdmFsdWUsIHJocyk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yPT0oQ2hlY2tlZDxVLCBW
PiByaHMpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCkgPT0gQ2hlY2tlZChyaHMuZ2V0KCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBib29sIG9wZXJhdG9yIT0oVSBy
aHMpCisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSByaHMpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICAvLyBEaXNhbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGZsb2F0aW5nIHBv
aW50IHRvIGludGVnZXIgdHlwZXMKKyAgICBDaGVja2VkKGZsb2F0KTsKKyAgICBDaGVja2VkKGRv
dWJsZSk7CisgICAgdm9pZCBvcGVyYXRvcj0oZmxvYXQpOworICAgIHZvaWQgb3BlcmF0b3I9KGRv
dWJsZSk7CisgICAgdm9pZCBvcGVyYXRvcis9KGZsb2F0KTsKKyAgICB2b2lkIG9wZXJhdG9yKz0o
ZG91YmxlKTsKKyAgICB2b2lkIG9wZXJhdG9yLT0oZmxvYXQpOworICAgIHZvaWQgb3BlcmF0b3It
PShkb3VibGUpOworICAgIFQgbV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tl
ZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3Bl
cmF0b3IrKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZs
b3dIYW5kbGVyPiByaHMpCit7CisgICAgVSB4ID0gMDsKKyAgICBWIHkgPSAwOworICAgIGJvb2wg
b3ZlcmZsb3dlZCA9IGxocy5zYWZlR2V0KHgpIHx8IHJocy5zYWZlR2V0KHkpOworICAgIHR5cGVu
YW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSByZXN1bHQ7CisgICAgb3ZlcmZsb3dlZCB8PSAh
c2FmZUFkZCh4LCB5LCByZXN1bHQpOworICAgIGlmIChvdmVyZmxvd2VkKQorICAgICAgICByZXR1
cm4gUmVzdWx0T3ZlcmZsb3dlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMg
aW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxv
d0hhbmRsZXI+IG9wZXJhdG9yLShDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBDaGVj
a2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAgIFUgeCA9IDA7CisgICAgViB5ID0g
MDsKKyAgICBib29sIG92ZXJmbG93ZWQgPSBsaHMuc2FmZUdldCh4KSB8fCByaHMuc2FmZUdldCh5
KTsKKyAgICB0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0OworICAgIG92
ZXJmbG93ZWQgfD0gIXNhZmVTdWIoeCwgeSwgcmVzdWx0KTsKKyAgICBpZiAob3ZlcmZsb3dlZCkK
KyAgICAgICAgcmV0dXJuIFJlc3VsdE92ZXJmbG93ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0
VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvciooQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRs
ZXI+IGxocywgQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAgICBVIHggPSAw
OworICAgIFYgeSA9IDA7CisgICAgYm9vbCBvdmVyZmxvd2VkID0gbGhzLnNhZmVHZXQoeCkgfHwg
cmhzLnNhZmVHZXQoeSk7CisgICAgdHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlIHJl
c3VsdDsKKyAgICBvdmVyZmxvd2VkIHw9ICFzYWZlTXVsdGlwbHkoeCwgeSwgcmVzdWx0KTsKKyAg
ICBpZiAob3ZlcmZsb3dlZCkKKyAgICAgICAgcmV0dXJuIFJlc3VsdE92ZXJmbG93ZWQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJl
c3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvcisoQ2hlY2tl
ZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywgViByaHMpCit7CisgICAgcmV0dXJuIGxocyArIENo
ZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPihyaHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENo
ZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+
IG9wZXJhdG9yLShDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBWIHJocykKK3sKKyAg
ICByZXR1cm4gbGhzIC0gQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+KHJocyk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUs
IE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBs
aHMsIFYgcmhzKQoreworICAgIHJldHVybiBsaHMgKiBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxl
cj4ocmhzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxV
LCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVyPiBvcGVyYXRvcisoVSBsaHMsIENoZWNr
ZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiByaHMpCit7CisgICAgcmV0dXJuIENoZWNrZWQ8VSwgT3Zl
cmZsb3dIYW5kbGVyPihsaHMpICsgcmhzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8
dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJh
dG9yLShVIGxocywgQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+IHJocykKK3sKKyAgICByZXR1
cm4gQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+KGxocykgLSByaHM7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRp
YyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJm
bG93SGFuZGxlcj4gb3BlcmF0b3IqKFUgbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4g
cmhzKQoreworICAgIHJldHVybiBDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4obGhzKSAqIHJo
czsKK30KKworfQorCit1c2luZyBXVEY6OkNoZWNrZWQ7Cit1c2luZyBXVEY6OlJlY29yZE92ZXJm
bG93OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJJbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJw
cmV0ZXIuY3BwCmluZGV4IDkwM2M2OTIyYWZjOGIzNGU1YmIwNjA1ZDFmYmI4MGRhYmZiYjE0OGMu
LjFhODdjZjczZmQ1OTgzNzU1NDliMjA0MDhiNGNmMjNkYTRmOTZhM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcApAQCAtMTQ5MSw3ICsxNDkx
LDcgQEAgcHVibGljOgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5
dGVUZXJtOjpXb3JkQm91bmRhcnkoaW52ZXJ0LCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBhdG9tUGF0dGVybkNoYXJhY3RlcihVQ2hhciBjaCwgaW50IGlucHV0UG9zaXRpb24s
IHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZp
ZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0b21QYXR0ZXJuQ2hhcmFjdGVyKFVDaGFy
IGNoLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1
bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAg
IHsKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UpIHsKICAgICAgICAgICAgIFVD
aGFyIGxvID0gVW5pY29kZTo6dG9Mb3dlcihjaCk7CkBAIC0xNTA2LDIyICsxNTA2LDIyIEBAIHB1
YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShj
aCwgaW5wdXRQb3NpdGlvbiwgZnJhbWVMb2NhdGlvbiwgcXVhbnRpdHlDb3VudCwgcXVhbnRpdHlU
eXBlKSk7CiAgICAgfQogCi0gICAgdm9pZCBhdG9tQ2hhcmFjdGVyQ2xhc3MoQ2hhcmFjdGVyQ2xh
c3MqIGNoYXJhY3RlckNsYXNzLCBib29sIGludmVydCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2ln
bmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBl
IHF1YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0b21DaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFz
cyogY2hhcmFjdGVyQ2xhc3MsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWdu
ZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRp
ZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zLmFwcGVuZChCeXRlVGVybShjaGFyYWN0ZXJDbGFzcywgaW52ZXJ0LCBpbnB1dFBvc2l0
aW9uKSk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0
aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50
OworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLnNpemUoKSAtIDFdLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7
CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXMuc2l6ZSgpIC0gMV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CiAgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgp
IC0gMV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBh
dG9tQmFja1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9u
LCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlm
aWVyVHlwZSBxdWFudGl0eVR5cGUpCisgICAgdm9pZCBhdG9tQmFja1JlZmVyZW5jZSh1bnNpZ25l
ZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
LCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0
eVR5cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVybklkKTsKIAogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpCYWNrUmVmZXJlbmNlKHN1
YnBhdHRlcm5JZCwgaW5wdXRQb3NpdGlvbikpOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uYXRvbS5xdWFudGl0
eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5hdG9tLnF1YW50aXR5Q291bnQg
PSBxdWFudGl0eUNvdW50LmdldCgpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmF0b20ucXVhbnRpdHlUeXBlID0g
cXVhbnRpdHlUeXBlOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9u
OwogICAgIH0KQEAgLTE1ODIsNyArMTU4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJyZW50
QWx0ZXJuYXRpdmVJbmRleCA9IGJlZ2luVGVybSArIDE7CiAgICAgfQogCi0gICAgdm9pZCBhdG9t
UGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZChpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJh
bWVMb2NhdGlvbiwgdW5zaWduZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRp
dHlUeXBlKQorICAgIHZvaWQgYXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQoaW50IGlucHV0
UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+IHF1YW50
aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKICAgICB7CiAgICAgICAgIHVu
c2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3RhY2soKTsKICAgICAgICAgY2xvc2VB
bHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKQEAgLTE1OTgsOSArMTU5OCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucGFyZW50aGVz
ZXNXaWR0aCA9IGVuZFRlcm0gLSBiZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tlbmRUZXJtXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKIAotICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5Q291bnQg
PSBxdWFudGl0eUNvdW50OworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5U
ZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50LmdldCgpOwogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1
YW50aXR5VHlwZTsKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0
b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0
aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50Lmdl
dCgpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFu
dGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CiAgICAgfQogCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRJbmRleF0uZnJhbWVM
b2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBhdG9tUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuRW5kKHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvc2l0
aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFu
dGlmaWVyVHlwZSBxdWFudGl0eVR5cGUsIHVuc2lnbmVkIGNhbGxGcmFtZVNpemUgPSAwKQorICAg
IHZvaWQgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkVuZCh1bnNpZ25lZCBsYXN0U3VicGF0dGVy
bklkLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1
bnNpZ25lZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlLCB1bnNp
Z25lZCBjYWxsRnJhbWVTaXplID0gMCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVy
bSA9IHBvcFBhcmVudGhlc2VzU3RhY2soKTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdp
blRlcm0gKyAxKTsKQEAgLTE3MDYsMTIgKzE3MDYsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fs
bFBhcmVudGhlc2VzSW5mby5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7CiAgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQ
YXJlbnRoZXNlc1N1YnBhdHRlcm4sIHN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlv
biwgY2FwdHVyZSwgaW5wdXRQb3NpdGlvbikpOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7Cisg
ICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlD
b3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwogICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5mcmFtZUxvY2F0aW9uID0gZnJh
bWVMb2NhdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoaW50
IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5
Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB2b2lkIGF0b21QYXJlbnRo
ZXNlc09uY2VFbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENo
ZWNrZWQ8dW5zaWduZWQ+IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlw
ZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3Rh
Y2soKTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKQEAgLTE3Mjcs
MTMgKzE3MjcsMTMgQEAgcHVibGljOgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
ZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAg
ICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBm
cmFtZUxvY2F0aW9uOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRl
cm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5
Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1d
LmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwotICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsK
KyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlD
b3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKICAgICB9CiAK
LSAgICB2b2lkIGF0b21QYXJlbnRoZXNlc1Rlcm1pbmFsRW5kKGludCBpbnB1dFBvc2l0aW9uLCB1
bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVy
VHlwZSBxdWFudGl0eVR5cGUpCisgICAgdm9pZCBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZChp
bnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgQ2hlY2tlZDx1bnNpZ25l
ZD4gcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgIHsKICAg
ICAgICAgdW5zaWduZWQgYmVnaW5UZXJtID0gcG9wUGFyZW50aGVzZXNTdGFjaygpOwogICAgICAg
ICBjbG9zZUFsdGVybmF0aXZlKGJlZ2luVGVybSArIDEpOwpAQCAtMTc0OSw5ICsxNzQ5LDkgQEAg
cHVibGljOgogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5w
YXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwog
Ci0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRp
dHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAg
ICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlU
eXBlID0gcXVhbnRpdHlUeXBlOwotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5k
VGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5
Q291bnQuZ2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5h
dG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmgKaW5kZXggNzhhOGYzNDM4OTM2NzQ0ZmI5
Mzk2ODYyNGMxMzdmMDVkNDUxMDA1OS4uOTIzZWNhMWRhMGYzYjVlMDE0M2VhZjdmYjdmNjc5ODgz
YTdmZDE3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVy
LmgKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgIGJvb2wgbV9pbnZl
cnQgOiAxOwogICAgIGludCBpbnB1dFBvc2l0aW9uOwogCi0gICAgQnl0ZVRlcm0oVUNoYXIgY2gs
IGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgcXVhbnRpdHlD
b3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQorICAgIEJ5dGVUZXJtKFVDaGFyIGNo
LCBpbnQgaW5wdXRQb3MsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIENoZWNrZWQ8dW5zaWduZWQ+
IHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKICAgICAgICAgOiBm
cmFtZUxvY2F0aW9uKGZyYW1lTG9jYXRpb24pCiAgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQog
ICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQpAQCAtMTI2LDExICsxMjYsMTEgQEAgc3RydWN0IEJ5
dGVUZXJtIHsKIAogICAgICAgICBhdG9tLnBhdHRlcm5DaGFyYWN0ZXIgPSBjaDsKICAgICAgICAg
YXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7Ci0gICAgICAgIGF0b20ucXVhbnRpdHlD
b3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50
aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIGlucHV0UG9zaXRpb24gPSBpbnB1dFBvczsKICAgICB9
CiAKLSAgICBCeXRlVGVybShVQ2hhciBsbywgVUNoYXIgaGksIGludCBpbnB1dFBvcywgdW5zaWdu
ZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUg
cXVhbnRpdHlUeXBlKQorICAgIEJ5dGVUZXJtKFVDaGFyIGxvLCBVQ2hhciBoaSwgaW50IGlucHV0
UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBDaGVja2VkPHVuc2lnbmVkPiBxdWFudGl0eUNv
dW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgICAgIDogZnJhbWVMb2NhdGlv
bihmcmFtZUxvY2F0aW9uKQogICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKICAgICAgICAgLCBt
X2ludmVydChmYWxzZSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAg
ICAgICBhdG9tLmNhc2VkQ2hhcmFjdGVyLmxvID0gbG87CiAgICAgICAgIGF0b20uY2FzZWRDaGFy
YWN0ZXIuaGkgPSBoaTsKICAgICAgICAgYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7
Ci0gICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAgIGF0
b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQuZ2V0KCk7CiAgICAgICAgIGlucHV0UG9z
aXRpb24gPSBpbnB1dFBvczsKICAgICB9CiAKQEAgLTIwNCwxNyArMjA0LDE3IEBAIHN0cnVjdCBC
eXRlVGVybSB7CiAgICAgICAgIHJldHVybiB0ZXJtOwogICAgIH0KIAotICAgIHN0YXRpYyBCeXRl
VGVybSBDaGVja0lucHV0KHVuc2lnbmVkIGNvdW50KQorICAgIHN0YXRpYyBCeXRlVGVybSBDaGVj
a0lucHV0KENoZWNrZWQ8dW5zaWduZWQ+IGNvdW50KQogICAgIHsKICAgICAgICAgQnl0ZVRlcm0g
dGVybShUeXBlQ2hlY2tJbnB1dCk7Ci0gICAgICAgIHRlcm0uY2hlY2tJbnB1dENvdW50ID0gY291
bnQ7CisgICAgICAgIHRlcm0uY2hlY2tJbnB1dENvdW50ID0gY291bnQuZ2V0KCk7CiAgICAgICAg
IHJldHVybiB0ZXJtOwogICAgIH0KIAotICAgIHN0YXRpYyBCeXRlVGVybSBVbmNoZWNrSW5wdXQo
dW5zaWduZWQgY291bnQpCisgICAgc3RhdGljIEJ5dGVUZXJtIFVuY2hlY2tJbnB1dChDaGVja2Vk
PHVuc2lnbmVkPiBjb3VudCkKICAgICB7CiAgICAgICAgIEJ5dGVUZXJtIHRlcm0oVHlwZVVuY2hl
Y2tJbnB1dCk7Ci0gICAgICAgIHRlcm0uY2hlY2tJbnB1dENvdW50ID0gY291bnQ7CisgICAgICAg
IHRlcm0uY2hlY2tJbnB1dENvdW50ID0gY291bnQuZ2V0KCk7CiAgICAgICAgIHJldHVybiB0ZXJt
OwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXgg
OGQ1MzQ0ZjdkMGEzOTQwNGRiYzBjN2ViMDA0MWI5MzUxNjcwM2M0Yy4uNDA0NTZlMGQ0NGQzZDAz
ZjljNzg4NmU2ZGMwNTM4OTBjODFkZjkxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAKQEAgLTU2MCw3ICs1NjAsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9
PSBtX2NoZWNrZWQpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChhdEVuZE9mSW5w
dXQoKSk7CiAKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24g
LSBtX2NoZWNrZWQpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJt
LT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xpbmVD
aGFyYWN0ZXJDbGFzcygpKTsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7
CiAKQEAgLTcxNiwxMCArNzE2LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZW1ibGVyIHsKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0g
cmVnVDE7CiAKICAgICAgICAgbW92ZShpbmRleCwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN1
YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAg
c3ViMzIoSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC5nZXQoKSksIGNvdW50UmVnaXN0ZXIpOwog
CiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7Ci0gICAgICAgIEJhc2VJbmRleCBhZGRyZXNzKGlu
cHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2No
ZWNrZWQgKyB0ZXJtLT5xdWFudGl0eUNvdW50KSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBC
YXNlSW5kZXggYWRkcmVzcyhpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sICgodGVybS0+
aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50Pih0ZXJtLT5xdWFudGl0eUNv
dW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihVQ2hhcikpKS5nZXQoKSk7CiAKICAgICAg
ICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewogICAg
ICAgICAgICAgbG9hZDE2KGFkZHJlc3MsIGNoYXJhY3Rlcik7CkBAIC03NjUsNyArNzY1LDcgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBp
ZiAodGVybS0+cXVhbnRpdHlDb3VudCA9PSBxdWFudGlmeUluZmluaXRlKQogICAgICAgICAgICAg
anVtcChsb29wKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWws
IGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpKS5saW5rVG8obG9vcCwg
dGhpcyk7CisgICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1t
MzIodGVybS0+cXVhbnRpdHlDb3VudC5nZXQoKSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKIAogICAg
ICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOwogICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgp
OwpAQCAtODE3LDcgKzgxNyw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZW1ibGVyIHsKIAogICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklu
cHV0KCkpOwogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmlu
aXRlKQotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFs
LCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkpOworICAgICAgICAg
ICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVy
LCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50LmdldCgpKSkpOwogICAgICAgICBpZiAobV9wYXR0
ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7CiAgICAgICAgICAgICByZWFk
Q2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CkBAIC04NDUsNyAr
ODQ1LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewog
ICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwogCiAgICAgICAgIEp1
bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgcmVhZENoYXJhY3RlcigodGVybS0+aW5wdXRQb3Np
dGlvbiAtIG1fY2hlY2tlZCksIGNoYXJhY3Rlcik7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVy
bS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hD
aGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3Mp
OwogCiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKQEAgLTg2OSwxMSArODY5LDExIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgY29u
c3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CiAKICAgICAgICAgbW92ZShpbmRl
eCwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291
bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgc3ViMzIoSW1tMzIodGVybS0+cXVhbnRpdHlD
b3VudC5nZXQoKSksIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7
CiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgbG9hZDE2KEJhc2VJbmRleChp
bnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9j
aGVja2VkICsgdGVybS0+cXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKSwgY2hhcmFjdGVy
KTsKKyAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNU
d28sICgodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCArIENoZWNrZWQ8aW50Pih0ZXJt
LT5xdWFudGl0eUNvdW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihVQ2hhcikpKS5nZXQo
KSksIGNoYXJhY3Rlcik7CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBt
YXRjaERlc3QsIHRlcm0tPmNoYXJhY3RlckNsYXNzKTsKIAogICAgICAgICBpZiAodGVybS0+aW52
ZXJ0KCkpCkBAIC05MTksNyArOTE5LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVn
aXN0ZXIpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAg
ICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5
Q291bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBicmFuY2gzMihOb3RFcXVh
bCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudC5nZXQoKSkpLmxpbmtU
byhsb29wLCB0aGlzKTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGp1bXAobG9vcCk7CkBAIC05NzIsNyArOTcyLDcgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBs
b2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwogCiAgICAg
ICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgIG5v
bkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgY291bnRSZWdpc3RlciwgSW1t
MzIodGVybS0+cXVhbnRpdHlDb3VudCkpKTsKKyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNv
dW50LmdldCgpKSkpOwogCiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgcmVh
ZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwCmluZGV4IGZjOGU4ZWUw
MGQ5YzU4YmJlYmFkZjAyYmU2ZGRhOWI0MjYwMjViNTAuLjJiYmNlZTI5MjQwYmFmODEyNjQxNGFj
MGUzMTU3MjI1YjNiNDFlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0
dGVybi5jcHAKQEAgLTUxMSw3ICs1MTEsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2V0dXBB
bHRlcm5hdGl2ZU9mZnNldHMoUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSwgdW5zaWdu
ZWQgY3VycmVudENhbGxGcmFtZVNpemUsIHVuc2lnbmVkIGluaXRpYWxJbnB1dFBvc2l0aW9uKQog
ICAgIHsKICAgICAgICAgYWx0ZXJuYXRpdmUtPm1faGFzRml4ZWRTaXplID0gdHJ1ZTsKLSAgICAg
ICAgdW5zaWduZWQgY3VycmVudElucHV0UG9zaXRpb24gPSBpbml0aWFsSW5wdXRQb3NpdGlvbjsK
KyAgICAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gY3VycmVudElucHV0UG9zaXRpb24gPSBpbml0aWFs
SW5wdXRQb3NpdGlvbjsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJu
YXRpdmUtPm1fdGVybXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFBhdHRlcm5UZXJtJiB0
ZXJtID0gYWx0ZXJuYXRpdmUtPm1fdGVybXNbaV07CkBAIC01MjAsMTEgKzUyMCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgogICAg
ICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkVPTDoKICAgICAgICAgICAg
IGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAgICAgICAg
ICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb247CisgICAgICAg
ICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24uZ2V0KCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06
OlR5cGVCYWNrUmVmZXJlbmNlOgotICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9
IGN1cnJlbnRJbnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlv
biA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uLmdldCgpOwogICAgICAgICAgICAgICAgIHRlcm0uZnJh
bWVMb2NhdGlvbiA9IGN1cnJlbnRDYWxsRnJhbWVTaXplOwogICAgICAgICAgICAgICAgIGN1cnJl
bnRDYWxsRnJhbWVTaXplICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb0JhY2tSZWZl
cmVuY2U7CiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUtPm1faGFzRml4ZWRTaXplID0gZmFs
c2U7CkBAIC01MzQsNyArNTM0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcjoKLSAg
ICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsK
KyAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlv
bi5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRp
ZmllckZpeGVkQ291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgdGVybS5mcmFtZUxvY2F0aW9u
ID0gY3VycmVudENhbGxGcmFtZVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxs
RnJhbWVTaXplICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0
ZXI7CkBAIC01NDQsNyArNTQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3M6Ci0gICAg
ICAgICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb247Cisg
ICAgICAgICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3VycmVudElucHV0UG9zaXRpb24u
Z2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlICE9IFF1YW50aWZp
ZXJGaXhlZENvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlvbiA9
IGN1cnJlbnRDYWxsRnJhbWVTaXplOwogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZy
YW1lU2l6ZSArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczsK
QEAgLTU1OSwxOCArNTU5LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAodGVybS5x
dWFudGl0eUNvdW50ID09IDEgJiYgIXRlcm0ucGFyZW50aGVzZXMuaXNDb3B5KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3Vu
dCkKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplICs9IFlhcnJT
dGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJt
LnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElu
cHV0UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9
IHNldHVwRGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1
cnJlbnRDYWxsRnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHF1YW50aXR5IGlzIGZpeGVkLCB0aGVuIHByZS1jaGVjayBpdHMg
bWluaW11bSBzaXplLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUg
PT0gUXVhbnRpZmllckZpeGVkQ291bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
SW5wdXRQb3NpdGlvbiArPSB0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1T
aXplOwotICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5w
dXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdGVybS5pbnB1dFBvc2l0aW9uID0gY3Vy
cmVudElucHV0UG9zaXRpb24uZ2V0KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJt
LnBhcmVudGhlc2VzLmlzVGVybWluYWwpIHsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudENh
bGxGcmFtZVNpemUgKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNU
ZXJtaW5hbDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1
cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50
Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElucHV0UG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0
ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVu
dElucHV0UG9zaXRpb24uZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9z
aXRpb24gPSBjdXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5w
dXRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHMo
dGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgMCwgY3VycmVudElucHV0UG9zaXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJyZW50SW5wdXRQb3Np
dGlvbi5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHMo
dGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgMCwgY3VycmVudElucHV0UG9zaXRpb24uZ2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSArPSBZYXJyU3Rh
Y2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlczsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgLy8gRml4ZWQgY291bnQgb2YgMSBjb3VsZCBiZSBhY2NlcHRlZCwgaWYg
dGhleSBoYXZlIGEgZml4ZWQgc2l6ZSAqQU5EKiBpZiBhbGwgYWx0ZXJuYXRpdmVzIGFyZSBvZiB0
aGUgc2FtZSBsZW5ndGguCkBAIC01NzgsOSArNTc4LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0
aWNhbEFzc2VydGlvbjoKLSAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBjdXJy
ZW50SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXJtLmlucHV0UG9zaXRpb24gPSBj
dXJyZW50SW5wdXRQb3NpdGlvbi5nZXQoKTsKICAgICAgICAgICAgICAgICB0ZXJtLmZyYW1lTG9j
YXRpb24gPSBjdXJyZW50Q2FsbEZyYW1lU2l6ZTsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2Fs
bEZyYW1lU2l6ZSA9IHNldHVwRGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlz
anVuY3Rpb24sIGN1cnJlbnRDYWxsRnJhbWVTaXplICsgWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJh
Y2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbiwgY3VycmVudElucHV0UG9zaXRpb24pOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRDYWxsRnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNl
dHModGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUgKyBZ
YXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLCBjdXJy
ZW50SW5wdXRQb3NpdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVEb3RTdGFyRW5jbG9zdXJlOgpAQCAtNTkwLDcg
KzU5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGFs
dGVybmF0aXZlLT5tX21pbmltdW1TaXplID0gY3VycmVudElucHV0UG9zaXRpb24gLSBpbml0aWFs
SW5wdXRQb3NpdGlvbjsKKyAgICAgICAgYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPSAoY3Vy
cmVudElucHV0UG9zaXRpb24gLSBpbml0aWFsSW5wdXRQb3NpdGlvbikuZ2V0KCk7CiAgICAgICAg
IHJldHVybiBjdXJyZW50Q2FsbEZyYW1lU2l6ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGF0dGVybi5oCmluZGV4IDk3YzM4NzA0MjVlZmM2N2RhNTQxOTRjZWFiZDcz
YzI2YjE3MzUxZTkuLmU0NjQ3OWVmNTljYjE0YjNhYThkNjA3Nzg1MzZjM2RmMDE0ZTdjY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaApAQCAtMjgsNiArMjgsNyBA
QAogI2RlZmluZSBZYXJyUGF0dGVybl9oCiAKICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC0xMTcsNyArMTE4LDcg
QEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKICAgICAgICAgfSBhbmNob3JzOwogICAgIH07CiAgICAg
UXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlOwotICAgIHVuc2lnbmVkIHF1YW50aXR5Q291bnQ7
CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gcXVhbnRpdHlDb3VudDsKICAgICBpbnQgaW5wdXRQb3Np
dGlvbjsKICAgICB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgxNGJi
MjQ3NmJjZDBiODAwY2JlMWQ1Yzg0NDcyNWRmOTdhOTcxMy4uNmFkNjE0MGU1MDEyY2Q4NGI0Mzgy
MDFiMmQwZjYwYmE0ZDY1ZWNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4
LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIGNoZWNrZWQgYXJpdGhtZXRpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjcwOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBmb3J3YXJkaW5nIGhlYWRlciBmb3IgQ2hlY2tlZEFyaXRo
bWV0aWMuaAorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0NoZWNrZWRBcml0aG1l
dGljLmg6IEFkZGVkLgorCiAyMDExLTA4LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5j
b20+CiAKICAgICAgICAgVHlwZWRBcnJheXMgZG9uJ3QgZW5zdXJlIHRoYXQgZGVub3JtYWxpc2Vk
IHZhbHVlcyBhcmUgbm9ybWFsaXNlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL0NoZWNrZWRBcml0aG1ldGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzQ4YWU1
MmVkOWI5MTM1ZDExOGNmNjkyY2M2Y2ZkYzBhNDQ3MmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAg
LTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0NoZWNrZWRBcml0aG1ldGljX2gKKyNk
ZWZpbmUgV2ViQ29yZV9GV0RfQ2hlY2tlZEFyaXRobWV0aWNfaAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0NoZWNrZWRBcml0aG1ldGljLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjMTM5OGQxN2Y5YzYxNTI5OTA3OGE3Y2Fh
NTkwMDgzMDEzNmIxYTk3Li5kZGNlMmE4NTIyM2U4MGQwZWQwNTYzNWYyZTA2MGQ0MmQwYTA0ODk2
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMDgtMzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY2hlY2tlZCBhcml0aG1ldGljCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA5NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGNhc2VzIGZvciBD
aGVja2VkPD4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvQ2hlY2tl
ZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcDogQWRkZWQuCisKIDIwMTEtMDgtMjkgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgRHVtcFJlbmRlclRyZWUgc2hv
dWxkIGJlZ2luIGVhY2ggdGVzdCB3aXRoIGFuIGVtcHR5IGNvb2tpZSBzdG9yZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA3MjQ5MjM4ODUyZmNiNGZjZDkzMzg5MGNiOWI0MjE1YWE0MzM0OGU3
Li5mMjk0MWM4M2MxMjU3YTNhZjdlNzVlM2E1OWZmMzEzM2NhYWUyZTllIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjEsNiArMjEsNyBAQAogCQkzNzIwMEI5MjEzQTE2MjMwMDA3QTRGQUQg
LyogVmVjdG9yUmV2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzIwMEI5MTEzQTE2MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2ZXJzZS5jcHAg
Ki87IH07CiAJCTRCRkRGRkE3MTMxNDc3NkMwMDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhh
bmRsZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEJGREZGQTYxMzE0Nzc2QzAwNjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxl
X0J1bmRsZS5jcHAgKi87IH07CiAJCTRCRkRGRkE5MTMxNDc3NzcwMDYxRjI0QiAvKiBIaXRUZXN0
UmVzdWx0Tm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QkZERkZBODEzMTQ3Nzc3MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVI
YW5kbGUuY3BwICovOyB9OworCQlBN0U2OUI1RTE0MEMxMTcyMDAyMjM0MTIgLyogQ2hlY2tlZEFy
aXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RTY5QjVEMTQwQzExNzIwMDIyMzQxMiAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovOyB9OwogCQlCQzEzMTg4NTExNzExNEI2MDBCNjk3MjcgLyogUGxh
dGZvcm1VdGlsaXRpZXNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzEzMTg4NDExNzExNEI2MDBCNjk3MjcgLyogUGxhdGZvcm1VdGlsaXRpZXNN
YWMubW0gKi87IH07CiAJCUJDMTMxQTlCMTE3MTMxNjkwMEI2OTcyNyAvKiBtYWluLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzFBOUExMTcxMzE2
OTAwQjY5NzI3IC8qIG1haW4ubW0gKi87IH07CiAJCUJDMTMxQUE5MTE3MTMxRkMwMEI2OTcyNyAv
KiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMxMzFBQTgxMTcxMzFGQzAwQjY5NzI3IC8qIFRlc3RzQ29udHJvbGxlci5j
cHAgKi87IH07CkBAIC0xMzQsNiArMTM1LDcgQEAKIAkJNEJGREZGQTYxMzE0Nzc2QzAwNjFGMjRC
IC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkZERkZBODEzMTQ3Nzc3MDA2MUYyNEIgLyog
SGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1h
Y2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQ
STsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQTdFNjlCNUQxNDBDMTE3
MjAwMjIzNDEyIC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzEzMTg4MzExNzExNEE4MDBCNjk3Mjcg
LyogUGxhdGZvcm1VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMzE4
ODQxMTcxMTRCNjAwQjY5NzI3IC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxhdGZvcm1VdGlsaXRpZXNNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTMxQTlBMTE3MTMxNjkwMEI2OTcyNyAvKiBt
YWluLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbWFpbi5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MCw2ICszNTIsNyBAQAogCQkJCUMwMTM2
M0M3MTNDMzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICovLAogCQkJCUJDOTA5
NjRCMTI1NTYxQkYwMDA4Mzc1NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi8sCiAJCQkJMzcyMDBCOTEx
M0ExNjIzMDAwN0E0RkFEIC8qIFZlY3RvclJldmVyc2UuY3BwICovLAorCQkJCUE3RTY5QjVEMTQw
QzExNzIwMDIyMzQxMiAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBXVEY7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTUwLDYg
KzU1Myw3IEBACiAJCQkJQzA4NTg3QkYxM0ZFOTU2QzAwMUVGNEU1IC8qIFdlYktpdEFnbm9zdGlj
VGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwODU4N0ZDMTNGRUMzOUIwMDFFRjRFNSAvKiBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzA4NTg4MDAxM0ZF
QzNBNjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gaW4gU291cmNlcyAqLywK
KwkJCQlBN0U2OUI1RTE0MEMxMTcyMDAyMjM0MTIgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9DaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxZWRl
MzZjM2YwODJiYzRmOTE1N2I1ZDg4Yzk5MWZmZjA4NjE1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAK
QEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjZGVm
aW5lIENoZWNrZWRBcml0aG1ldGljVGVzdCh0eXBlLCBjb2VyY2VMaXRlcmFsLCBNaXhlZFNpZ25l
ZG5lc3NUZXN0KSBcCisgICAgVEVTVChXVEYsIENoZWNrZWRfIyN0eXBlKSBcCisgICAgeyBcCisg
ICAgICAgIENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+IHZhbHVlOyBcCisgICAgICAgIEVY
UEVDVF9FUShjb2VyY2VMaXRlcmFsKDApLCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNU
X0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpLCAodmFsdWUgKyBzdGQ6Om51bWVy
aWNfbGltaXRzPHR5cGU+OjptYXgoKSkuZ2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShzdGQ6
Om51bWVyaWNfbGltaXRzPHR5cGU+OjptYXgoKSwgKHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46
Om1heCgpICsgdmFsdWUpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoc3RkOjpudW1lcmlj
X2xpbWl0czx0eXBlPjo6bWluKCksICh2YWx1ZSArIHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46
Om1pbigpKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8
dHlwZT46Om1pbigpLCAoc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWluKCkgKyB2YWx1ZSku
Z2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDApLCAodmFsdWUgKiBj
b2VyY2VMaXRlcmFsKDApKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVy
YWwoMCksIChjb2VyY2VMaXRlcmFsKDApICogdmFsdWUpLmdldCgpKTsgXAorICAgICAgICBFWFBF
Q1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKHZhbHVlICogdmFsdWUpLmdldCgpKTsgXAorICAgICAg
ICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgwKSwgKHZhbHVlIC0gY29lcmNlTGl0ZXJhbCgwKSku
Z2V0KCkpOyBcCisgICAgICAgIEVYUEVDVF9FUShjb2VyY2VMaXRlcmFsKDApLCAoY29lcmNlTGl0
ZXJhbCgwKSAtIHZhbHVlKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVy
YWwoMCksICh2YWx1ZSAtIHZhbHVlKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMCksICh2YWx1ZSsrKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMSksICh2YWx1ZS0tKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMSksICgrK3ZhbHVlKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMCksICgtLXZhbHVlKS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJj
ZUxpdGVyYWwoMTApLCAodmFsdWUgKz0gY29lcmNlTGl0ZXJhbCgxMCkpLmdldCgpKTsgXAorICAg
ICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxMCksIHZhbHVlLmdldCgpKTsgXAorICAgICAg
ICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxMDApLCAodmFsdWUgKj0gY29lcmNlTGl0ZXJhbCgx
MCkpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNlTGl0ZXJhbCgxMDApLCB2YWx1
ZS5nZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSAt
PSBjb2VyY2VMaXRlcmFsKDEwMCkpLmdldCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEoY29lcmNl
TGl0ZXJhbCgwKSwgdmFsdWUuZ2V0KCkpOyBcCisgICAgICAgIHZhbHVlID0gMTA7IFwKKyAgICAg
ICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMTApLCB2YWx1ZS5nZXQoKSk7IFwKKyAgICAgICAg
RVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSAtIGNvZXJjZUxpdGVyYWwoMTApKS5n
ZXQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMTApLCB2YWx1ZS5nZXQo
KSk7IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptaW4oKTsg
XAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgKENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+
KHZhbHVlIC0gY29lcmNlTGl0ZXJhbCgxKSkpLmhhc092ZXJmbG93ZWQoKSk7IFwKKyAgICAgICAg
RVhQRUNUX0VRKGZhbHNlLCAodmFsdWUtLSkuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICBF
WFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICB2YWx1ZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpOyBcCisgICAgICAgIEVYUEVDVF9FUShm
YWxzZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwg
KENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+KHZhbHVlICsgY29lcmNlTGl0ZXJhbCgxKSkp
Lmhhc092ZXJmbG93ZWQoKSk7IFwKKyAgICAgICAgRVhQRUNUX0VRKGZhbHNlLCAodmFsdWUrKyku
aGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3Zl
cmZsb3dlZCgpKTsgXAorICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46
Om1heCgpOyBcCisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCAodmFsdWUgKz0gY29lcmNlTGl0ZXJh
bCgxKSkuaGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUu
aGFzT3ZlcmZsb3dlZCgpKTsgXAorICAgICAgICB2YWx1ZSA9IDEwOyBcCisgICAgICAgIE1peGVk
U2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGNvZXJjZUxpdGVyYWwoMCksICh2YWx1ZSArIC0xMCku
Z2V0KCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSgwVSwgKHZh
bHVlIC0gMTBVKS5nZXQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNU
X0VRKGNvZXJjZUxpdGVyYWwoMCksICgtMTAgKyB2YWx1ZSkuZ2V0KCkpKTsgXAorICAgICAgICBN
aXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSgwVSwgKDEwVSAtIHZhbHVlKS5nZXQoKSkpOyBc
CisgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx0eXBlPjo6bWluKCk7IFwKKyAg
ICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwgKENoZWNrZWQ8dHlwZSwg
UmVjb3JkT3ZlcmZsb3c+KHZhbHVlIC0gMSkpLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAg
IE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGZhbHNlLCAodmFsdWUtLSkuaGFzT3ZlcmZs
b3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwg
dmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHR5cGU+OjptYXgoKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVD
VF9FUShmYWxzZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWdu
ZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwgKENoZWNrZWQ8dHlwZSwgUmVjb3JkT3ZlcmZsb3c+
KHZhbHVlICsgMSkpLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAgIE1peGVkU2lnbmVkbmVz
c1Rlc3QoRVhQRUNUX0VRKGZhbHNlLCAodmFsdWUrKykuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAg
ICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZs
b3dlZCgpKSk7IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+Ojpt
YXgoKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCAodmFs
dWUgKz0gMSkuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVz
dChFWFBFQ1RfRVEodHJ1ZSwgdmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgdmFs
dWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGU+OjptaW4oKTsgXAorICAgICAgICBNaXhlZFNp
Z25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCAodmFsdWUgLSAxVSkuaGFzT3ZlcmZsb3dlZCgp
KSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEoZmFsc2UsICh2YWx1
ZS0tKS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVY
UEVDVF9FUSh0cnVlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAgICAgICB2YWx1ZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dHlwZT46Om1heCgpOyBcCisgICAgICAgIE1peGVkU2lnbmVk
bmVzc1Rlc3QoRVhQRUNUX0VRKGZhbHNlLCB2YWx1ZS5oYXNPdmVyZmxvd2VkKCkpKTsgXAorICAg
ICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVDVF9FUSh0cnVlLCAoQ2hlY2tlZDx0eXBlLCBS
ZWNvcmRPdmVyZmxvdz4odmFsdWUgKyAxVSkpLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAg
IE1peGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKGZhbHNlLCAodmFsdWUrKykuaGFzT3ZlcmZs
b3dlZCgpKSk7IFwKKyAgICAgICAgTWl4ZWRTaWduZWRuZXNzVGVzdChFWFBFQ1RfRVEodHJ1ZSwg
dmFsdWUuaGFzT3ZlcmZsb3dlZCgpKSk7IFwKKyAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHR5cGU+OjptYXgoKTsgXAorICAgICAgICBNaXhlZFNpZ25lZG5lc3NUZXN0KEVYUEVD
VF9FUSh0cnVlLCAodmFsdWUgKz0gMVUpLmhhc092ZXJmbG93ZWQoKSkpOyBcCisgICAgICAgIE1p
eGVkU2lnbmVkbmVzc1Rlc3QoRVhQRUNUX0VRKHRydWUsIHZhbHVlLmhhc092ZXJmbG93ZWQoKSkp
OyBcCisgICAgfQorCisjZGVmaW5lIENvZXJjZUxpdGVyYWxUb1Vuc2lnbmVkKHgpIHgjI1UKKyNk
ZWZpbmUgQ29lcmNlTGl0ZXJhbE5vcCh4KSB4CisjZGVmaW5lIEFsbG93TWl4ZWRTaWduZWRuZXNz
VGVzdCh4KSB4CisjZGVmaW5lIElnbm9yZU1peGVkU2lnbmVkbmVzc1Rlc3QoeCkKK0NoZWNrZWRB
cml0aG1ldGljVGVzdChpbnQ4X3QsIENvZXJjZUxpdGVyYWxOb3AsIElnbm9yZU1peGVkU2lnbmVk
bmVzc1Rlc3QpCitDaGVja2VkQXJpdGhtZXRpY1Rlc3QoaW50MTZfdCwgQ29lcmNlTGl0ZXJhbE5v
cCwgSWdub3JlTWl4ZWRTaWduZWRuZXNzVGVzdCkKK0NoZWNrZWRBcml0aG1ldGljVGVzdChpbnQz
Ml90LCBDb2VyY2VMaXRlcmFsTm9wLCBBbGxvd01peGVkU2lnbmVkbmVzc1Rlc3QpCitDaGVja2Vk
QXJpdGhtZXRpY1Rlc3QodWludDMyX3QsIENvZXJjZUxpdGVyYWxUb1Vuc2lnbmVkLCBBbGxvd01p
eGVkU2lnbmVkbmVzc1Rlc3QpCitDaGVja2VkQXJpdGhtZXRpY1Rlc3QoaW50NjRfdCwgQ29lcmNl
TGl0ZXJhbE5vcCwgSWdub3JlTWl4ZWRTaWduZWRuZXNzVGVzdCkKK0NoZWNrZWRBcml0aG1ldGlj
VGVzdCh1aW50NjRfdCwgQ29lcmNlTGl0ZXJhbFRvVW5zaWduZWQsIElnbm9yZU1peGVkU2lnbmVk
bmVzc1Rlc3QpCisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="101946"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>