<?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>134054</bug_id>
          
          <creation_ts>2014-06-18 18:39:44 -0700</creation_ts>
          <short_desc>Move generate prototype and constructor classes into the generated implementation files</short_desc>
          <delta_ts>2014-06-19 16:43:01 -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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1016616</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-18 18:39:44 -0700</bug_when>
    <thetext>Move generate prototype and constructor classes into the generated implementation files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016622</commentid>
    <comment_count>1</comment_count>
      <attachid>233347</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-18 19:22:41 -0700</bug_when>
    <thetext>Created attachment 233347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016623</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-18 19:24:58 -0700</bug_when>
    <thetext>Attachment 233347 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:69:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:56:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:144:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp:95:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp:70:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:64:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:313:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 17 in 66 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>1016634</commentid>
    <comment_count>3</comment_count>
      <attachid>233350</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-18 22:26:44 -0700</bug_when>
    <thetext>Created attachment 233350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016635</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-18 22:28:54 -0700</bug_when>
    <thetext>Attachment 233350 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:69:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:56:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:144:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp:95:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp:70:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:64:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:313:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 17 in 68 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>1016715</commentid>
    <comment_count>5</comment_count>
      <attachid>233372</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-19 12:04:25 -0700</bug_when>
    <thetext>Created attachment 233372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016717</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-19 12:06:13 -0700</bug_when>
    <thetext>Attachment 233372 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:69:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:56:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:313:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:144:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:64:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp:95:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp:70:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 17 in 73 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>1016752</commentid>
    <comment_count>7</comment_count>
      <attachid>233379</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-19 13:51:58 -0700</bug_when>
    <thetext>Created attachment 233379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016753</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-19 13:53:01 -0700</bug_when>
    <thetext>Attachment 233379 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp:78:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:69:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:56:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:64:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:313:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:144:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4333:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp:54:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:61:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp:58:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp:95:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp:70:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 18 in 79 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>1016787</commentid>
    <comment_count>9</comment_count>
      <attachid>233389</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-19 15:55:02 -0700</bug_when>
    <thetext>Created attachment 233389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016790</commentid>
    <comment_count>10</comment_count>
      <attachid>233390</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-19 16:12:10 -0700</bug_when>
    <thetext>Created attachment 233390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016793</commentid>
    <comment_count>11</comment_count>
      <attachid>233391</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-19 16:21:24 -0700</bug_when>
    <thetext>Created attachment 233391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016797</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-19 16:43:01 -0700</bug_when>
    <thetext>Landed in r170167.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233347</attachid>
            <date>2014-06-18 19:22:41 -0700</date>
            <delta_ts>2014-06-18 22:26:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140618192222.patch</filename>
            <type>text/plain</type>
            <size>174510</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDEzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOCAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcmVi
ZWNjYXB1cnBsZSB0byBDU1MgbmFtZWQgY29sb3IgbGlzdApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJKU0F1ZGlvQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU09mZmxpbmVBdWRp
b0NvbnRleHQuaCIKICNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSA8
cnVudGltZS9BcnJheUJ1ZmZlci5oPgpAQCAtNDIsOSArNDMsOSBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNBdWRpb0NvbnRleHRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNBdWRpb0NvbnRleHQoRXhl
Y1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0F1
ZGlvQ29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNBdWRpb0NvbnRleHRDb25zdHJ1
Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlm
ICghanNDb25zdHJ1Y3RvcikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVSZWZlcmVuY2VFcnJvcihleGVjLCAiQXVkaW9Db250ZXh0IGNvbnN0cnVjdG9yIGNhbGxlZSBp
cyB1bmF2YWlsYWJsZSIpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSw5IEBA
IEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamUKICAgICByZXR1cm4gd3Jh
cDxKU0Jsb2I+KGdsb2JhbE9iamVjdCwgYmxvYik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYihFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTQmxvYihFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNCbG9iQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nh
c3Q8SlNCbG9iQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0
b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpz
Q29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
ZXhlYywgIkJsb2IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJs
ZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3J5cHRvQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgIkpTQ3J5cHRvLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRh
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDkgKzQ2LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCogdG9IVE1MRm9ybUVsZW1lbgogICAg
IHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU0hUTUxGb3JtRWxlbWVudDo6aW5mbygpKSA/ICZqc0Nh
c3Q8SlNIVE1MRm9ybUVsZW1lbnQqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNET01Gb3JtRGF0YShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RP
TUZvcm1EYXRhQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0
b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihl
eGVjLT5jYWxsZWUoKSk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSAwOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1pbWVUeXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lv
biAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1pbWVUeXBlQXJy
YXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAi
SlNET01NaW1lVHlwZUFycmF5LmgiCiAKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01NaW1lVHlwZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJh
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJK
U0RPTVBsdWdpbkFycmF5LmgiCiAKICNpbmNsdWRlICJET01QbHVnaW5BcnJheS5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUGx1Z2luQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGx1Z2luQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
RE9NUGx1Z2luLmgiCiAKLSNpbmNsdWRlICJET01QbHVnaW4uaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTU1pbWVUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YUN1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KwogI2luY2x1ZGUgIkpTRGF0YUN1ZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDkgKzQ3
LDkgQEAgdm9pZCBKU0RhdGFDdWU6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYwogfQogI2VuZGlm
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEYXRhQ3VlQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEpTRGF0YUN1ZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTRGF0YUN1ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNEYXRh
Q3VlQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNEYXRhQ3VlQ29uc3RydWN0b3Iq
PihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGNhc3RlZFRoaXMg
PSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFU
cmFuc2ZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0RhdGFUcmFuc2Zlci5oIgogCi0jaW5jbHVkZSAi
RGF0YVRyYW5zZmVyLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50SGVhZGVycy5oIgogI2luY2x1ZGUgIkV2ZW50SW50ZXJmYWNlcy5oIgogI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RhdGFUcmFuc2Zlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmls
ZVJlYWRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTRmlsZVJlYWRlci5oIgogCiAjaW5jbHVkZSAi
RmlsZVJlYWRlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAi
SlNIaXN0b3J5LmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhpc3RvcnkuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDcz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgogI2lu
Y2x1ZGUgIklEQkluZGV4LmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJKU0lEQkN1cnNvci5oIgogI2luY2x1ZGUgIkpTSURCQ3Vyc29yV2l0aFZhbHVlLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRl
ICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTSURCT2JqZWN0U3RvcmUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU1N0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDA3MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0
aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJPYmplY3RT
dG9yZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTSURCSW5kZXgu
aCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmlu
Zy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHZvaWQgSlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNI
VE1MSW1hZ2VFbGVtZW50UHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNIVE1MSW1h
Z2VFbGVtZW50OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOwogfQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbWFnZShFeGVjU3Rh
dGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFn
ZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgogCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwCShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lv
biAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKIAotI2luY2x1ZGUgIkxvY2F0aW9uLmgiCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5o
IgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNNdXRh
dGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkBAIC01Myw3ICs1
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNNdXRhdGlvbk8KICAgICBpZiAo
IW9iamVjdCB8fCBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2Fs
bERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkNhbGxiYWNrIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5j
dGlvbiIpKTsKIAotICAgIEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yKiBqc0NvbnN0cnVj
dG9yID0ganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERP
TUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFJlZlB0cjxKU011dGF0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gSlNNdXRhdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0
LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGpzT2JzZXJ2
ZXIgPSBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBN
dXRhdGlvbk9ic2VydmVyOjpjcmVhdGUoY2FsbGJhY2sucmVsZWFzZSgpKSkpOwogICAgIFByaXZh
dGVOYW1lIHByb3BlcnR5TmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUg
IkpTU1FMUmVzdWx0U2V0Um93TGlzdC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0jaW5jbHVk
ZSAiU1FMUmVzdWx0U2V0Um93TGlzdC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllcklu
bGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0
aW9uU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsOSArMzMsOSBAQAogI2luY2x1ZGUgIkpTU1FMVHJhbnNhY3Rpb25TeW5jLmgiCiAKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNTUUxSZXN1bHRTZXQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKLSNpbmNs
dWRlICJTUUxUcmFuc2FjdGlvblN5bmMuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdM
ZW5ndGhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNTVkdMZW5ndGguaCIKIAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTVkdBbmlt
YXRlZFByb3BlcnR5LmgiCiAjaW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU1ZH
TGVuZ3RoQ29udGV4dC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFy
ZWRXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw5ICs1MCw5IEBAIHZvaWQgSlNTaGFyZWRXb3JrZXI6OnZpc2l0QWRkaXRpb25h
bENoaWwKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVj
dEpTU2hhcmVkV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNTaGFyZWRXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
U2hhcmVkV29ya2VyQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNTaGFyZWRX
b3JrZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9i
amVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMt
PmNhbGxlZSgpKTsKIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogCi0jaW5jbHVkZSAi
U3RvcmFnZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
SWRlbnRpZmllcklubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShVU0VSX01FU1NB
R0VfSEFORExFUlMpCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU1Vz
ZXJNZXNzYWdlSGFuZGxlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0UG9p
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTUgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU1dlYktpdFBvaW50LmgiCiAKLSNpbmNsdWRlICJXZWJL
aXRQb2ludC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYktpdFBvaW50KEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJL
aXRQb2ludChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNXZWJLaXRQb2ludENvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcio+KGV4ZWMt
PmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpz
Q2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGZsb2F0
IHggPSAwOwogICAgIGZsb2F0IHkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMCArMjksMTEgQEAKICNpbmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNNZXNz
YWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUgIldvcmtlci5oIgotI2luY2x1ZGUgIkpTRE9NV2lu
ZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwpAQCAtNDQsOSArNDUsOSBAQCBKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNz
YWdlKEpTQzo6CiAgICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEpTV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTV29ya2Vy
Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNXb3JrZXJDb25zdHJ1Y3Rvcio+
KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3Rv
ciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTQ3J5
cHRvS2V5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0Lmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkocmV2aXNpb24gMTcwMDc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTgwMywxMiArODAz
LDkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKCRoYXNQYXJlbnQpIHsKICAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyIkcGFyZW50Q2xhc3NOYW1lLmgifSA9IDE7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPiJ9ID0gMTsKKyAgICAg
ICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTVdyYXBwZXIuaCJ9ID0gMTsKICAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPmlzRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7Ijxy
dW50aW1lL0Vycm9yUHJvdG90eXBlLmg+In0gPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4ifSA9IDE7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgyMCw3ICs4MTcsNiBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAg
IH0KICAgICAKLSAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAx
OwogICAgICRoZWFkZXJJbmNsdWRlc3siU1ZHRWxlbWVudC5oIn0gPSAxIGlmICRjbGFzc05hbWUg
PX4gL15KU1NWRy87CiAKICAgICBteSAkaW1wbFR5cGUgPSAkaW50ZXJmYWNlTmFtZTsKQEAgLTg5
NSw3ICs4OTEsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgIyBQcm90b3R5
cGUKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBj
cmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIHVubGVz
cyBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKTsKKyAgICB1bmxlc3MgKElzRE9NR2xvYmFs
T2JqZWN0KCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopO1xuIik7CisgICAgfQogCiAgICAgJGhlYWRlclRyYWlsaW5nSW5jbHVkZXN7IiR7Y2xh
c3NOYW1lfUN1c3RvbS5oIn0gPSAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0N1c3RvbUhlYWRlciJ9OwogCkBAIC0xMTE0LDYgKzExMTMsNyBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7
CisKICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5k
b3ciKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6
OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4sIEpTRE9NV2luZG93
U2hlbGwqKTtcbiIpOwpAQCAtMTEyNiwxNSArMTEyNiwxNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIH1cblxuIik7Ci0KICAgICB9CiAKICAgICAjIHN0cnVjdHVyZSBmbGFncwotICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gIik7Ci0gICAgZm9yZWFjaCBteSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0
dXJlRmxhZ3MpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICRzdHJ1Y3R1cmVGbGFn
IC4gIiB8ICIpOworICAgIGlmICglc3RydWN0dXJlRmxhZ3MpIHsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAi
KTsKKyAgICAgICAgZm9yZWFjaCBteSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0
dXJlRmxhZ3MpKSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkc3RydWN0dXJl
RmxhZyAuICIgfCAiKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
QmFzZTo6U3RydWN0dXJlRmxhZ3M7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIkJhc2U6OlN0cnVjdHVyZUZsYWdzO1xuIik7CiAKICAgICAjIEluZGV4IHNldHRlcgogICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRl
ciJ9KSB7CkBAIC0xMTk2LDE0ICsxMTk3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAjIEFkZCBwcm90b3R5cGUgZGVjbGFyYXRp
b24uCi0gICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRj
bGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKLQotICAgIGlmICghJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vSW50ZXJmYWNlT2JqZWN0In0pIHsKLSAgICAg
ICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAg
ICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9
ID0gMTsKLSAgICAgICAgfQotICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24o
XEBoZWFkZXJDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7
CisgICAgaWYgKEhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSkpIHsK
KyAgICAgICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRj
bGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKICAgICBpZiAo
JGhhc0ZvcndhcmREZWNsYXJpbmdGdW5jdGlvbnMpIHsKQEAgLTEyNTEsNiArMTI0NiwxNSBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChIYXNDdXN0b21D
b25zdHJ1Y3RvcigkaW50ZXJmYWNlKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
Ly8gQ3VzdG9tIGNvbnN0cnVjdG9yXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IkpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0o
SlNDOjpFeGVjU3RhdGUqKTtcblxuIik7CisgICAgfQorCisgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50
ZXJmYWNlTmFtZX1Jbml0JiwgSlNEaWN0aW9uYXJ5Jik7XG5cbiIpOworICAgIH0KKwogICAgIG15
ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmVcblxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAv
LyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkBAIC0x
NjkyLDYgKzE2OTYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgLSBBZGQg
ZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKICAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFkZXIoJGludGVyZmFjZSkpOwogCisgICAgJGlt
cGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHd0
Zi9HZXRQdHIuaD4ifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuaD4ifSA9IDEgaWYgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbjsKIApAQCAtMTczMiwx
MCArMTczNywxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9CiAKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRlbmRBcHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVD
b3B5cmlnaHQ7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KIAog
ICAgIGlmICgkbnVtQXR0cmlidXRlcyA+IDAgfHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCIvLyBBdHRyaWJ1dGVzXG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIEF0
dHJpYnV0ZXNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJm
YWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJGb3J3YXJkRGVjbGFyZUluSGVhZGVyIn07CiAK
QEAgLTE3NTksOCArMTc2NiwyNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRpbnRlcmZhY2VO
YW1lIC4gIkNvbnN0cnVjdG9yIjsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOwogICAg
ICAgICB9CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIH0KKworICAg
ICMgQWRkIHByb3RvdHlwZSBkZWNsYXJhdGlvbi4KKyAgICBpZiAoIUhlYWRlck5lZWRzUHJvdG90
eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQcm90b3R5cGVE
ZWNsYXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJm
YWNlTmFtZSk7CisgICAgfQorCisgICAgIyBBZGQgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KKyAg
ICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVj
dCJ9KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOworICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0
b3IifSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9j
dW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgfQorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVj
bGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFj
ZU5hbWUpOwogICAgIH0KIAorCiAgICAgbXkgQGhhc2hLZXlzID0gKCk7CiAgICAgbXkgQGhhc2hW
YWx1ZTEgPSAoKTsKICAgICBteSBAaGFzaFZhbHVlMiA9ICgpOwpAQCAtMTk0NCwxMiArMTk2OCw2
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJjb25zdCBDbGFzc0luZm8gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpz
X2luZm8gPSB7IFwiJHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Qcm90b3R5cGVcIiwgJkJhc2U6OnNf
aW5mbywgJiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KCR7Y2xhc3NOYW1lfVByb3RvdHlwZSkgfTtcblxuIik7CiAgICAgfQotICAgIHVubGVzcyAoSXNE
T01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU09iamVjdCogJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NUHJvdG90
eXBlPCR7Y2xhc3NOYW1lfT4odm0sIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgIH0KIAogICAgIGlmIChQcm90b3R5cGVPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSkpIHsKICAgICAgICAgbXkgJG51bVByb3Rv
dHlwZUF0dHJpYnV0ZXMgPSBQcm90b3R5cGVBdHRyaWJ1dGVDb3VudCgkaW50ZXJmYWNlKTsKQEAg
LTIwNTMsMTIgKzIwNzEsMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90b3R5
cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50ICYmICRwYXJl
bnRDbGFzc05hbWUgbmUgIkpTQzo6RE9NTm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgZ2xvYmFsT2JqZWN0LCAke3BhcmVudENsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYodm0sIGds
b2JhbE9iamVjdCkpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsICR7
Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsICR7
cGFyZW50Q2xhc3NOYW1lfTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7XG4iKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG15ICRwcm90b3R5cGUgPSAkaW50ZXJmYWNl
LT5pc0V4Y2VwdGlvbiA/ICJlcnJvclByb3RvdHlwZSIgOiAib2JqZWN0UHJvdG90eXBlIjsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90
b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPiR7cHJvdG90eXBl
fSgpKSk7XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9
OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8JHtjbGFzc05hbWV9Pih2bSwgZ2xv
YmFsT2JqZWN0KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAg
ICAgfQogCiAgICAgaWYgKCEkaGFzUGFyZW50KSB7CkBAIC00MjY2LDkgKzQyODksNiBAQCBzdWIg
R2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNs
YXNzICR7cHJvdG90eXBlQ2xhc3NOYW1lfSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
e1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHVibGljOlxuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7XG4i
KTsKLSAgICB1bmxlc3MgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7Ci0gICAgfQogCiAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHN0YXRpYyAke3Byb3RvdHlwZUNsYXNzTmFtZX0qIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwpA
QCAtNDM0NywxMCArNDM2Nyw5IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24K
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CiAKICAgICBpZiAoSXNDb25zdHJ1
Y3RhYmxlKCRpbnRlcmZhY2UpICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TmFtZWRDb25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3Rl
Y3RlZDpcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpF
eGVjU3RhdGUqKTtcbiIpOwotCiAgICAgICAgIGlmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGlu
dGVyZmFjZSkpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0JHtjbGFzc05hbWV9KEpTQzo6RXhl
Y1N0YXRlKik7XG4iKTsKICAgICAgICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZh
Y2UtPmNvbnN0cnVjdG9yc307CiAgICAgICAgICAgICBpZiAoQGNvbnN0cnVjdG9ycyA+IDEpIHsK
ICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRjb25zdHJ1Y3RvciAoQGNvbnN0cnVjdG9ycykg
ewpAQCAtNDM2NywxMCArNDM4Niw2IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRp
b24KICAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifTtcblxuIik7CiAKLSAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQi
KSkgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sIGZpbGwke2ludGVyZmFjZU5h
bWV9SW5pdCgke2ludGVyZmFjZU5hbWV9SW5pdCYsIEpTRGljdGlvbmFyeSYpO1xuXG4iKTsKLSAg
ICB9Ci0KICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29u
c3RydWN0b3IifSkgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksIDw8RU5EKTsKIGNsYXNz
IEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JXaXRoRG9jdW1lbnQgewpAQCAtNDY5NCwxMSArNDcwOSwxMSBAQCBzdWIgR2VuZXJhdGVDb25z
dHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICB9IGVsc2lmICgkZ2VuZXJhdGluZ05hbWVkQ29uc3Ry
dWN0b3IpIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7
Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCAke2NsYXNzTmFtZX06OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgTm9uZSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKLSAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCAke3Byb3RvQ2xhc3NOYW1lfTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NO
YW1lfTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpO1xuIik7CiAgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoJHtsZWFzdENvbnN0cnVjdG9y
TGVuZ3RofSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmIGRlZmlu
ZWQgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGg7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3JUYWJsZVZh
bHVlcywgKnRoaXMpO1xuIikgaWYgQ29uc3RydWN0b3JIYXNQcm9wZXJ0aWVzKCRpbnRlcmZhY2Up
OwpAQCAtNDc1Miw0ICs0NzY3LDExIEBAIHN1YiBJc0NvbnN0cnVjdGFibGUKICAgICByZXR1cm4g
SGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uc3RydWN0b3JUZW1wbGF0ZSJ9OwogfQogCitzdWIgSGVhZGVyTmVlZHNQcm90b3R5
cGVEZWNsYXJhdGlvbgoreworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKworICAgIHJldHVy
biBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIn0gfHwgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3Rv
dHlwZSJ9OworfQorCiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJ
KHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCAr
MzcsNTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1
bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShKU0M6
OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
Cit9OworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEFjdGl2ZURPTU9iamVj
dENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0QWN0aXZlRE9NT2JqZWN0
VGFibGVJbmRleFs0XSA9IHsKQEAgLTgyLDcgKzEyNiw3IEBAIHZvaWQgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3I6OmYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYo
dm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMDUsMTEgKzE0OSw2
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RBY3RpdmUKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGUgPSB7IDIsIDMs
IGZhbHNlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJl
dHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMjks
NiArMTY4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZVAKICAg
ICByZXR1cm4gSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQog
CitKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBK
U1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0QWN0
aXZlRE9NT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5o
CShyZXZpc2lvbiAxNzAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsy
MSw4IEBACiAjaWZuZGVmIEpTVGVzdEFjdGl2ZURPTU9iamVjdF9oCiAjZGVmaW5lIEpTVGVzdEFj
dGl2ZURPTU9iamVjdF9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
ICAgICB+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CkBAIC05Niw0OSArOTQsNiBAQCBpbmxpbmUg
dm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEFjdGl2ZURPTU9iamVjdCopOwog
VGVzdEFjdGl2ZURPTU9iamVjdCogdG9UZXN0QWN0aXZlRE9NT2JqZWN0KEpTQzo6SlNWYWx1ZSk7
CiAKLWNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
IHsgfQotfTsKLQotY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQot
cHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdENv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3Ioc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHJl
dmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1
LDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5j
dGlvbkFub3RoZXJGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToK
KyAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVj
dG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RDdXN0b21O
YW1lZEdldHRlckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclRhYmxlSW5kZXhbMl0gPSB7CkBA
IC03Niw3ICsxMjAsNyBAQCB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhp
bmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTk2LDExICsxNDAsNiBAQCBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0Q3VzdG9tCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIGZhbHNlLCBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlclByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEN1c3RvbU5hbWVkR2V0dGVy
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj4odm0sIGdsb2JhbE9i
amVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0x
MjAsNiArMTU5LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXQK
ICAgICByZXR1cm4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
KTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRE
T01Qcm90b3R5cGU8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KHZtLCBnbG9iYWxPYmplY3QpOwor
fQorCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBj
ZWxsKQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDdXN0b21OYW1lZEdldHRlci5oCShyZXZpc2lvbiAxNzAwNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJfaAogI2RlZmluZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcl9oCiAKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtMTAwLDQ5ICs5OCw2IEBAIGlu
bGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIqKTsKIFRlc3RDdXN0b21OYW1lZEdldHRlciogdG9UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlND
OjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpT
Qzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
ICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZh
dGU6Ci0gICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgpAQCAt
MzgsNiArMzksNTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclBy
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
CisgICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOworfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC0xMDAsNyArMTQ3LDcgQEAgdm9pZCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAt
MTM1LDExICsxODIsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRD
CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVU
YWJsZSA9IHsgMywgNywgdHJ1ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxl
VmFsdWVzLCAwLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVJbmRleCB9Owog
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9
IHsgIlRlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0
cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwpAQCAtMTU5LDYgKzIwMSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlCiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KHZtLCBn
bG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3ko
SlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihjZWxsKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTcwMDc0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcl9oCiAjZGVmaW5lIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JfaAogCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVk
ZSAiVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzks
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV2ZW50
Q29uc3RydWN0b3IoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03NCw3ICs3Miw2IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OwogfTsKIAogY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk3LDUyICs5NCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVy
Q29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXZlbnRDb25zdHJ1Y3RvciopOwogVGVzdEV2ZW50Q29u
c3RydWN0b3IqIHRvVGVzdEV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3Mg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
Ci19OwotCi1jbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1
YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFS
RV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwot
fTsKLQogYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVj
dG9ySW5pdCYsIEpTRGljdGlvbmFyeSYpOwogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSAr
NDQsNTMgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25BZGRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvblJlbW92
ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVu
dChKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNz
IEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rl
c3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwor
ICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RFdmVudFRhcmdldFRhYmxlSW5k
ZXhbMl0gPSB7CkBAIC04NSw3ICsxMjksNyBAQCB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3I6OmZpbmlzCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTExNCwxMSArMTU4LDYgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50VAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlID0geyA0LCA3LCBmYWxzZSwgSlNUZXN0RXZlbnRU
YXJnZXRQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVU
YWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZK
U1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRUYXJnZXQ+KHZtLCBnbG9i
YWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTM4
LDYgKzE3NywxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0ZVByb3RvCiAg
ICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2Jq
ZWN0KiBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2
ZW50VGFyZ2V0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RFdmVudFRhcmdl
dDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFdmVudFRhcmdldCog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMTcwMDc0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdEV2ZW50VGFyZ2V0X2gKICNk
ZWZpbmUgSlNUZXN0RXZlbnRUYXJnZXRfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCi0j
aW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKQEAgLTEwNCw0OSArMTAyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250
ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RFdmVudFRhcmdldCopOwogVGVzdEV2ZW50VGFyZ2V0KiB0b1Rl
c3RFdmVudFRhcmdldChKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5
cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsK
LSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhlYXApKSBK
U1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBK
U1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAg
ewotICAgICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0
RXhjZXB0aW9uLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIlVSTC5oIgpAQCAtMzUsNiArMzYsNDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0
RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAg
c3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgeworICAgICAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1
Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RFeGNlcHRpb25UYWJsZUluZGV4WzJdID0gewpAQCAt
NzMsNyArMTE3LDcgQEAgdm9pZCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQwog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0RXhjZXB0aW9uOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7
CiB9CiAKQEAgLTkzLDExICsxMzcsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0RXhjZXB0CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVl
cywgMCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZSwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
RXhjZXB0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFeGNlcHRpb25Q
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CkBAIC0xMTcsNiArMTU2LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246
OmNyZWF0ZVByb3RvdHkKICAgICByZXR1cm4gSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5lcnJvclByb3RvdHlwZSgpKSk7
CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246OmdldFByb3RvdHlwZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU1Rlc3RFeGNlcHRpb24+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV4
Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFeGNlcHRp
b24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFeGNlcHRpb24qPihjZWxsKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9uIDE3MDA3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTEgKzIxLDkgQEAKICNpZm5kZWYgSlNUZXN0RXhjZXB0aW9uX2gKICNkZWZpbmUg
SlNUZXN0RXhjZXB0aW9uX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
IkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVj
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00MCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAg
fkpTVGVzdEV4Y2VwdGlvbigpOwpAQCAtOTYsNDkgKzk1LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFeGNlcHRpb24qKTsKIFRlc3RFeGNlcHRpb24qIHRv
VGVzdEV4Y2VwdGlvbihKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07
Ci0KLWNsYXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVm
IERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RF
eGNlcHRpb25Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKICNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CiAKQEAgLTMxLDYgKzMyLDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJp
YnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFz
cyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1
Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0
YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFz
aEluZGV4IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0g
PSB7CkBAIC01NSw3ICs5OSw3IEBAIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG8KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTc1LDExICsxMTksNiBAQCBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2VuZXJhCiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1
ZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtOTksNiArMTM4LDExIEBAIEpTT2JqZWN0KiBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpjcmUKICAgICByZXR1cm4gSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5oCShyZXZpc2lvbiAxNzAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2gK
ICNkZWZpbmUgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCiAKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90
b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpT
Qzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSgpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9Owog
CiBjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250
ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7CiBUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZSogdG9UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZShKU0M6OkpTVmFsdWUpOwogCi1j
bGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZT4odm0uaGVhcCkpIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRl
OgotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3QKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlm
CisKIC8vIEF0dHJpYnV0ZXMKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQpAQCAtMTIxLDYgKzEyMiw1NCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsCiB2b2lkIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9Owor
CitjbGFzcyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNU
ZXN0SW50ZXJmYWNlKEpTQzo6RXhlY1N0YXRlKik7CisjaWYgRU5BQkxFKFRFU1RfSU5URVJGQUNF
KQorICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpT
Q2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworI2VuZGlmIC8vIEVOQUJMRShURVNUX0lOVEVS
RkFDRSkKK307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVGVzdEludGVyZmFjZVRhYmxlSW5kZXhbNF0gPSB7CkBAIC0yNjYsNyAr
MzE1LDcgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7
Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0SW50ZXJmYWNlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxl
VmFsdWVzLCAqdGhpcyk7CiB9CkBAIC00MzgsMTEgKzQ4Nyw2IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RJbnRlcmYKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDE3LCA2MywgdHJ1ZSwgSlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlSW5kZXgg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3RJbnRlcmZhY2VQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdEludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQg
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtNDYyLDYgKzUwNiwxMSBAQCBKU09iamVjdCog
SlNUZXN0SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5CiAgICAgcmV0dXJuIEpTVGVzdEludGVyZmFj
ZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZTo6Z2V0UHJv
dG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9
CisKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewog
ICAgIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEludGVy
ZmFjZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNpb24gMTcwMDc0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsOCBAQAogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtMTIzLDU0ICsxMjEsNiBAQCBpbmxpbmUgdm9pZCogd3Jh
cHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEludGVyZmFjZSopOwogVGVzdEludGVyZmFjZSog
dG9UZXN0SW50ZXJmYWNlKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEludGVyZmFjZVBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5
cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNU
ZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEludGVyZmFjZVBy
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQot
fTsKLQotY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVk
ZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3Rl
ZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTVGVzdEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSopOwotI2lmIEVOQUJMRShURVNUX0lOVEVS
RkFDRSkKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
OjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSNlbmRpZiAvLyBFTkFCTEUoVEVTVF9J
TlRFUkZBQ0UpCi19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTcwMDcz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw1MyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKKworY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xh
c3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitw
dWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRp
YyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25z
dHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNjIsNyArMTA2LDcgQEAgdm9pZCBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsK
IH0KIApAQCAtODUsMTEgKzEyOSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RNZWRpYVEKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByb3RvdHlwZVRhYmxlID0geyAyLCAzLCB0cnVlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMDksNiArMTQ4LDExIEBAIEpTT2JqZWN0KiBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjoKICAgICByZXR1cm4gSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0
KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZv
aWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2Vs
bCkKIHsKICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KGNlbGwpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCShyZXZpc2lvbiAxNzAwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lm
bmRlZiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKICNkZWZpbmUgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5o
IgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpOwogICAg
IERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdy
YXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKik7CiBUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciogdG9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OkpTVmFsdWUpOwogCi1j
bGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGlj
OgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCi0gICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19
OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRo
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKQEAgLTM0LDYgKzM1
LDc0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkg
eyB9Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3Rh
dGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKworY2xhc3MgSlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JX
aXRoRG9jdW1lbnQgeworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9j
dW1lbnQgQmFzZTsKKworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZh
dGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Cit9OworCiAvKiBIYXNoIHRhYmxl
IGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAg
LTU4LDcgKzEyNyw3IEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjoK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTk2LDcgKzE2NSw3IEBAIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6Omdl
dFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTEyMiwxMSArMTkxLDYgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVkQwogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
clByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlw
ZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSkg
fTsKIAotSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0K
IHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTE0Niw2ICsyMTAsMTEg
QEAgSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZQogICAgIHJldHVybiBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmpl
Y3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDE3MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEyICsy
MSw4IEBACiAjaWZuZGVmIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JfaAogI2RlZmluZSBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yX2gKIAotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgi
CiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDEsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpT
VGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03NCw3ICs3MSw2
IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk3LDc0ICs5Myw2IEBAIGlubGluZSB2b2lk
KiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRDb25zdHJ1Y3RvciopOwogVGVz
dE5hbWVkQ29uc3RydWN0b3IqIHRvVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsK
IAotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25z
dHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotY2xhc3Mg
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQgewotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JX
aXRoRG9jdW1lbnQgQmFzZTsKLQotICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFt
ZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0K
LXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3Ry
dWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci19OwotCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMTcwMDczKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw1MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5vZGVQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0Tm9kZVByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlUHJvdG90eXBlPih2
bS5oZWFwKSkgSlNUZXN0Tm9kZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0
Tm9kZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
IHsgfQorfTsKKworY2xhc3MgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb2RlQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vZGVDb25z
dHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2Rl
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROb2RlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5vZGUoSlNDOjpFeGVjU3Rh
dGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
OjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgZm9y
IGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3ROb2RlQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNjUsNyArMTExLDcgQEAg
dm9pZCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGVQcm90b3R5
cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGU6Omdl
dFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtOTEsMTEgKzEzNyw2IEBA
IHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHIKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGUgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RO
b2RlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZUluZGV4
IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9kZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVz
dE5vZGVQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxl
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVQcm90b3R5cGUpIH07CiAKLUpTT2Jq
ZWN0KiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZt
LCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTEs
NyArMTUyLDEyIEBAIEpTVGVzdE5vZGU6OkpTVGVzdE5vZGUoU3RydWN0dXJlKiBzdHJ1Y3QKIAog
SlNPYmplY3QqIEpTVGVzdE5vZGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5vZGVQcm90b3R5cGU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGdsb2JhbE9iamVjdCwgSlNOb2RlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmpl
Y3QpKSk7CisgICAgcmV0dXJuIEpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgSlNOb2RlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNP
YmplY3QqIEpTVGVzdE5vZGU6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2
bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkocmV2aXNpb24gMTcwMDc0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsMTAgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0Tm9kZV9oCiAjZGVmaW5lIEpT
VGVzdE5vZGVfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNOb2Rl
LmgiCiAjaW5jbHVkZSAiVGVzdE5vZGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksNiArMzcsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBERUNMQVJFX0lORk87
CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQpAQCAtNjYsNTIgKzY1LDYgQEAgcHJvdGVjdGVkOgogfTsKIAogCi1jbGFzcyBKU1Rlc3RO
b2RlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRp
YyBKU1Rlc3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE5v
ZGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1w
cm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1Rlc3ROb2RlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3RE
YXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkocmV2aXNpb24gMTcwMDczKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8v
IEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZUZ1bmN0aW9uTm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwpAQCAtNTUsNiArNTYsNDkgQEAgdm9pZCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
Owogdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4
Y2VwdGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpT
VGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwor
ICAgIHN0YXRpYyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2Ns
YXNzIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAg
IHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgewor
ICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9y
Pih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1
Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTc5LDcgKzEyMyw3
IEBAIHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjoKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CiB9CiAKQEAgLTEyMCwxMSArMTY0LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE5vbmRldAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljUHJvdG90eXBlVGFibGUgPSB7IDcsIDE1LCB0cnVlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVU
YWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUiLCAmQmFzZTo6
c19pbmZvLCAmSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUpIH07CiAKLUpTT2Jq
ZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
VGVzdE5vbmRldGVybWluaXN0aWM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNDQsNiArMTgzLDExIEBAIEpTT2JqZWN0
KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpjcmVhdGUKICAgICByZXR1cm4gSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdE5vbmRl
dGVybWluaXN0aWNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYz4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYzo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vbmRldGVybWluaXN0aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCShyZXZpc2lvbiAx
NzAwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lm
bmRlZiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljX2gKICNkZWZpbmUgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY19oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBw
ZXIuaCIKICNpbmNsdWRlICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAg
ICB+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYygpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcg
KzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljT3duZXIg
OiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5l
IHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROb25kZXRlcm1pbmlzdGljKik7
CiBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdG9UZXN0Tm9uZGV0ZXJtaW5pc3RpYyhKU0M6OkpTVmFs
dWUpOwogCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE5v
bmRldGVybWluaXN0aWNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwg
c3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVz
dE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFz
ZTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDE3MDA3
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QoSlNDOjpFeGVj
U3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55
KEpTQzo6RXhlY1N0YXRlKik7CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAgLTI5MCw2ICsy
OTEsNTIgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUoSgogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7CiB2b2lkIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1U
eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1
YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rl
c3RPYmpQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJl
KSB7IH0KK307CisKK2NsYXNzIEpTVGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPYmooSlNDOjpFeGVjU3RhdGUqKTsK
KyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0Nl
bGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdE9ialRhYmxlSW5kZXhbMTdd
ID0gewpAQCAtNDU1LDcgKzUwMiw3IEBAIHZvaWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW8KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdE9iajo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwog
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZh
bHVlcywgKnRoaXMpOwogfQpAQCAtMTE3NCwxMSArMTIyMSw2IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T2Jq
UHJvdG90eXBlVGFibGUgPSB7IDEzNywgNTExLCB0cnVlLCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJs
ZVZhbHVlcywgMCwgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sICZKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3RPYmpQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90
b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0K
LQogdm9pZCBKU1Rlc3RPYmpQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTk4LDYgKzEyNDAsMTEgQEAgSlNPYmpl
Y3QqIEpTVGVzdE9iajo6Y3JlYXRlUHJvdG90eXBlKFZNJgogICAgIHJldHVybiBKU1Rlc3RPYmpQ
cm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmpQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RPYmo6OmdldFByb3RvdHlwZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3RPYmo+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdE9iajo6
ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDE3
MDA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0T2Jq
X2gKICNkZWZpbmUgSlNUZXN0T2JqX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKLSNpbmNsdWRlIDxy
dW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAg
IH5KU1Rlc3RPYmooKTsKQEAgLTEwOSw1MiArMTA3LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJD
b250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmoqKTsKIFRlc3RPYmoqIHRvVGVzdE9iaihKU0M6OkpT
VmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFw
KSkgSlNUZXN0T2JqUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RPYmpQcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07
Ci0KLWNsYXNzIEpTVGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPYmooSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0
aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6
OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lv
biAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworCitjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFz
cyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGlj
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhKU0M6OkV4ZWNTdGF0ZSop
OworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMyKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzMyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoSlND
OjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2gg
dGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JUYWJsZUluZGV4
WzFdID0gewpAQCAtMTI0LDcgKzE3NCw3IEBAIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTE1MCwxMSAr
MjAwLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJsbwogc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFi
bGUgPSB7IDEsIDEsIHRydWUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxl
SW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sICZKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFi
bGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4odm0s
IGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKQEAgLTE3NCw2ICsyMTksMTEgQEAgSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OgogICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE3MDA3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNfaAogI2RlZmluZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
X2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5o
IgogI2luY2x1ZGUgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNp
bmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
KyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwog
ICAgIH5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKCk7CiAgICAgREVDTEFSRV9JTkZPOwpA
QCAtNzIsNyArNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05NSw1NiAr
OTIsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMqKTsKIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiB0b1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc0NvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXBy
aXZhdGU6Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBz
dGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMxKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihK
U0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNDOjpFeGVjU3Rh
dGUqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
c3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTQ2LDYgKzQ3LDQ5IEBAIHZv
aWQgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNl
OworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyog
SGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTcwLDcgKzExNCw3IEBAIHZvaWQgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pOwogfQogCkBAIC0xMTAsMTEgKzE1NCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RTZXJpYWwKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDYsIDE1LCB0cnVlLCBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlcywg
MCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGVJbmRl
eCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPih2bSwgZ2xvYmFsT2JqZWN0
KTsKLX0KLQogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CkBAIC0xMzQsNiArMTczLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnQKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKwogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ry
b3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCShyZXZpc2lvbiAxNzAwNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMyw4IEBACiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9K
U0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQyLDYgKzM5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKICAgICBERUNMQVJFX0lORk87
CkBAIC0xMDEsNDkgKzk5LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBw
ZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsKIFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3Rh
dGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07
Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCShyZXZpc2lvbiAxNzAwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3
IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3Ry
aW5nQXJyYXlGdW5jdGlvbjIoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1
ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CkBAIC03Miw2ICs3Myw1MiBAQCB2b2lkIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5n
QXR0cldpdGhHZXR0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3RUeXBl
ZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKKworY2xhc3MgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dFR5cGVkZWZzQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
K3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTVGVzdFR5cGVkZWZzKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpT
Qzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25z
dHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1
Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RUeXBlZGVmc1RhYmxlSW5kZXhbMl0gPSB7CkBAIC0x
MjUsNyArMTcyLDcgQEAgdm9pZCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpmaW5pc2hDcgog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RUeXBlZGVmczo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwog
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRh
YmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBAIC0yMzIsMTEgKzI3OSw2IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RUeXBlZGUKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0
VHlwZWRlZnNQcm90b3R5cGVUYWJsZSA9IHsgMTcsIDYzLCB0cnVlLCBKU1Rlc3RUeXBlZGVmc1By
b3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlSW5kZXgg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdFR5cGVkZWZzUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFR5cGVkZWZzUHJv
dG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0VHlwZWRlZnNQcm90b3R5
cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c2VsZihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3RUeXBlZGVmcz4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0
VHlwZWRlZnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CkBAIC0yNTYsNiArMjk4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RU
eXBlZGVmczo6Y3JlYXRlUHJvdG90eXAKICAgICByZXR1cm4gSlNUZXN0VHlwZWRlZnNQcm90b3R5
cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdFR5cGVkZWZzOjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0VHlwZWRlZnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpT
VGVzdFR5cGVkZWZzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFR5
cGVkZWZzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5oCShyZXZpc2lvbiAxNzAwNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0VHlwZWRlZnNfaAogI2RlZmluZSBK
U1Rlc3RUeXBlZGVmc19oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0VHlwZWRlZnMuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U1Rlc3RUeXBlZGVmcygpOwpAQCAtOTYsNTIgKzk0LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJD
b250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFRlc3RUeXBlZGVmcyopOwogVGVzdFR5cGVkZWZzKiB0b1Rlc3RU
eXBlZGVmcyhKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRl
ZnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewot
cHJpdmF0ZToKLSAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6
OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAkocmV2aXNpb24gMTcwMDczKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTYXR0cmlidXRlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5j
bHVkZSAiYXR0cmlidXRlLmgiCkBAIC0zNSw2ICszNiw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworCitjbGFzcyBKU2F0dHJpYnV0ZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIEpTYXR0cmlidXRlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTYXR0cmlidXRlUHJvdG90eXBlPih2bS5oZWFw
KSkgSlNhdHRyaWJ1dGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTYXR0cmlidXRl
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
Cit9OworCitjbGFzcyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNhdHRyaWJ1dGVDb25z
dHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0
ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3Ry
dWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTYXR0cmli
dXRlQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNTksNyArMTAzLDcgQEAgdm9pZCBK
U2F0dHJpYnV0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdAogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTYXR0cmlidXRlUHJvdG90eXBlOjpz
ZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU2F0dHJpYnV0ZTo6Z2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC04MiwxMSArMTI2LDYgQEAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTYXR0cmlidXRlUAogc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlID0geyAyLCAzLCB0cnVlLCBKU2F0dHJpYnV0
ZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlSW5kZXgg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c19pbmZvID0geyAiYXR0
cmlidXRlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTYXR0cmlidXRlUHJvdG90eXBlVGFi
bGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNhdHRyaWJ1dGVQcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU2F0dHJpYnV0
ZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBA
IC0xMDYsNiArMTQ1LDExIEBAIEpTT2JqZWN0KiBKU2F0dHJpYnV0ZTo6Y3JlYXRlUHJvdG90eXBl
KFYKICAgICByZXR1cm4gSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+ZXJyb3JQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNh
dHRyaWJ1dGU6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU2F0dHJpYnV0ZT4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKIHZvaWQgSlNhdHRyaWJ1dGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiB7CiAgICAgSlNhdHRyaWJ1dGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU2F0dHJp
YnV0ZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTYXR0cmlidXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgJKHJldmlzaW9uIDE3MDA3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSwxMSArMjEsOSBAQAogI2lmbmRlZiBKU2F0dHJpYnV0ZV9oCiAjZGVmaW5l
IEpTYXR0cmlidXRlX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgImF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQwLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U2F0dHJpYnV0ZSgpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcxLDYgQEAgcHJvdGVj
dGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CiB9OwogCiBjbGFzcyBKU2F0dHJpYnV0ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKQEAgLTk1LDQ5ICs5Myw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01X
cmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBhdHRyaWJ1dGUqKTsKIGF0dHJpYnV0ZSogdG9hdHRyaWJ1dGUoSlNDOjpKU1ZhbHVl
KTsKIAotY2xhc3MgSlNhdHRyaWJ1dGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTYXR0cmlidXRlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTYXR0cmlidXRlUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNhdHRyaWJ1dGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTYXR0cmli
dXRlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkg
eyB9Ci19OwotCi1jbGFzcyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNhdHRyaWJ1dGVD
b25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJp
YnV0ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3Jl
YWRvbmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNyZWFkb25seS5jcHAJKHJldmlzaW9uIDE3MDA3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTcmVh
ZG9ubHkuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgInJlYWRvbmx5
LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBAIC0zMSw2ICszMiw0OSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNyZWFk
b25seUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNyZWFkb25seVByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTcmVhZG9ubHlQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNyZWFkb25s
eVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRv
bmx5UHJvdG90eXBlPih2bS5oZWFwKSkgSlNyZWFkb25seVByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgSlNyZWFkb25seVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNyZWFkb25seUNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNyZWFkb25seUNv
bnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6
CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU3Jl
YWRvbmx5Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAg
IEpTcmVhZG9ubHlDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU3JlYWRvbmx5Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU3JlYWRvbmx5Q29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERF
Q0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFi
bGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU3JlYWRvbmx5Q29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNTUsNyArOTks
NyBAQCB2b2lkIEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNyZWFkb25seVBy
b3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNyZWFkb25s
eTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC03NSwxMSArMTE5
LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTcmVhZG9ubHlQcgogc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSBKU3JlYWRvbmx5UHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpT
cmVhZG9ubHlQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNyZWFkb25seVByb3RvdHlwZVRhYmxl
SW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU3JlYWRvbmx5UHJvdG90eXBlOjpzX2luZm8gPSB7
ICJyZWFkb25seVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU3JlYWRvbmx5UHJvdG90eXBl
VGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNyZWFkb25seVByb3RvdHlwZSkgfTsKIAot
SlNPYmplY3QqIEpTcmVhZG9ubHlQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNyZWFkb25s
eT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNyZWFkb25seVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAg
LTk5LDYgKzEzOCwxMSBAQCBKU09iamVjdCogSlNyZWFkb25seTo6Y3JlYXRlUHJvdG90eXBlKFZN
CiAgICAgcmV0dXJuIEpTcmVhZG9ubHlQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBKU3JlYWRvbmx5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNyZWFk
b25seTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTcmVhZG9ubHk+KHZtLCBnbG9iYWxPYmpl
Y3QpOworfQorCiB2b2lkIEpTcmVhZG9ubHk6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7
CiAgICAgSlNyZWFkb25seSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTcmVhZG9ubHkqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3Jl
YWRvbmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuaAkocmV2aXNpb24gMTcwMDc0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNyZWFkb25seV9oCiAjZGVmaW5lIEpTcmVhZG9ubHlf
aAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgi
CiAjaW5jbHVkZSAicmVhZG9ubHkuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTcmVhZG9ubHkoKTsK
ICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3Mg
SlNyZWFkb25seU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5
ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCByZWFkb25s
eSopOwogcmVhZG9ubHkqIHRvcmVhZG9ubHkoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNyZWFk
b25seVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgot
ICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNyZWFkb25seVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewot
ICAgICAgICBKU3JlYWRvbmx5UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTcmVhZG9ubHlQcm90b3R5cGU+KHZtLmhlYXApKSBKU3JlYWRvbmx5UHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5G
TzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU3JlYWRvbmx5UHJvdG90eXBlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6
OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU3JlYWRv
bmx5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToK
LSAgICBKU3JlYWRvbmx5Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotICAgIHsKLSAgICAgICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpT
cmVhZG9ubHlDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
fTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233350</attachid>
            <date>2014-06-18 22:26:44 -0700</date>
            <delta_ts>2014-06-19 12:04:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140618222622.patch</filename>
            <type>text/plain</type>
            <size>175420</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOCAg
SmFtZXMgQ3JhaWcgIDxqY3JhaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEFYSTogZXhwb3NlIGFyaWEtcmVsZXZhbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSlNBdWRpb0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNPZmZsaW5lQXVkaW9Db250ZXh0
LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
QXJyYXlCdWZmZXIuaD4KQEAgLTQyLDkgKzQzLDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQXVk
aW9Db250ZXh0Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNBdWRpb0NvbnRl
eHQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQXVkaW9Db250ZXh0Q29uc3RydWN0b3IqIGpz
Q29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNBdWRpb0NvbnRleHRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNh
bGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2Fz
dDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBpZiAoIWpzQ29u
c3RydWN0b3IpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgIkF1ZGlvQ29udGV4dCBjb25zdHJ1Y3RvciBjYWxsZWUgaXMgdW5hdmFp
bGFibGUiKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplCiAgICAgcmV0dXJuIHdyYXA8SlNCbG9i
PihnbG9iYWxPYmplY3QsIGJsb2IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTQmxvYkNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEpTQmxvYkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQmxv
YkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2Fs
bGVlKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVj
dG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJC
bG9iIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShy
ZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJKU0Ny
eXB0by5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0
YUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5
IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHRvSFRNTEZvcm1FbGVtZW4KICAgICByZXR1cm4g
dmFsdWUuaW5oZXJpdHMoSlNIVE1MRm9ybUVsZW1lbnQ6OmluZm8oKSkgPyAmanNDYXN0PEpTSFRN
TEZvcm1FbGVtZW50Kj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RPTUZvcm1EYXRhQ29uc3RydWN0b3I6OmNvbnN0cnVj
dEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0RP
TUZvcm1EYXRhQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNET01Gb3JtRGF0
YUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2Fs
bGVlKCkpOwogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gMDsKICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NTWltZVR5cGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTQx
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIkpTRE9NTWlt
ZVR5cGVBcnJheS5oIgogCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NTWltZVR5cGUuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGx1Z2luQXJyYXlDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNET01QbHVn
aW5BcnJheS5oIgogCiAjaW5jbHVkZSAiRE9NUGx1Z2luQXJyYXkuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVBsdWdpbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVBsdWdpbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01QbHVnaW5DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0RPTVBsdWdp
bi5oIgogCi0jaW5jbHVkZSAiRE9NUGx1Z2luLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01NaW1lVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDExIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKICNpbmNs
dWRlICJKU0RhdGFDdWUuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw5ICs0Nyw5IEBAIHZv
aWQgSlNEYXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMKIH0KICNlbmRpZgogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YUN1ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTRGF0YUN1ZUNvbnN0
cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTRGF0YUN1ZUNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBjYXN0ZWRUaGlzID0ganNDYXN0
PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkRhdGFUcmFu
c2Zlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJF
dmVudEhlYWRlcnMuaCIKICNpbmNsdWRlICJFdmVudEludGVyZmFjZXMuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEYXRh
VHJhbnNmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmls
ZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIuaCIKIAogI2luY2x1ZGUgIkZpbGVSZWFk
ZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5
QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkpTSGlzdG9y
eS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKICNpbmNsdWRlICJJ
REJJbmRleC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNJREJD
dXJzb3IuaCIKICNpbmNsdWRlICJKU0lEQkN1cnNvcldpdGhWYWx1ZS5oIgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJh
c2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
SURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCT2Jq
ZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0lEQk9i
amVjdFN0b3JlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvSlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0lEQkluZGV4LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lk
IEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTSFRNTEltYWdl
RWxlbWVudFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVu
dDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKIH0KIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2UoRXhlY1N0YXRlKiBleGVj
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKIAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTQx
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU0xvY2F0aW9uLmgiCiAKLSNpbmNsdWRlICJMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNv
dXJjZVN0YXRlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU01lZGlhU291
cmNlU3RhdGVzLmgiCiAKLSNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRlcy5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFtQ2Fw
YWJpbGl0aWVzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbUNhcGFiaWxpdGllc0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkpTQWxsQXVkaW9DYXBhYmlsaXRp
ZXMuaCIKICNpbmNsdWRlICJKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTWVk
aWFTdHJlYW1DYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIK
ICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2Vy
dmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTTXV0YXRp
b25PYnNlcnZlcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTTXV0YXRpb25PYnNlcnZlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpAQCAtNTMsNyArNTMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTTXV0YXRpb25PCiAgICAgaWYgKCFv
YmplY3QgfHwgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxE
YXRhKSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJDYWxsYmFjayBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rp
b24iKSk7CiAKLSAgICBKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3Rv
ciA9IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgp
KTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01D
b25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBSZWZQdHI8SlNNdXRhdGlv
bkNhbGxiYWNrPiBjYWxsYmFjayA9IEpTTXV0YXRpb25DYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwg
anNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBqc09ic2VydmVy
ID0gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgTXV0
YXRpb25PYnNlcnZlcjo6Y3JlYXRlKGNhbGxiYWNrLnJlbGVhc2UoKSkpKTsKICAgICBQcml2YXRl
TmFtZSBwcm9wZXJ0eU5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3
MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJK
U1NRTFJlc3VsdFNldFJvd0xpc3QuaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUg
IlNRTFJlc3VsdFNldFJvd0xpc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
blN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlICJKU1NRTFRyYW5zYWN0aW9uU3luYy5oIgogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTU1FMUmVzdWx0U2V0LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0jaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NiArMjEsNyBAQAogI2luY2x1ZGUgIkpTU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIlNWR0V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNWR0xl
bmd0aENvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVk
V29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsOSArNTAsOSBAQCB2b2lkIEpTU2hhcmVkV29ya2VyOjp2aXNpdEFkZGl0aW9uYWxD
aGlsCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U1NoYXJlZFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTU2hhcmVkV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1No
YXJlZFdvcmtlckNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTU2hhcmVkV29y
a2VyQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmpl
Y3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5j
YWxsZWUoKSk7CiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU3RvcmFnZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKIAotI2luY2x1ZGUgIlN0
b3JhZ2UuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0lk
ZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2VDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdF
X0hBTkRMRVJTKQogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNVc2Vy
TWVzc2FnZUhhbmRsZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDE1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSlNXZWJLaXRQb2ludC5oIgogCi0jaW5jbHVkZSAiV2ViS2l0
UG9pbnQuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJLaXRQb2ludChFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViS2l0
UG9pbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvciog
anNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1dlYktpdFBvaW50Q29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nh
c3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAKICAgICBmbG9hdCB4
ID0gMDsKICAgICBmbG9hdCB5ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTAgKzI5LDExIEBACiAjaW5jbHVkZSAiSlNXb3JrZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTTWVzc2Fn
ZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRv
d0N1c3RvbS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKQEAgLTQ0LDkgKzQ1LDkgQEAgSlNDOjpKU1ZhbHVlIEpTV29ya2VyOjpwb3N0TWVzc2Fn
ZShKU0M6OgogICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCAmaW1wbCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dvcmtlckNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU1dvcmtlcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1dvcmtlckNv
bnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTV29ya2VyQ29uc3RydWN0b3IqPihl
eGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3Ig
PSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAKICAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0NyeXB0
b0tleS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiSlNGaWxlTGlzdC5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC04MDMsMTIgKzgwMyw5
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIGlmICgkaGFzUGFyZW50KSB7CiAgICAgICAgICRo
ZWFkZXJJbmNsdWRlc3siJHBhcmVudENsYXNzTmFtZS5oIn0gPSAxOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgICRo
ZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4ifSA9IDE7CisgICAgICAg
ICRoZWFkZXJJbmNsdWRlc3siSlNET01XcmFwcGVyLmgifSA9IDE7CiAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT5pc0V4Y2VwdGlvbikgewogICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVu
dGltZS9FcnJvclByb3RvdHlwZS5oPiJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+In0gPSAxOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC04MjAsNyArODE3LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsKICAgICB9
CiAgICAgCi0gICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9KU09iamVjdC5oPiJ9ID0gMTsK
ICAgICAkaGVhZGVySW5jbHVkZXN7IlNWR0VsZW1lbnQuaCJ9ID0gMSBpZiAkY2xhc3NOYW1lID1+
IC9eSlNTVkcvOwogCiAgICAgbXkgJGltcGxUeXBlID0gJGludGVyZmFjZU5hbWU7CkBAIC04OTUs
NyArODkxLDEwIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgICMgUHJvdG90eXBl
Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3Jl
YXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKSB1bmxlc3Mg
SXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSk7CisgICAgdW5sZXNzIChJc0RPTUdsb2JhbE9i
amVjdCgkaW50ZXJmYWNlKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTtcbiIpOworICAgIH0KIAogICAgICRoZWFkZXJUcmFpbGluZ0luY2x1ZGVzeyIke2NsYXNz
TmFtZX1DdXN0b20uaCJ9ID0gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDdXN0b21IZWFkZXIifTsKIApAQCAtMTExNCw2ICsxMTEzLDcgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgfQogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIpOwor
CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpW
TSYsIEpTQzo6U3RydWN0dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+LCBKU0RPTVdpbmRvd1No
ZWxsKik7XG4iKTsKQEAgLTExMjYsMTUgKzExMjYsMTYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBBU1NFUlQo
aW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB9XG5cbiIpOwotCiAgICAgfQogCiAgICAgIyBzdHJ1Y3R1cmUgZmxhZ3MKLSAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
ICIpOwotICAgIGZvcmVhY2ggbXkgJHN0cnVjdHVyZUZsYWcgKHNvcnQgKGtleXMgJXN0cnVjdHVy
ZUZsYWdzKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkc3RydWN0dXJlRmxhZyAu
ICIgfCAiKTsKKyAgICBpZiAoJXN0cnVjdHVyZUZsYWdzKSB7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gIik7
CisgICAgICAgIGZvcmVhY2ggbXkgJHN0cnVjdHVyZUZsYWcgKHNvcnQgKGtleXMgJXN0cnVjdHVy
ZUZsYWdzKSkgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgJHN0cnVjdHVyZUZs
YWcgLiAiIHwgIik7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkJh
c2U6OlN0cnVjdHVyZUZsYWdzO1xuIik7CiAgICAgfQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJCYXNlOjpTdHJ1Y3R1cmVGbGFncztcbiIpOwogCiAgICAgIyBJbmRleCBzZXR0ZXIKICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIi
fSkgewpAQCAtMTE5NiwxNCArMTE5Nyw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJcbiIpOwogCiAgICAgIyBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9u
LgotICAgIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24oXEBoZWFkZXJDb250ZW50LCAkY2xh
c3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7Ci0KLSAgICBpZiAoISRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7Ci0gICAgICAg
ICRoZWFkZXJJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7Ci0gICAgICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7Ci0gICAg
ICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgifSA9
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxA
aGVhZGVyQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwor
ICAgIGlmIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRpbnRlcmZhY2UpKSB7Cisg
ICAgICAgIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24oXEBoZWFkZXJDb250ZW50LCAkY2xh
c3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgfQogCiAgICAgaWYgKCRo
YXNGb3J3YXJkRGVjbGFyaW5nRnVuY3Rpb25zKSB7CkBAIC0xMjUxLDYgKzEyNDYsMTUgQEAgc3Vi
IEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoSGFzQ3VzdG9tQ29u
c3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIi8v
IEN1c3RvbSBjb25zdHJ1Y3RvclxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0JHtjbGFzc05hbWV9KEpT
Qzo6RXhlY1N0YXRlKik7XG5cbiIpOworICAgIH0KKworICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpKSB7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJib29sIGZpbGwke2ludGVyZmFjZU5hbWV9SW5pdCgke2ludGVy
ZmFjZU5hbWV9SW5pdCYsIEpTRGljdGlvbmFyeSYpO1xuXG4iKTsKKyAgICB9CisKICAgICBteSAk
Y29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0
cmluZygkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG59IC8vIG5hbWVz
cGFjZSBXZWJDb3JlXG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8g
JHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwpAQCAtMTY5
Miw2ICsxNjk2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIC0gQWRkIGRl
ZmF1bHQgaGVhZGVyIHRlbXBsYXRlCiAgICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsIEdlbmVy
YXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVyKCRpbnRlcmZhY2UpKTsKIAorICAgICRpbXBs
SW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7Ijx3dGYv
R2V0UHRyLmg+In0gPSAxOwogICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5Lmg+In0gPSAxIGlmICRpbmRleGVkR2V0dGVyRnVuY3Rpb247CiAKQEAgLTE3MzIsMTAg
KzE3MzcsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgfQogCiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAkZW5kQXBwbGVDb3B5cmlnaHQpIGlmICRpbkFwcGxlQ29w
eXJpZ2h0OworCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICB9CiAKICAg
ICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwIHx8ICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiTm9JbnRlcmZhY2VPYmplY3QifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwi
Ly8gQXR0cmlidXRlc1xuXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIvLyBBdHRy
aWJ1dGVzXG5cbiIpOwogICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFj
ZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAgIG5leHQgaWYgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRm9yd2FyZERlY2xhcmVJbkhlYWRlciJ9OwogCkBA
IC0xNzU5LDggKzE3NjYsMjUgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgIG15ICRjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZSA9ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFt
ZSAuICJDb25zdHJ1Y3RvciI7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQg
JHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKICAgICAg
ICAgfQorCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICB9CisKKyAgICAj
IEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24uCisgICAgaWYgKCFIZWFkZXJOZWVkc1Byb3RvdHlw
ZURlY2xhcmF0aW9uKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIEdlbmVyYXRlUHJvdG90eXBlRGVj
bGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFj
ZU5hbWUpOworICAgIH0KKworICAgICMgQWRkIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uCisgICAg
aWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9JbnRlcmZhY2VPYmplY3Qi
fSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKKyAgICAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9y
In0pIHsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50LmgifSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xh
cmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VO
YW1lKTsKICAgICB9CiAKKwogICAgIG15IEBoYXNoS2V5cyA9ICgpOwogICAgIG15IEBoYXNoVmFs
dWUxID0gKCk7CiAgICAgbXkgQGhhc2hWYWx1ZTIgPSAoKTsKQEAgLTE5NDQsMTIgKzE5NjgsNiBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c19p
bmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9UHJvdG90eXBlXCIsICZCYXNlOjpzX2lu
Zm8sICYke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgk
e2NsYXNzTmFtZX1Qcm90b3R5cGUpIH07XG5cbiIpOwogICAgIH0KLSAgICB1bmxlc3MgKElzRE9N
R2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNPYmplY3QqICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTwke2NsYXNzTmFtZX0+KHZtLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKLSAgICB9CiAKICAgICBpZiAoUHJvdG90eXBlT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIG15ICRudW1Qcm90b3R5
cGVBdHRyaWJ1dGVzID0gUHJvdG90eXBlQXR0cmlidXRlQ291bnQoJGludGVyZmFjZSk7CkBAIC0y
MDUzLDEyICsyMDcxLDE3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiSlNPYmplY3QqICR7Y2xhc3NOYW1lfTo6Y3JlYXRlUHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBpZiAoJGhhc1BhcmVudCAmJiAkcGFyZW50
Q2xhc3NOYW1lIG5lICJKU0M6OkRPTU5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGdsb2JhbE9iamVjdCwgJHtwYXJlbnRDbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKHZtLCBnbG9i
YWxPYmplY3QpKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAke2Ns
YXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCAke3Bh
cmVudENsYXNzTmFtZX06OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpO1xuIik7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBteSAkcHJvdG90eXBlID0gJGludGVyZmFjZS0+
aXNFeGNlcHRpb24gPyAiZXJyb3JQcm90b3R5cGUiIDogIm9iamVjdFByb3RvdHlwZSI7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90
eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT4ke3Byb3RvdHlwZX0o
KSkpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OworCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNPYmplY3QqICR7Y2xhc3NOYW1lfTo6
Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPCR7Y2xhc3NOYW1lfT4odm0sIGdsb2Jh
bE9iamVjdCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAg
IH0KIAogICAgIGlmICghJGhhc1BhcmVudCkgewpAQCAtNDI2Niw5ICs0Mjg5LDYgQEAgc3ViIEdl
bmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjbGFz
cyAke3Byb3RvdHlwZUNsYXNzTmFtZX0gOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHtc
biIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInB1YmxpYzpcbiIpOwogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlO1xuIik7
Ci0gICAgdW5sZXNzIChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpOwotICAgIH0KIAogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgJHtwcm90b3R5cGVDbGFzc05hbWV9KiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB7XG4iKTsKQEAg
LTQzNDcsMTAgKzQzNjcsOSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uCiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogCiAgICAgaWYgKElzQ29uc3RydWN0
YWJsZSgkaW50ZXJmYWNlKSAmJiAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkQ29uc3RydWN0b3IifSkgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwcm90ZWN0
ZWQ6XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0JHtjbGFzc05hbWV9KEpTQzo6RXhl
Y1N0YXRlKik7XG4iKTsKLQogICAgICAgICBpZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRl
cmZhY2UpKSB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwcm90ZWN0ZWQ6XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNT
dGF0ZSopO1xuIik7CiAgICAgICAgICAgICBteSBAY29uc3RydWN0b3JzID0gQHskaW50ZXJmYWNl
LT5jb25zdHJ1Y3RvcnN9OwogICAgICAgICAgICAgaWYgKEBjb25zdHJ1Y3RvcnMgPiAxKSB7CiAg
ICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkY29uc3RydWN0b3IgKEBjb25zdHJ1Y3RvcnMpIHsK
QEAgLTQzNjcsMTAgKzQzODYsNiBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9u
CiAgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn07XG5cbiIpOwogCi0gICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50Iikp
IHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCBmaWxsJHtpbnRlcmZhY2VOYW1l
fUluaXQoJHtpbnRlcmZhY2VOYW1lfUluaXQmLCBKU0RpY3Rpb25hcnkmKTtcblxuIik7Ci0gICAg
fQotCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0
cnVjdG9yIn0pIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7CiBjbGFzcyBK
UyR7aW50ZXJmYWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9y
V2l0aERvY3VtZW50IHsKQEAgLTQ2OTQsMTEgKzQ3MDksMTEgQEAgc3ViIEdlbmVyYXRlQ29uc3Ry
dWN0b3JIZWxwZXJNZXRob2RzCiAgICAgfSBlbHNpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVj
dG9yKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxPYmplY3QpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke2Ns
YXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpO1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgJHtjbGFzc05hbWV9OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIE5vbmUpO1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwogICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7Ci0gICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgJHtwcm90b0NsYXNzTmFtZX06OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke2NsYXNzTmFt
ZX06OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTtcbiIpOwogICAgIH0KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKCR7bGVhc3RDb25zdHJ1Y3Rvckxl
bmd0aH0pLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7XG4iKSBpZiBkZWZpbmVk
ICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBy
ZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yVGFibGVWYWx1
ZXMsICp0aGlzKTtcbiIpIGlmIENvbnN0cnVjdG9ySGFzUHJvcGVydGllcygkaW50ZXJmYWNlKTsK
QEAgLTQ3NTIsNCArNDc2NywxMSBAQCBzdWIgSXNDb25zdHJ1Y3RhYmxlCiAgICAgcmV0dXJuIEhh
c0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifTsKIH0KIAorc3ViIEhlYWRlck5lZWRzUHJvdG90eXBl
RGVjbGFyYXRpb24KK3sKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisKKyAgICByZXR1cm4g
SXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbURlZmluZU93blByb3BlcnR5T25Qcm90b3R5
cGUifTsKK30KKwogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShy
ZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3
LDU0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UoSlNDOjpF
eGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKKworY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQor
fTsKKworY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RD
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGlj
OgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3Ioc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEFjdGl2ZURPTU9iamVjdFRh
YmxlSW5kZXhbNF0gPSB7CkBAIC04Miw3ICsxMjYsNyBAQCB2b2lkIEpTVGVzdEFjdGl2ZURPTU9i
amVjdENvbnN0cnVjdG9yOjpmCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpzZWxmKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6Omdl
dFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtMTA1LDExICsxNDksNiBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0QWN0aXZlCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZVRhYmxlID0geyAyLCAzLCBm
YWxzZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVz
dEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RBY3RpdmVET01P
YmplY3RQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
OjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEFjdGl2ZURPTU9iamVjdD4odm0sIGdsb2JhbE9iamVj
dCk7Ci19Ci0KIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTI5LDYg
KzE2OCwxMSBAQCBKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVhdGVQCiAgICAg
cmV0dXJuIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAor
SlNPYmplY3QqIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdEFjdGl2ZURPTU9iamVjdD4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpT
VGVzdEFjdGl2ZURPTU9iamVjdCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEFjdGl2
ZURPTU9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAko
cmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEs
OCBAQAogI2lmbmRlZiBKU1Rlc3RBY3RpdmVET01PYmplY3RfaAogI2RlZmluZSBKU1Rlc3RBY3Rp
dmVET01PYmplY3RfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAg
ICAgfkpTVGVzdEFjdGl2ZURPTU9iamVjdCgpOwpAQCAtOTYsNDkgKzk0LDYgQEAgaW5saW5lIHZv
aWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RBY3RpdmVET01PYmplY3QqKTsKIFRl
c3RBY3RpdmVET01PYmplY3QqIHRvVGVzdEFjdGl2ZURPTU9iamVjdChKU0M6OkpTVmFsdWUpOwog
Ci1jbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlw
ZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7
IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1
YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZp
c2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw1
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rp
b25Bbm90aGVyRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
ckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBh
Y3RIYXNoSW5kZXggSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUYWJsZUluZGV4WzJdID0gewpAQCAt
NzYsNyArMTIwLDcgQEAgdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOgog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC05NiwxMSArMTQwLDYgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEN1c3RvbQogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlID0geyAxLCAxLCBmYWxzZSwgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RDdXN0b21OYW1lZEdldHRlclBy
b3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6
OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KHZtLCBnbG9iYWxPYmpl
Y3QpOwotfQotCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTIw
LDYgKzE1OSwxMSBAQCBKU09iamVjdCogSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmNyZWF0CiAg
ICAgcmV0dXJuIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7
CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0UHJvdG90eXBlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
Kwogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2Vs
bCkKIHsKICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuaAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyX2gKICNkZWZpbmUgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAogCi0jaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFBy
b3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTEwMCw0OSArOTgsNiBAQCBpbmxp
bmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEN1c3RvbU5hbWVkR2V0dGVy
Kik7CiBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHRvVGVzdEN1c3RvbU5hbWVkR2V0dGVyKEpTQzo6
SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAg
ICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZT4odm0uaGVh
cCkpIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1
cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRl
OgotICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBy
ZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKQEAgLTM4
LDYgKzM5LDUyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKKworY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwor
ICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
VGVzdEV2ZW50Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVj
dERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtMTAwLDcgKzE0Nyw3IEBAIHZvaWQgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjoKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTEz
NSwxMSArMTgyLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50Qwog
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFi
bGUgPSB7IDMsIDcsIHRydWUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZh
bHVlcywgMCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNv
bnN0IENsYXNzSW5mbyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7
ICJUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKQEAgLTE1OSw2ICsyMDEsMTEgQEAgSlNPYmplY3QqIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3I6OmNyZWF0ZQogICAgIHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6
OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPih2bSwgZ2xv
YmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpkZXN0cm95KEpT
Qzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yKj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JfaAogI2RlZmluZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yX2gKIAotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUg
IlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVj
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09i
amVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDYgKzM5LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RFdmVudENv
bnN0cnVjdG9yKCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzQsNyArNzIsNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsK
IH07CiAKIGNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JPd25lciA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7CkBAIC05Nyw1MiArOTQsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNv
bnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKIFRlc3RFdmVudENvbnN0
cnVjdG9yKiB0b1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwot
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
clByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
clByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclBy
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQot
fTsKLQotY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
LSAgICB7Ci0gICAgICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3Ioc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEV2ZW50Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07
Ci0KIGJvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckluaXQmLCBKU0RpY3Rpb25hcnkmKTsKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5j
cHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0
LDUzIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0
aW9uQWRkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVF
dmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQo
SlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBK
U1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAg
c3RhdGljIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlPih2
bS5oZWFwKSkgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0
RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMg
Y29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0RXZlbnRUYXJnZXRUYWJsZUluZGV4
WzJdID0gewpAQCAtODUsNyArMTI5LDcgQEAgdm9pZCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yOjpmaW5pcwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMTQsMTEgKzE1OCw2IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RFdmVudFQKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSA9IHsgNCwgNywgZmFsc2UsIEpTVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlVGFi
bGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpz
X2luZm8gPSB7ICJUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsK
LSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50VGFyZ2V0Pih2bSwgZ2xvYmFs
T2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTEzOCw2
ICsxNzcsMTEgQEAgSlNPYmplY3QqIEpTVGVzdEV2ZW50VGFyZ2V0OjpjcmVhdGVQcm90bwogICAg
IHJldHVybiBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVj
dCogSlNUZXN0RXZlbnRUYXJnZXQ6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVu
dFRhcmdldD4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6
OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KGNlbGwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RFdmVudFRhcmdldF9oCiAjZGVm
aW5lIEpTVGVzdEV2ZW50VGFyZ2V0X2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RFdmVudFRhcmdldC5oIgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2Jq
ZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00MSw2ICszOCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6
SlNDZWxsKik7CkBAIC0xMDQsNDkgKzEwMiw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4
dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0RXZlbnRUYXJnZXQqKTsKIFRlc3RFdmVudFRhcmdldCogdG9UZXN0
RXZlbnRUYXJnZXQoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlPih2bS5oZWFwKSkgSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAg
fQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEV2ZW50
VGFyZ2V0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVy
ZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRD
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGlj
OgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsK
LSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdEV4
Y2VwdGlvbi5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJVUkwuaCIKQEAgLTM1LDYgKzM2LDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworCitjbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0RXhjZXB0aW9uVGFibGVJbmRleFsyXSA9IHsKQEAgLTcz
LDcgKzExNyw3IEBAIHZvaWQgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3I6OmZpbmlzaEMKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RFeGNlcHRpb25Qcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwog
fQogCkBAIC05MywxMSArMTM3LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dEV4Y2VwdAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVU
YWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXMs
IDAsIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFeGNlcHRpb25Qcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlVGFibGUsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV4
Y2VwdGlvbj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0RXhjZXB0aW9uUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwpAQCAtMTE3LDYgKzE1NiwxMSBAQCBKU09iamVjdCogSlNUZXN0RXhjZXB0aW9uOjpj
cmVhdGVQcm90b3R5CiAgICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZXJyb3JQcm90b3R5cGUoKSkpOwog
fQogCitKU09iamVjdCogSlNUZXN0RXhjZXB0aW9uOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8
SlNUZXN0RXhjZXB0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RFeGNl
cHRpb246OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0RXhjZXB0aW9u
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXhjZXB0aW9uKj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5oCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDExICsyMSw5IEBACiAjaWZuZGVmIEpTVGVzdEV4Y2VwdGlvbl9oCiAjZGVmaW5lIEpT
VGVzdEV4Y2VwdGlvbl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvclByb3RvdHlwZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDAsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U1Rlc3RFeGNlcHRpb24oKTsKQEAgLTk2LDQ5ICs5NSw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVy
Q29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXhjZXB0aW9uKik7CiBUZXN0RXhjZXB0aW9uKiB0b1Rl
c3RFeGNlcHRpb24oSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
c2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEV4Y2Vw
dGlvblByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19Owot
Ci1jbGFzcyBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RFeGNlcHRpb25Db25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0RXhj
ZXB0aW9uQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFeGNlcHRpb25Db25z
dHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogCkBAIC0zMSw2ICszMiw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1
dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3Mg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERF
Q0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFi
bGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0g
ewpAQCAtNTUsNyArOTksNyBAQCB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1
Y3RvCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0UHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC03NSwxMSArMTE5LDYgQEAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdlbmVyYQogc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUs
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTk5LDYgKzEzOCwxMSBAQCBKU09iamVjdCogSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZTo6Y3JlCiAgICAgcmV0dXJuIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGU+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCiAj
ZGVmaW5lIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVfaAogCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90
eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBn
ZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAog
Y2xhc3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hh
bmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4
dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopOwogVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUqIHRvVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoSlNDOjpKU1ZhbHVlKTsKIAotY2xh
c3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToK
LSAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQsNiArNzQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDQoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgor
CiAvLyBBdHRyaWJ1dGVzCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25k
aXRpb24yMykKQEAgLTEyMSw2ICsxMjIsNTQgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VTdXBwbAogdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKwor
Y2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVz
dEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSopOworI2lmIEVOQUJMRShURVNUX0lOVEVSRkFDRSkK
KyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0Nl
bGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyNlbmRpZiAvLyBFTkFCTEUoVEVTVF9JTlRFUkZB
Q0UpCit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1Rlc3RJbnRlcmZhY2VUYWJsZUluZGV4WzRdID0gewpAQCAtMjY2LDcgKzMx
NSw3IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaEMKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJl
aWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZh
bHVlcywgKnRoaXMpOwogfQpAQCAtNDM4LDExICs0ODcsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0SW50ZXJmCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZVRhYmxlID0geyAxNywgNjMsIHRydWUsIEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVUYWJsZUluZGV4IH07
CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJU
ZXN0SW50ZXJmYWNlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEludGVyZmFjZVBy
b3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6c2VsZihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2U+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpT
VGVzdEludGVyZmFjZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTQ2Miw2ICs1MDYsMTEgQEAgSlNPYmplY3QqIEpT
VGVzdEludGVyZmFjZTo6Y3JlYXRlUHJvdG90eQogICAgIHJldHVybiBKU1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RJbnRlcmZhY2U6OmdldFByb3Rv
dHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2U+KHZtLCBnbG9iYWxPYmplY3QpOworfQor
CiB2b2lkIEpTVGVzdEludGVyZmFjZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAg
ICBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZh
Y2UqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHJldmlzaW9uIDE3MDE0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDggQEAKIAogI2lmIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIKLSNp
bmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09i
amVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1
dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKQEAgLTEyMyw1NCArMTIxLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJbnRlcmZhY2UqKTsKIFRlc3RJbnRlcmZhY2UqIHRv
VGVzdEludGVyZmFjZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07
Ci0KLWNsYXNzIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVm
IERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1Rlc3RJbnRlcmZhY2UoSlNDOjpFeGVjU3RhdGUqKTsKLSNpZiBFTkFCTEUoVEVTVF9JTlRFUkZB
Q0UpCi0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0jZW5kaWYgLy8gRU5BQkxFKFRFU1RfSU5U
RVJGQUNFKQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE3MDE0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLy8gRnVuY3Rpb25zCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CisKK2NsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNz
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25z
dHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVi
bGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0
cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTYyLDcgKzEwNiw3IEBAIHZvaWQgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9
CiAKQEAgLTg1LDExICsxMjksNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
TWVkaWFRCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGVUYWJsZSA9IHsgMiwgMywgdHJ1ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTA5LDYgKzE0OCwxMSBAQCBKU09iamVjdCogSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6CiAgICAgcmV0dXJuIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCog
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lk
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwp
CiB7CiAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihjZWxsKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24gMTcwMTQxKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5k
ZWYgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcl9oCiAjZGVmaW5lIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIK
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlND
OjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Qzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoKTsKICAgICBE
RUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFw
cGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwogVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqIHRvVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xh
c3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoK
LSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotICAgIHsKLSAgICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsK
LQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
VGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCkBAIC0zNCw2ICszNSw3
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
KworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
clByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQorfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitw
dWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRp
YyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Io
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xB
UkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKK2NsYXNzIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50IEJhc2U7CisKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I+
KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0KKwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRl
OgorICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworfTsKKwogLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC01
OCw3ICsxMjcsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6CiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogfQogCkBAIC05Niw3ICsxNjUsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JOYW1lZENvbnN0cnVjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90
b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogfQogCkBAIC0xMjIsMTEgKzE5MSw2IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3ROYW1lZEMKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQ
cm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUpIH07
CiAKLUpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2
b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNDYsNiArMjEwLDExIEBA
IEpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGUKICAgICByZXR1cm4gSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0
KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcio+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMiArMjEs
OCBAQAogI2lmbmRlZiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKICNkZWZpbmUgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcl9oCiAKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0ds
b2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQx
LDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBj
cmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yKCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzQsNyArNzEsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKIH07CiAKIGNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lciA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05Nyw3NCArOTMsNiBAQCBpbmxpbmUgdm9pZCog
d3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKIFRlc3RO
YW1lZENvbnN0cnVjdG9yKiB0b1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSk7CiAK
LWNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0g
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAg
IHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KLWNsYXNzIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yV2l0aERvY3VtZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50IEJhc2U7Ci0KLSAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi1w
cml2YXRlOgotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotfTsKLQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
QXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5vZGVQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5v
ZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7
IH0KK307CisKK2NsYXNzIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZUNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3ROb2RlKEpTQzo6RXhlY1N0YXRl
Kik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBj
b25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTY1LDcgKzExMSw3IEBAIHZv
aWQgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJvdG90eXBl
OjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb2RlOjpnZXRQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFk
T25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTkxLDExICsxMzcsNiBAQCBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVByCiBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlIEpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0Tm9k
ZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVJbmRleCB9
OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RO
b2RlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZSwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwogCi1KU09iamVj
dCogSlNUZXN0Tm9kZVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwg
Z2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTExLDcg
KzE1MiwxMiBAQCBKU1Rlc3ROb2RlOjpKU1Rlc3ROb2RlKFN0cnVjdHVyZSogc3RydWN0CiAKIEpT
T2JqZWN0KiBKU1Rlc3ROb2RlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIEpTTm9kZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0
KSkpOworICAgIHJldHVybiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgSlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmpl
Y3QsIEpTTm9kZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Cit9CisKK0pTT2Jq
ZWN0KiBKU1Rlc3ROb2RlOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Tm9kZT4odm0s
IGdsb2JhbE9iamVjdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE5vZGVfaAogI2RlZmluZSBKU1Rl
c3ROb2RlX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTm9kZS5o
IgogI2luY2x1ZGUgIlRlc3ROb2RlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgREVDTEFSRV9JTkZPOwog
CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKQEAgLTY2LDUyICs2NSw2IEBAIHByb3RlY3RlZDoKIH07CiAKIAotY2xhc3MgSlNUZXN0Tm9k
ZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAg
IHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMg
SlNUZXN0Tm9kZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5vZGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb2RlUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROb2Rl
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAg
ICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgIHsKLSAgICAgICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dE5vZGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJv
dGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNUZXN0Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0
YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBG
dW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNQcm90b3R5cGVGdW5jdGlvbk5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKQEAgLTU1LDYgKzU2LDQ5IEBAIHZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWkKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
IHZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNl
cHRpb25BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
b25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBl
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWlu
aXN0aWNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFz
cyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0
b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC03OSw3ICsxMjMsNyBA
QCB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6CiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY1Byb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
OwogfQogCkBAIC0xMjAsMTEgKzE2NCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3ROb25kZXQKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1Byb3RvdHlwZVRhYmxlID0geyA3LCAxNSwgdHJ1ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFi
bGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgJkpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKSB9OwogCi1KU09iamVj
dCogSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rl
c3ROb25kZXRlcm1pbmlzdGljPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTQ0LDYgKzE4MywxMSBAQCBKU09iamVjdCog
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Y3JlYXRlCiAgICAgcmV0dXJuIEpTVGVzdE5vbmRldGVy
bWluaXN0aWNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYzo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vbmRldGVybWlu
aXN0aWM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0
aWM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb25kZXRlcm1pbmlzdGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaAkocmV2aXNpb24gMTcw
MTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
bmRldGVybWluaXN0aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5k
ZWYgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY19oCiAjZGVmaW5lIEpTVGVzdE5vbmRldGVybWluaXN0
aWNfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVy
LmgiCiAjaW5jbHVkZSAiVGVzdE5vbmRldGVybWluaXN0aWMuaCIKLSNpbmNsdWRlIDxydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAg
fkpTVGVzdE5vbmRldGVybWluaXN0aWMoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3
MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY093bmVyIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2
b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOwog
VGVzdE5vbmRldGVybWluaXN0aWMqIHRvVGVzdE5vbmRldGVybWluaXN0aWMoSlNDOjpKU1ZhbHVl
KTsKIAotY2xhc3MgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWND
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAxNzAxNDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShK
U0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC0yOTAsNiArMjkx
LDUyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEoKIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0
T2JqUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkg
eyB9Cit9OworCitjbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RPYmpDb25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0T2JqQ29uc3RydWN0
b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T2JqKEpTQzo6RXhlY1N0YXRlKik7Cisg
ICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxs
KiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RPYmpUYWJsZUluZGV4WzE3XSA9
IHsKQEAgLTQ1NSw3ICs1MDIsNyBAQCB2b2lkIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RPYmo6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAg
ICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1
ZXMsICp0aGlzKTsKIH0KQEAgLTExNzQsMTEgKzEyMjEsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlID0geyAxMzcsIDUxMSwgdHJ1ZSwgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVW
YWx1ZXMsIDAsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmplY3RQcm90b3R5cGUiLCAm
QmFzZTo6c19pbmZvLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0T2JqUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0T2JqUHJvdG90
eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE9iaj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0K
IHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTE5OCw2ICsxMjQwLDExIEBAIEpTT2JqZWN0
KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShWTSYKICAgICByZXR1cm4gSlNUZXN0T2JqUHJv
dG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0T2JqUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0T2JqOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RPYmo6OmRl
c3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0T2JqKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lvbiAxNzAx
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE9ial9o
CiAjZGVmaW5lIEpTVGVzdE9ial9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNp
bmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
KyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+
SlNUZXN0T2JqKCk7CkBAIC0xMDksNTIgKzEwNyw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29u
dGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0T2JqKik7CiBUZXN0T2JqKiB0b1Rlc3RPYmooSlNDOjpKU1Zh
bHVlKTsKIAotY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4odm0uaGVhcCkp
IEpTVGVzdE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0g
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0T2JqUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19Owot
Ci1jbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0T2JqQ29uc3RydWN0b3IqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqQ29uc3RydWN0b3I+KHZt
LmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T2JqKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGlj
IEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpD
b25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24g
MTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw1
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKKworY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSA6IHB1
YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3Mg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
K3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoSlNDOjpFeGVjU3RhdGUqKTsK
KyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzMihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KEpTQzo6
RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRh
YmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yVGFibGVJbmRleFsx
XSA9IHsKQEAgLTEyNCw3ICsxNzQsNyBAQCB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c2VsZih2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigx
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xNTAsMTEgKzIw
MCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVybG8KIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxl
ID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFi
bGVWYWx1ZXMsIDAsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZUlu
ZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUiLCAm
QmFzZTo6c19pbmZvLCAmSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxl
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90
eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KHZtLCBn
bG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CkBAIC0xNzQsNiArMjE5LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzOjoKICAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3Rv
dHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzX2gKICNkZWZpbmUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19o
CiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIK
ICNpbmNsdWRlICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAg
ICB+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAg
LTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNTYgKzky
LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKik7CiBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogdG9UZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyhKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2
YXRlOgotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzMShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIoSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0
YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpT
Qzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC00Niw2ICs0Nyw0OSBAQCB2b2lk
IHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDog
SlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
KyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhh
c2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
clRhYmxlSW5kZXhbMV0gPSB7CkBAIC03MCw3ICsxMTQsNyBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKIH0KIApAQCAtMTEwLDExICsxNTQsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0U2VyaWFsCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyA2LCAxNSwgdHJ1ZSwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAs
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlSW5kZXgg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7
Ci19Ci0KIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwpAQCAtMTM0LDYgKzE3MywxMSBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50CiAgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7
Cit9CisKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMTcwMTQxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsOCBAQAogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
Miw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Y3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiAgICAgREVDTEFSRV9JTkZPOwpA
QCAtMTAxLDQ5ICs5OSw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVy
V28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7CiBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiB0b1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uo
SlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRp
YyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZT4odm0uaGVh
cCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19Owot
Ci1jbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciA6
IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
fTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBA
QCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z0FycmF5RnVuY3Rpb24yKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVu
Y2VUaGF0UmVxdWlyZXNJbmNsdWRlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwpAQCAtNzIsNiArNzMsNTIgQEAgdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoR2V0dAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIHZvaWQgc2V0SlNUZXN0VHlwZWRl
ZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CisKK2NsYXNzIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3Ry
dWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6
CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAg
ICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Citw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOworfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0VHlwZWRlZnNUYWJsZUluZGV4WzJdID0gewpAQCAtMTI1
LDcgKzE3Miw3IEBAIHZvaWQgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3IKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0VHlwZWRlZnM6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAg
ICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUYWJs
ZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtMjMyLDExICsyNzksNiBAQCBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0VHlwZWRlCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFR5
cGVkZWZzUHJvdG90eXBlVGFibGUgPSB7IDE3LCA2MywgdHJ1ZSwgSlNUZXN0VHlwZWRlZnNQcm90
b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGVUYWJsZUluZGV4IH07
CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRl
c3RUeXBlZGVmc1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
KSB9OwogCi1KU09iamVjdCogSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0VHlwZWRlZnM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdFR5
cGVkZWZzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwpAQCAtMjU2LDYgKzI5OCwxMSBAQCBKU09iamVjdCogSlNUZXN0VHlw
ZWRlZnM6OmNyZWF0ZVByb3RvdHlwCiAgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlw
ZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Z2V0UHJvdG90eXBlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdFR5cGVkZWZzPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rl
c3RUeXBlZGVmczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RUeXBl
ZGVmcyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFR5cGVkZWZzKj4oY2VsbCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24gMTcwMTQxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdFR5cGVkZWZzX2gKICNkZWZpbmUgSlNU
ZXN0VHlwZWRlZnNfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdFR5cGVkZWZzLmgiCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNs
dWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNU
ZXN0VHlwZWRlZnMoKTsKQEAgLTk2LDUyICs5NCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29u
dGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0VHlwZWRlZnMqKTsKIFRlc3RUeXBlZGVmcyogdG9UZXN0VHlw
ZWRlZnMoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpT
Qzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdFR5cGVkZWZz
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dFR5cGVkZWZzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0VHlwZWRlZnNQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXBy
aXZhdGU6Ci0gICAgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0VHlwZWRlZnMoSlNDOjpF
eGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERh
dGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNhdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDE3MDE0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJKU2F0dHJpYnV0ZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1
ZGUgImF0dHJpYnV0ZS5oIgpAQCAtMzUsNiArMzYsNDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHkoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKKworY2xhc3MgSlNhdHRyaWJ1dGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU2F0dHJpYnV0ZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZVByb3RvdHlwZT4odm0uaGVhcCkp
IEpTYXR0cmlidXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU2F0dHJpYnV0ZVBy
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQor
fTsKKworY2xhc3MgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTYXR0cmlidXRlQ29uc3RydWN0b3Iq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTYXR0cmlidXRlQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNhdHRyaWJ1dGVD
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTYXR0cmlidXRlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVj
dG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU2F0dHJpYnV0
ZUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU5LDcgKzEwMyw3IEBAIHZvaWQgSlNh
dHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXQKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c2Vs
Zih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNhdHRyaWJ1dGU6OmdldFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtODIsMTEgKzEyNiw2IEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU2F0dHJpYnV0ZVAKIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUgSlNhdHRyaWJ1dGVQcm90b3R5cGVUYWJsZSA9IHsgMiwgMywgdHJ1ZSwgSlNhdHRyaWJ1dGVQ
cm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNhdHRyaWJ1dGVQcm90b3R5cGVUYWJsZUluZGV4IH07
CiBjb25zdCBDbGFzc0luZm8gSlNhdHRyaWJ1dGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgImF0dHJp
YnV0ZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxl
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTYXR0cmlidXRlUHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNhdHRyaWJ1dGVQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNhdHRyaWJ1dGU+
KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTYXR0cmlidXRlUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAt
MTA2LDYgKzE0NSwxMSBAQCBKU09iamVjdCogSlNhdHRyaWJ1dGU6OmNyZWF0ZVByb3RvdHlwZShW
CiAgICAgcmV0dXJuIEpTYXR0cmlidXRlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPmVycm9yUHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTYXR0
cmlidXRlOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNhdHRyaWJ1dGU+KHZtLCBnbG9iYWxP
YmplY3QpOworfQorCiB2b2lkIEpTYXR0cmlidXRlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxs
KQogewogICAgIEpTYXR0cmlidXRlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNhdHRyaWJ1
dGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU2F0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsMTEgKzIxLDkgQEAKICNpZm5kZWYgSlNhdHRyaWJ1dGVfaAogI2RlZmluZSBK
U2F0dHJpYnV0ZV9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKICNpbmNsdWRlICJhdHRyaWJ1dGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Y3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNh
dHRyaWJ1dGUoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MSw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwog
fTsKIAogY2xhc3MgSlNhdHRyaWJ1dGVPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CkBAIC05NSw0OSArOTMsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3Jh
cHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgYXR0cmlidXRlKik7CiBhdHRyaWJ1dGUqIHRvYXR0cmlidXRlKEpTQzo6SlNWYWx1ZSk7
CiAKLWNsYXNzIEpTYXR0cmlidXRlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9i
amVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwotICAgIHN0YXRpYyBKU2F0dHJpYnV0ZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZVByb3RvdHlwZT4odm0uaGVh
cCkpIEpTYXR0cmlidXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU2F0dHJpYnV0
ZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQotfTsKLQotY2xhc3MgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTYXR0cmlidXRlQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTYXR0cmlidXRlQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNhdHRyaWJ1
dGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTYXR0cmlidXRlQ29uc3RydWN0b3Ioc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFk
b25seS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuY3BwCShyZXZpc2lvbiAxNzAxNDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU3JlYWRv
bmx5LmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJyZWFkb25seS5o
IgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIApAQCAtMzEsNiArMzIsNDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzcmVhZG9u
bHlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTcmVhZG9ubHlQcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU3JlYWRvbmx5UHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTcmVhZG9ubHlQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNyZWFkb25s
eVByb3RvdHlwZT4odm0uaGVhcCkpIEpTcmVhZG9ubHlQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEpTcmVhZG9ubHlQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTcmVhZG9ubHlDb25z
dHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNyZWFk
b25seUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBK
U3JlYWRvbmx5Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNyZWFkb25seUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNyZWFkb25seUNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNM
QVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxl
IGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNyZWFkb25seUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU1LDcgKzk5LDcg
QEAgdm9pZCBKU3JlYWRvbmx5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTcmVhZG9ubHlQcm90
b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTcmVhZG9ubHk6
OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtNzUsMTEgKzExOSw2
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU3JlYWRvbmx5UHIKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUgSlNyZWFkb25seVByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU3Jl
YWRvbmx5UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTcmVhZG9ubHlQcm90b3R5cGVUYWJsZUlu
ZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNyZWFkb25seVByb3RvdHlwZTo6c19pbmZvID0geyAi
cmVhZG9ubHlQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNyZWFkb25seVByb3RvdHlwZVRh
YmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTcmVhZG9ubHlQcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU3JlYWRvbmx5UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTcmVhZG9ubHk+
KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTcmVhZG9ubHlQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC05
OSw2ICsxMzgsMTEgQEAgSlNPYmplY3QqIEpTcmVhZG9ubHk6OmNyZWF0ZVByb3RvdHlwZShWTQog
ICAgIHJldHVybiBKU3JlYWRvbmx5UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
SlNyZWFkb25seVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTcmVhZG9u
bHk6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU3JlYWRvbmx5Pih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKwogdm9pZCBKU3JlYWRvbmx5OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewog
ICAgIEpTcmVhZG9ubHkqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU3JlYWRvbmx5Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFk
b25seS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU3JlYWRvbmx5LmgJKHJldmlzaW9uIDE3MDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDExICsyMSw4IEBACiAjaWZuZGVmIEpTcmVhZG9ubHlfaAogI2RlZmluZSBKU3JlYWRvbmx5X2gK
IAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgInJlYWRvbmx5LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVj
dFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5
cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU3JlYWRvbmx5KCk7CiAg
ICAgREVDTEFSRV9JTkZPOwpAQCAtNzIsNyArNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKIGNsYXNzIEpT
cmVhZG9ubHlPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05NSw0OSAr
OTIsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgcmVhZG9ubHkq
KTsKIHJlYWRvbmx5KiB0b3JlYWRvbmx5KEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTcmVhZG9u
bHlQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGlj
IEpTcmVhZG9ubHlQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAg
ICAgICAgSlNyZWFkb25seVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU3JlYWRvbmx5UHJvdG90eXBlPih2bS5oZWFwKSkgSlNyZWFkb25seVByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNyZWFkb25seVByb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNyZWFkb25s
eUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0g
ICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwot
ICAgIHN0YXRpYyBKU3JlYWRvbmx5Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
LSAgICB7Ci0gICAgICAgIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU3Jl
YWRvbmx5Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwot
ICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07
Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233372</attachid>
            <date>2014-06-19 12:04:25 -0700</date>
            <delta_ts>2014-06-19 13:51:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140619120403.patch</filename>
            <type>text/plain</type>
            <size>180192</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOSAg
cGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbQ3VybF0g
Q29tcGlsZSBlcnJvcnMgcmVsYXRlZCB0byBodHRwIGhlYWRlciBmaWVsZCBuYW1lcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNBdWRpb0J1ZmZlci5oIgogI2luY2x1
ZGUgIkpTQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNPZmZsaW5lQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29udGV4
dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KQEAgLTQyLDkgKzQzLDkgQEAg
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTQXVkaW9Db250ZXh0Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpT
QXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNBdWRpb0NvbnRleHQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQXVk
aW9Db250ZXh0Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNBdWRpb0NvbnRl
eHRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVj
dCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNh
bGxlZSgpKTsKICAgICBpZiAoIWpzQ29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkF1ZGlvQ29udGV4dCBjb25z
dHJ1Y3RvciBjYWxsZWUgaXMgdW5hdmFpbGFibGUiKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksOSArNTksOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
CiAgICAgcmV0dXJuIHdyYXA8SlNCbG9iPihnbG9iYWxPYmplY3QsIGJsb2IpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0Js
b2IoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQmxvYkNvbnN0cnVjdG9yKiBqc0Nv
bnN0cnVjdG9yID0ganNDYXN0PEpTQmxvYkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwor
ICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0
cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1l
bnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHRvSFRN
TEZvcm1FbGVtZW4KICAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoSlNIVE1MRm9ybUVsZW1lbnQ6
OmluZm8oKSkgPyAmanNDYXN0PEpTSFRNTEZvcm1FbGVtZW50Kj4oYXNPYmplY3QodmFsdWUpKS0+
aW1wbCgpIDogMDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RPTUZvcm1E
YXRhQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBKU0RPTUZvcm1EYXRhQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0
b3IgPSBqc0Nhc3Q8SlNET01Gb3JtRGF0YUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwor
ICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0
cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gMDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWltZVR5cGVBcnJheUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEs
NyBAQAogI2luY2x1ZGUgIkpTRE9NTWltZVR5cGVBcnJheS5oIgogCiAjaW5jbHVkZSAiRE9NTWlt
ZVR5cGVBcnJheS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
TWltZVR5cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJheUN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NUGx1Z2luQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3
IEBACiAjaW5jbHVkZSAiSlNET01QbHVnaW5BcnJheS5oIgogCiAjaW5jbHVkZSAiRE9NUGx1Z2lu
QXJyYXkuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVBsdWdp
bi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5DdXN0b20uY3BwCShyZXZpc2lv
biAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJKU0RPTVBsdWdpbi5oIgogCi0jaW5jbHVkZSAiRE9NUGx1Z2luLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01NaW1lVHlwZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisKICNpbmNsdWRlICJKU0RhdGFDdWUuaCIKIAorI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00NCw5ICs0Nyw5IEBAIHZvaWQgSlNEYXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMKIH0KICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YUN1
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEpTRGF0YUN1ZUNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTRGF0
YUN1ZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0KiBjYXN0ZWRUaGlzID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2Fs
bGVlKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRy
YW5zZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIu
aCIKIAotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFdmVudEhlYWRlcnMuaCIKICNpbmNsdWRlICJFdmVudElu
dGVyZmFjZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pT
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIu
aCIKIAogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5QnVmZmVyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgIkpTSGlzdG9yeS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklE
QkZhY3RvcnkuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0
b3JlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKICNpbmNsdWRlICJKU0lEQkN1cnNvcldp
dGhWYWx1ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQ
YXRoLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0lEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0lEQkluZGV4LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW1hZ2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFs
T2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTSFRNTEltYWdlRWxlbWVudDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBOb25lKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SW1hZ2UoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKIAogI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kSG9zdC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRXZl
bnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCiAKLSNpbmNsdWRlICJM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNGdW5jdGlvbi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5j
cHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVk
aWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJKU01lZGlhU291cmNlU3RhdGVzLmgiCiAKLSNpbmNsdWRlICJNZWRpYVNv
dXJjZVN0YXRlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFt
Q2FwYWJpbGl0aWVzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbUNhcGFiaWxp
dGllc0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1
ZGUgIkpTQWxsQXVkaW9DYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJKU0FsbFZpZGVvQ2FwYWJp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNNdXRhdGlvbk9ic2VydmVyQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdEpTTXV0YXRpb25PYnNlcnZlcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTTXV0YXRpb25PYnNlcnZlcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwpAQCAtNTMsNyArNTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTTXV0YXRpb25PCiAgICAgaWYgKCFvYmplY3QgfHwgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJDYWxsYmFjayBh
cmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24iKSk7CiAKLSAgICBKU011dGF0aW9uT2JzZXJ2ZXJD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU011dGF0aW9uT2JzZXJ2ZXJDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganND
b25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgp
KTsKICAgICBSZWZQdHI8SlNNdXRhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9IEpTTXV0YXRpb25D
YWxsYmFjazo6Y3JlYXRlKG9iamVjdCwganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpOwog
ICAgIEpTT2JqZWN0KiBqc09ic2VydmVyID0gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKSwgTXV0YXRpb25PYnNlcnZlcjo6Y3JlYXRlKGNhbGxiYWNrLnJl
bGVhc2UoKSkpKTsKICAgICBQcml2YXRlTmFtZSBwcm9wZXJ0eU5hbWU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ0ljZUNhbmRpZGF0ZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENJY2VDYW5kaWRhdGVDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JU
Q0ljZUNhbmRpZGF0ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxMyBA
QAogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDSWNl
Q2FuZGlkYXRlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUlRDSWNlQ2FuZGlkYXRlKEV4ZWNTdGF0
ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSVENJY2VD
YW5kaWRhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIERpY3Rpb25hcnkgc2Vzc2lvbkluaXQ7CkBAIC00OSw3ICs1MCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNSVENJY2VDYW4KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNSVENJY2VDYW5kaWRhdGVD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ0ljZUNhbmRpZGF0ZUNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0Nv
bnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkp
OwogICAgIFJlZlB0cjxSVENJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZSA9IFJUQ0ljZUNhbmRp
ZGF0ZTo6Y3JlYXRlKHNlc3Npb25Jbml0LCBlYyk7CiAgICAgaWYgKGVjID09IFRZUEVfTUlTTUFU
Q0hfRVJSKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1BlZXJDb25uZWN0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSVENQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEy
ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTUlRDUGVlckNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTUlRDUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNSVENQ
ZWVyQ29ubmVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTUlRDUGVlckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IC8vIFNwZWMgc2F5cyB0aGF0IHdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJ1bWVudCwgdGhl
IFJUQ0NvbmZpZ3VyYXRpb24uCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCkBA
IC00OSw3ICs1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNSVENQZWVyQ28K
ICAgICBpZiAoIXJ0Y0NvbmZpZ3VyYXRpb24uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJUQ1BlZXJDb25uZWN0aW9u
IGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5IikpOwogCi0gICAgSlNSVENQZWVy
Q29ubmVjdGlvbkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTUlRDUGVlckNv
bm5lY3Rpb25Db25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rv
ck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4
ZWMtPmNhbGxlZSgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiUlRDUGVlckNvbm5lY3Rpb24gY29u
c3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25E
ZXNjcmlwdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTIgKzMxLDEzIEBACiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNSVENTZXNzaW9uRGVzY3JpcHRpb25Db25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0SlNSVENTZXNzaW9uRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgRGljdGlvbmFyeSBz
ZXNzaW9uSW5pdDsKQEAgLTQ5LDcgKzUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1JUQ1Nlc3NpbwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKLSAgICBKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkNvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3Ry
dWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAg
ICAgUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uID0gUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoc2Vzc2lvbkluaXQsIGVjKTsKICAgICBpZiAoZWMg
PT0gVFlQRV9NSVNNQVRDSF9FUlIpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDU3RhdHNSZXNwb25zZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENT
dGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAi
SlNSVENTdGF0c1Jlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93
TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkpTU1FMUmVzdWx0U2V0
Um93TGlzdC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0jaW5jbHVkZSAiU1FMUmVzdWx0U2V0
Um93TGlzdC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaD4KICNpbmNs
dWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5j
cHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBA
QAogI2luY2x1ZGUgIkpTU1FMVHJhbnNhY3Rpb25TeW5jLmgiCiAKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNTUUxSZXN1
bHRTZXQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvblN5bmMuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdMZW5ndGhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAj
aW5jbHVkZSAiSlNTVkdMZW5ndGguaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFByb3BlcnR5Lmgi
CiAjaW5jbHVkZSAiU1ZHRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29y
a2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1
MCw5IEBAIHZvaWQgSlNTaGFyZWRXb3JrZXI6OnZpc2l0QWRkaXRpb25hbENoaWwKICAgICAgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTU2hhcmVkV29ya2Vy
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNTaGFyZWRXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTU2hhcmVkV29ya2VyQ29u
c3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rv
cio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1
Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogCi0jaW5jbHVkZSAiU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllcklubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU1VzZXJNZXNzYWdlSGFuZGxl
ci5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJKU1dlYktpdFBvaW50LmgiCiAKLSNpbmNsdWRlICJXZWJLaXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJLaXRQb2lu
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYktpdFBvaW50KEV4ZWNTdGF0ZSogZXhlYykKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJLaXRQb2ludChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAg
ICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1
Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGZsb2F0IHggPSAwOwogICAgIGZs
b2F0IHkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAK
ICNpbmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5o
IgogI2luY2x1ZGUgIldvcmtlci5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNDQs
OSArNDUsOSBAQCBKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6CiAgICAg
cmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2Vy
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTV29ya2VyQ29uc3RydWN0b3IqIGpz
Q29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNXb3JrZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgp
KTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01D
b25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGlmICghZXhlYy0+YXJn
dW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNj
b3BlLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NaWNyb3Rhc2suaD4KIAog
I2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTcwMTU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5LmgiCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNs
dWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTgwMywxMiArODAzLDkgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgaWYgKCRoYXNQYXJlbnQpIHsKICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIk
cGFyZW50Q2xhc3NOYW1lLmgifSA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJGhlYWRlcklu
Y2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPiJ9ID0gMTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVz
eyJKU0RPTVdyYXBwZXIuaCJ9ID0gMTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmlzRXhjZXB0
aW9uKSB7CiAgICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0Vycm9yUHJvdG90
eXBlLmg+In0gPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGhlYWRlckluY2x1
ZGVzeyI8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4ifSA9IDE7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTgyMCw3ICs4MTcsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAgICAKLSAgICAkaGVh
ZGVySW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwogICAgICRoZWFkZXJJbmNs
dWRlc3siU1ZHRWxlbWVudC5oIn0gPSAxIGlmICRjbGFzc05hbWUgPX4gL15KU1NWRy87CiAKICAg
ICBteSAkaW1wbFR5cGUgPSAkaW50ZXJmYWNlTmFtZTsKQEAgLTg5NSw3ICs4OTEsMTAgQEAgc3Vi
IEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgIyBQcm90b3R5cGUKLSAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlND
OjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIHVubGVzcyBJc0RPTUdsb2JhbE9iamVj
dCgkaW50ZXJmYWNlKTsKKyAgICB1bmxlc3MgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2Up
KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7CisgICAg
fQogCiAgICAgJGhlYWRlclRyYWlsaW5nSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfUN1c3RvbS5oIn0g
PSAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUhlYWRlciJ9
OwogCkBAIC0xMTE0LDYgKzExMTMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7CisKICAgICAjIENvbnN0cnVj
dG9yCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1
cmUqLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4sIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOwpAQCAt
MTEyNiwxNSArMTEyNiwxNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7Ci0KICAg
ICB9CiAKICAgICAjIHN0cnVjdHVyZSBmbGFncwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gIik7Ci0gICAgZm9yZWFj
aCBteSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0dXJlRmxhZ3MpKSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICRzdHJ1Y3R1cmVGbGFnIC4gIiB8ICIpOworICAgIGlm
ICglc3RydWN0dXJlRmxhZ3MpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAiKTsKKyAgICAgICAgZm9yZWFj
aCBteSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0dXJlRmxhZ3MpKSB7CisgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkc3RydWN0dXJlRmxhZyAuICIgfCAiKTsKKyAg
ICAgICAgfQorICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQmFzZTo6U3RydWN0dXJlRmxh
Z3M7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkJhc2U6OlN0cnVjdHVy
ZUZsYWdzO1xuIik7CiAKICAgICAjIEluZGV4IHNldHRlcgogICAgIGlmICgkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CkBAIC0xMTk2LDE0
ICsxMTk3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlxuIik7CiAKICAgICAjIEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24uCi0gICAgR2VuZXJhdGVQ
cm90b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZh
Y2UsICRpbnRlcmZhY2VOYW1lKTsKLQotICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5vSW50ZXJmYWNlT2JqZWN0In0pIHsKLSAgICAgICAgJGhlYWRlckluY2x1ZGVz
eyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgICAgICRoZWFkZXJJ
bmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9ID0gMTsKLSAgICAgICAgfQot
ICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBoZWFkZXJDb250ZW50LCAk
Y2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAgaWYgKEhlYWRlck5l
ZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQ
cm90b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZh
Y2UsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKICAgICBpZiAoJGhhc0ZvcndhcmREZWNsYXJp
bmdGdW5jdGlvbnMpIHsKQEAgLTEyNTEsNiArMTI0NiwxNSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJm
YWNlKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLy8gQ3VzdG9tIGNvbnN0cnVj
dG9yXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtc
blxuIik7CisgICAgfQorCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVt
cGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNlTmFtZX1Jbml0Jiwg
SlNEaWN0aW9uYXJ5Jik7XG5cbiIpOworICAgIH0KKwogICAgIG15ICRjb25kaXRpb25hbFN0cmlu
ZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2Up
OwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcblxu
Iik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3Ry
aW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkBAIC0xNjkyLDYgKzE2OTYsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVt
cGxhdGUKICAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bkNvbnRlbnRIZWFkZXIoJGludGVyZmFjZSkpOwogCisgICAgJGltcGxJbmNsdWRlc3siSlNET01C
aW5kaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9HZXRQdHIuaD4ifSA9IDE7
CiAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4ifSA9IDEg
aWYgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbjsKIApAQCAtMTczMiwxMCArMTczNywxMiBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRlbmRBcHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CisKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KIAogICAgIGlmICgkbnVtQXR0cmli
dXRlcyA+IDAgfHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFj
ZU9iamVjdCJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCIvLyBBdHRyaWJ1dGVzXG5c
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIEF0dHJpYnV0ZXNcblxuIik7CiAg
ICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkg
ewogICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJGb3J3YXJkRGVjbGFyZUluSGVhZGVyIn07CiAKQEAgLTE3NTksOCArMTc2Niwy
NSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGNvbnN0cnVj
dG9yRnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9y
IjsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NvbnN0cnVjdG9yRnVu
Y3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOwogICAgICAgICB9CisKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIH0KKworICAgICMgQWRkIHByb3RvdHlwZSBk
ZWNsYXJhdGlvbi4KKyAgICBpZiAoIUhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGlu
dGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGltcGxD
b250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAgfQor
CisgICAgIyBBZGQgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KKyAgICBpZiAoISRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7CisgICAgICAgICRp
bXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOworICAgICAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgeworICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9ID0gMTsKKyAg
ICAgICAgfQorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBpbXBsQ29u
dGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0KIAor
CiAgICAgbXkgQGhhc2hLZXlzID0gKCk7CiAgICAgbXkgQGhhc2hWYWx1ZTEgPSAoKTsKICAgICBt
eSBAaGFzaFZhbHVlMiA9ICgpOwpAQCAtMTk0NCwxMiArMTk2OCw2IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJj
b25zdCBDbGFzc0luZm8gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzX2luZm8gPSB7IFwiJHt2aXNp
YmxlSW50ZXJmYWNlTmFtZX1Qcm90b3R5cGVcIiwgJkJhc2U6OnNfaW5mbywgJiR7Y2xhc3NOYW1l
fVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCR7Y2xhc3NOYW1lfVByb3Rv
dHlwZSkgfTtcblxuIik7CiAgICAgfQotICAgIHVubGVzcyAoSXNET01HbG9iYWxPYmplY3QoJGlu
dGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFz
c05hbWV9UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPCR7Y2xhc3NOYW1lfT4o
dm0sIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOwotICAgIH0KIAogICAgIGlmIChQcm90b3R5cGVPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QoJGludGVyZmFjZSkpIHsKICAgICAgICAgbXkgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgPSBQ
cm90b3R5cGVBdHRyaWJ1dGVDb3VudCgkaW50ZXJmYWNlKTsKQEAgLTIwNTMsMTIgKzIwNzEsMTcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50ICYmICRwYXJlbnRDbGFzc05hbWUgbmUgIkpT
Qzo6RE9NTm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAk
e2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCAk
e3BhcmVudENsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCkpKTtcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1l
fVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsICR7cGFyZW50Q2xhc3NOYW1lfTo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIG15ICRwcm90b3R5cGUgPSAkaW50ZXJmYWNlLT5pc0V4Y2VwdGlvbiA/ICJl
cnJvclByb3RvdHlwZSIgOiAib2JqZWN0UHJvdG90eXBlIjsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPiR7cHJvdG90eXBlfSgpKSk7XG4iKTsKICAgICAg
ICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8JHtjbGFzc05hbWV9Pih2bSwgZ2xvYmFsT2JqZWN0KTtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCiAgICAgaWYgKCEk
aGFzUGFyZW50KSB7CkBAIC00MjY2LDkgKzQyODksNiBAQCBzdWIgR2VuZXJhdGVQcm90b3R5cGVE
ZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNsYXNzICR7cHJvdG90eXBlQ2xh
c3NOYW1lfSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qge1xuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAicHVibGljOlxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7XG4iKTsKLSAgICB1bmxlc3MgKElz
RE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopO1xuIik7Ci0gICAgfQogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0
YXRpYyAke3Byb3RvdHlwZUNsYXNzTmFtZX0qIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKVxuIik7
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwpAQCAtNDM0NywxMCArNDM2Nyw5
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgfVxuIik7CiAKICAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2Up
ICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9
KSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOwotICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwot
CiAgICAgICAgIGlmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0JHtjbGFzc05hbWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKICAg
ICAgICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc307
CiAgICAgICAgICAgICBpZiAoQGNvbnN0cnVjdG9ycyA+IDEpIHsKICAgICAgICAgICAgICAgICBm
b3JlYWNoIG15ICRjb25zdHJ1Y3RvciAoQGNvbnN0cnVjdG9ycykgewpAQCAtNDM2NywxMCArNDM4
Niw2IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICB9CiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAifTtcblxuIik7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklz
Q29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJib29sIGZpbGwke2ludGVyZmFjZU5hbWV9SW5pdCgke2ludGVyZmFj
ZU5hbWV9SW5pdCYsIEpTRGljdGlvbmFyeSYpO1xuXG4iKTsKLSAgICB9Ci0KICAgICBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksIDw8RU5EKTsKIGNsYXNzIEpTJHtpbnRlcmZhY2VOYW1l
fU5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewpA
QCAtNDY5NCwxMSArNDcwOSwxMSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhv
ZHMKICAgICB9IGVsc2lmICgkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsKICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0
cyhpbmZvKCkpKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlw
ZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCAke2NsYXNzTmFtZX06OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4i
KTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke3By
b3RvQ2xhc3NOYW1lfTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfTo6Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfQog
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoJHtsZWFzdENvbnN0cnVjdG9yTGVuZ3RofSksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmIGRlZmluZWQgJGxlYXN0Q29uc3RydWN0
b3JMZW5ndGg7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJlaWZ5U3RhdGljUHJvcGVy
dGllcyh2bSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpO1xuIikg
aWYgQ29uc3RydWN0b3JIYXNQcm9wZXJ0aWVzKCRpbnRlcmZhY2UpOwpAQCAtNDc1Miw0ICs0NzY3
LDExIEBAIHN1YiBJc0NvbnN0cnVjdGFibGUKICAgICByZXR1cm4gSGFzQ3VzdG9tQ29uc3RydWN0
b3IoJGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0
cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3Ry
dWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JU
ZW1wbGF0ZSJ9OwogfQogCitzdWIgSGVhZGVyTmVlZHNQcm90b3R5cGVEZWNsYXJhdGlvbgorewor
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKworICAgIHJldHVybiBJc0RPTUdsb2JhbE9iamVj
dCgkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0
b21OYW1lZEdldHRlck9uUHJvdG90eXBlIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9OworfQorCiAxOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsNTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSopOworCiAv
LyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
RXhjaXRpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAg
IHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rl
c3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7Citwcml2YXRlOgorICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0QWN0aXZlRE9NT2JqZWN0VGFibGVJbmRleFs0XSA9IHsK
QEAgLTgyLDcgKzEyNiw3IEBAIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6
OmYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMDUsMTEgKzE0OSw2IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RBY3RpdmUKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0
QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGUgPSB7IDIsIDMsIGZhbHNlLCBKU1Rlc3RBY3Rp
dmVET01PYmplY3RQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sICZKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJsZSwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUpIH07CiAK
LUpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBK
U1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMjksNiArMTY4LDExIEBAIEpTT2Jq
ZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZVAKICAgICByZXR1cm4gSlNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0
QWN0aXZlRE9NT2JqZWN0OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZlRE9N
T2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmpl
Y3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oY2Vs
bCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAxNzAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZl
RE9NT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpT
VGVzdEFjdGl2ZURPTU9iamVjdF9oCiAjZGVmaW5lIEpTVGVzdEFjdGl2ZURPTU9iamVjdF9oCiAK
LSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNp
bmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50
aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYg
KzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVh
dGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0QWN0aXZl
RE9NT2JqZWN0KCk7CkBAIC05Niw0OSArOTQsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRl
eHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdEFjdGl2ZURPTU9iamVjdCopOwogVGVzdEFjdGl2ZURPTU9iamVj
dCogdG9UZXN0QWN0aXZlRE9NT2JqZWN0KEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qgewot
cHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
LSAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01P
YmplY3RQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3Mg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVk
ZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAg
IEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDUzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisK
K2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJl
KSB7IH0KK307CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RDdXN0b21O
YW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCop
OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAg
IHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBI
YXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlclRhYmxlSW5kZXhbMl0gPSB7CkBAIC03Niw3ICsxMjAsNyBAQCB2
b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6CiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7
CiB9CiAKQEAgLTk2LDExICsxNDAsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0Q3VzdG9tCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
UHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIGZhbHNlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRh
YmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIiwgJkJhc2U6
OnNfaW5mbywgJkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMjAsNiArMTU5LDExIEBAIEpT
T2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXQKICAgICByZXR1cm4gSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3Qq
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRl
ci5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAogI2RlZmluZSBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlcl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
aCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwpAQCAtMTAwLDQ5ICs5OCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVy
Q29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKIFRlc3RDdXN0b21O
YW1lZEdldHRlciogdG9UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xh
c3MgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25z
dHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0
b21OYW1lZEdldHRlckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAg
fQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgpAQCAtMzgsNiArMzksNTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFz
cyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVf
SU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9Owor
CitjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAg
IHsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKwog
LyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlSW5k
ZXhbMV0gPSB7CkBAIC0xMDAsNyArMTQ3LDcgQEAgdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYodm0sIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtMTM1LDExICsxODIsNiBAQCBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRDCiBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSA9IHsgMywgNywgdHJ1
ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQ
cm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3Rv
dHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPih2bSwgZ2xvYmFs
T2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAt
MTU5LDYgKzIwMSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRl
CiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkp
OwogfQogCitKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOworfQor
CiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwp
CiB7CiAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcl9oCiAj
ZGVmaW5lIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzksNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV2ZW50Q29uc3RydWN0b3IoKTsKICAg
ICBERUNMQVJFX0lORk87CkBAIC03NCw3ICs3Miw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
QEAgLTk3LDUyICs5NCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVy
V28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0RXZlbnRDb25zdHJ1Y3RvciopOwogVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvVGVzdEV2
ZW50Q29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgot
ICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVm
IERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVh
cCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogYm9vbCBmaWxsVGVz
dEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYsIEpTRGljdGlv
bmFyeSYpOwogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMTcw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNTMgQEAgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3Rl
bmVyKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoSlND
OjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RF
dmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChKU0M6OkV4ZWNTdGF0ZSop
OworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJn
ZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RF
dmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7
IH0KK307CisKK2NsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0
cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAg
ICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBK
U1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1Rlc3RFdmVudFRhcmdldFRhYmxlSW5kZXhbMl0gPSB7CkBAIC04NSw3
ICsxMjksNyBAQCB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7
CiB9CiAKQEAgLTExNCwxMSArMTU4LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdEV2ZW50VAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZVRhYmxlID0geyA0LCA3LCBmYWxzZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJs
ZVZhbHVlcywgMCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RF
dmVudFRhcmdldFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV2ZW50VGFyZ2V0UHJv
dG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRE
T01Qcm90b3R5cGU8SlNUZXN0RXZlbnRUYXJnZXQ+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2
b2lkIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTM4LDYgKzE3NywxMSBAQCBKU09i
amVjdCogSlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0ZVByb3RvCiAgICAgcmV0dXJuIEpTVGVzdEV2
ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRU
YXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFdmVudFRh
cmdldDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50VGFyZ2V0Pih2bSwgZ2xv
YmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsy
MSw4IEBACiAjaWZuZGVmIEpTVGVzdEV2ZW50VGFyZ2V0X2gKICNkZWZpbmUgSlNUZXN0RXZlbnRU
YXJnZXRfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFw
cGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9K
U0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQxLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTEw
NCw0OSArMTAyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwog
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RFdmVudFRhcmdldCopOwogVGVzdEV2ZW50VGFyZ2V0KiB0b1Rlc3RFdmVudFRhcmdldChKU0M6
OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJF
X0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNs
YXNzIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRh
cmdldENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19Owot
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJ
KHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCiAKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtMzUs
NiArMzYsNDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEV4Y2VwdGlvbk5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVz
dEV4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGlj
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNU
ZXN0RXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFeGNlcHRp
b25Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7
IH0KK307CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBK
U1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9Owor
CiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1Rlc3RFeGNlcHRpb25UYWJsZUluZGV4WzJdID0gewpAQCAtNzMsNyArMTE3LDcgQEAgdm9p
ZCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV4Y2VwdGlvblByb3Rv
dHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXhjZXB0
aW9uOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTkzLDExICsx
MzcsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXhjZXB0CiBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0
cnVlLCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0RXhjZXB0
aW9uUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEV4Y2VwdGlvblByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sICZKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXhjZXB0aW9uPih2bSwgZ2xv
YmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTcs
NiArMTU2LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHkKICAg
ICByZXR1cm4gSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5lcnJvclByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBK
U1Rlc3RFeGNlcHRpb246OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFeGNlcHRpb24+
KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShK
U0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RFeGNlcHRpb24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9u
LmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDkg
QEAKICNpZm5kZWYgSlNUZXN0RXhjZXB0aW9uX2gKICNkZWZpbmUgSlNUZXN0RXhjZXB0aW9uX2gK
IAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgIlRlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yUHJvdG90
eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszOCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV4Y2VwdGlvbigp
OwpAQCAtOTYsNDkgKzk1LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBw
ZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RFeGNlcHRpb24qKTsKIFRlc3RFeGNlcHRpb24qIHRvVGVzdEV4Y2VwdGlvbihKU0M6
OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5h
bE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRp
b25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZh
dGU6Ci0gICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25D
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTMxLDYg
KzMyLDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworCitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJp
dmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0
b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC01NSw3ICs5OSw3
IEBAIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG8KIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7CiB9CiAKQEAgLTc1LDExICsxMTksNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0R2VuZXJhCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVBy
b3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPih2bSwg
Z2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwpAQCAtOTksNiArMTM4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlOjpjcmUKICAgICByZXR1cm4gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4odm0s
IGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6ZGVz
dHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KGNl
bGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCShyZXZpc2lv
biAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBA
QAogI2lmbmRlZiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2gKICNkZWZpbmUgSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZV9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKICAgICB+SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSgpOwogICAgIERFQ0xB
UkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5o
ZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAt
OTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwog
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7CiBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogdG9UZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHN0YXRpYyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJl
KSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciA6
IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3
NCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxl
bWVudGFsTWV0aG9kNChKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCisKIC8vIEF0dHJpYnV0ZXMK
IAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQpAQCAtMTIx
LDYgKzEyMiw1NCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsCiB2
b2lkIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiAjZW5kaWYKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRl
OgorICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEpTQzo6
RXhlY1N0YXRlKik7CisjaWYgRU5BQkxFKFRFU1RfSU5URVJGQUNFKQorICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOworI2VuZGlmIC8vIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKK307CisKIC8qIEhh
c2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVz
dEludGVyZmFjZVRhYmxlSW5kZXhbNF0gPSB7CkBAIC0yNjYsNyArMzE1LDcgQEAgdm9pZCBKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6
c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNlOjpn
ZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9
CkBAIC00MzgsMTEgKzQ4Nyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RJ
bnRlcmYKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFi
bGUgPSB7IDE3LCA2MywgdHJ1ZSwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMs
IDAsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdElu
dGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwpAQCAtNDYyLDYgKzUwNiwxMSBAQCBKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlOjpj
cmVhdGVQcm90b3R5CiAgICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsK
IH0KIAorSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdEludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0SW50
ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEludGVyZmFj
ZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZSo+KGNlbGwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMSArMjMsOCBAQAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00Miw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwpAQCAtMTIzLDU0ICsxMjEsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3Jh
cHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdEludGVyZmFjZSopOwogVGVzdEludGVyZmFjZSogdG9UZXN0SW50ZXJmYWNlKEpT
Qzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlND
OjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJp
dmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5G
TzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShK
U0M6OkV4ZWNTdGF0ZSopOwotI2lmIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKLSAgICBzdGF0aWMg
SlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNv
bnN0cnVjdERhdGEmKTsKLSNlbmRpZiAvLyBFTkFCTEUoVEVTVF9JTlRFUkZBQ0UpCi19OwotCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw1MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZChKU0M6OkV4ZWNT
dGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3Mg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
K3ByaXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRl
ZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2gg
dGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JUYWJsZUluZGV4
WzFdID0gewpAQCAtNjIsNyArMTA2LDcgQEAgdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ29uc3RydQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OnNlbGYodm0s
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXI6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtODUsMTEgKzEy
OSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RNZWRpYVEKIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxl
ID0geyAyLCAzLCB0cnVlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlVGFi
bGVWYWx1ZXMsIDAsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVUYWJsZUlu
ZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUiLCAm
QmFzZTo6c19pbmZvLCAmSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxl
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KHZtLCBn
bG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CkBAIC0xMDksNiArMTQ4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjoKICAgICByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3Rv
dHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcio+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyX2gKICNkZWZpbmUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcl9o
CiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIK
ICNpbmNsdWRlICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAg
ICB+SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAg
LTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzky
LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyKik7CiBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogdG9UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwotICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2
YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5oIgogCisjaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKQEAgLTM0LDYgKzM1LDc0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBz
dGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgeworcHVi
bGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKKworICAg
IHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0
YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpT
Qzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAq
LwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU4LDcgKzEyNyw3IEBAIHZv
aWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjoKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9
CiAKQEAgLTk2LDcgKzE2NSw3IEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29u
c3RydWMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwogICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwg
Z2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgTm9uZSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9
CiAKQEAgLTEyMiwxMSArMTkxLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dE5hbWVkQwogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJv
dG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlSW5k
ZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpz
X2luZm8gPSB7ICJUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8s
ICZKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTE0Niw2ICsyMTAsMTEgQEAgSlNPYmplY3QqIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZQogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3I6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3Iq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE3MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEyICsyMSw4IEBACiAjaWZuZGVmIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JfaAogI2RlZmluZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gK
IAotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdE5h
bWVkQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArMzcsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdE5hbWVkQ29uc3RydWN0
b3IoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03NCw3ICs3MSw2IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAog
Y2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKQEAgLTk3LDc0ICs5Myw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChE
T01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0TmFtZWRDb25zdHJ1Y3RvciopOwogVGVzdE5hbWVkQ29uc3RydWN0b3Iq
IHRvVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qgewot
cHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
LSAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5G
TzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1j
bGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsK
LSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQg
ewotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsK
LQotICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck5hbWVkQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
IEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgfQotCi0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0gICAgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwot
ICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2Vs
bCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw1MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
KworY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Cisg
ICAgc3RhdGljIEpTVGVzdE5vZGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgSlNUZXN0Tm9kZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Tm9k
ZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNM
QVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Tm9kZVByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3Mg
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3By
aXZhdGU6CisgICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlQ29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU1Rlc3ROb2RlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5vZGUoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMg
SlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNv
bnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAK
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3ROb2RlQ29uc3RydWN0
b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNjUsNyArMTExLDcgQEAgdm9pZCBKU1Rlc3ROb2RlQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNlbGYodm0sIGdsb2Jh
bE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGU6OmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtOTEsMTEgKzEzNyw2IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHIKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0Tm9k
ZVByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVW
YWx1ZXMsIDAsIEpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0Tm9kZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGVQcm90b3R5cGUiLCAm
QmFzZTo6c19pbmZvLCAmSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdE5vZGVQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3ROb2RlUHJv
dG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwot
fQotCiB2b2lkIEpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTEsNyArMTUyLDEyIEBAIEpTVGVz
dE5vZGU6OkpTVGVzdE5vZGUoU3RydWN0dXJlKiBzdHJ1Y3QKIAogSlNPYmplY3QqIEpTVGVzdE5v
ZGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCwgSlNOb2RlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpKSk7CisgICAgcmV0dXJu
IEpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2Rl
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNOb2RlOjpnZXRQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5vZGU6
OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIx
LDggQEAKICNpZm5kZWYgSlNUZXN0Tm9kZV9oCiAjZGVmaW5lIEpTVGVzdE5vZGVfaAogCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiVGVz
dE5vZGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzksNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjYsNTIgKzY1
LDYgQEAgcHJvdGVjdGVkOgogfTsKIAogCi1jbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5vZGVQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9k
ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE5vZGVDb25z
dHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgot
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0
Tm9kZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBK
U1Rlc3ROb2RlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3ROb2Rl
KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlz
dGljLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwogCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3Rv
dHlwZUZ1bmN0aW9uTm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbihKU0M6OkV4ZWNTdGF0
ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpA
QCAtNTUsNiArNTYsNDkgQEAgdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWND
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0
aWNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdE5vbmRldGVy
bWluaXN0aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2
YXRlOgorICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0
cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMg
Y29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0
cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTc5LDcgKzEyMyw3IEBAIHZvaWQgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjoKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBl
OjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTEyMCwx
MSArMTY0LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5vbmRldAogc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGUg
PSB7IDcsIDE1LCB0cnVlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGVWYWx1
ZXMsIDAsIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vbmRldGVybWluaXN0
aWM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWNQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CkBAIC0xNDQsNiArMTgzLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljOjpjcmVhdGUKICAgICByZXR1cm4gSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlw
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6ZGVzdHJveShKU0M6
OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KGNlbGwpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0
aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljX2gKICNkZWZpbmUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY19oCiAKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYygpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9
OwogCiBjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250
ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3ROb25kZXRlcm1pbmlzdGljKik7CiBUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogdG9UZXN0Tm9uZGV0ZXJtaW5pc3RpYyhKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFS
RV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07
Ci0KLWNsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWND
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGlj
OgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNiArMTU0LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlh
ZGljTm9kZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEpTQzo6RXhlY1N0YXRlKik7
CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAgLTI5MCw2ICsyOTEsNTIgQEAgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUoSgogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiB2b2lk
IHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CisKK2NsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0
T2JqUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERF
Q0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNz
IEpTVGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3By
aXZhdGU6CisgICAgSlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
IEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1Rlc3RPYmooSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVj
dERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVGVzdE9ialRhYmxlSW5kZXhbMTddID0gewpAQCAtNDU1LDcgKzUw
Miw3IEBAIHZvaWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW8KIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPYmpQ
cm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE9i
ajo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigx
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJv
cGVydGllcyh2bSwgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpA
QCAtMTE3NCwxMSArMTIyMSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm8KIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7
IDEzNywgNTExLCB0cnVlLCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3Rv
dHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpQ
cm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RPYmpQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CkBAIC0xMTk4LDYgKzEyNDAsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE9iajo6Y3Jl
YXRlUHJvdG90eXBlKFZNJgogICAgIHJldHVybiBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pT
T2JqZWN0KiBKU1Rlc3RPYmo6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPYmo+KHZt
LCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdE9iajo6ZGVzdHJveShKU0M6OkpTQ2Vs
bCogY2VsbCkKIHsKICAgICBKU1Rlc3RPYmoqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0T2JqX2gKICNkZWZpbmUgSlNUZXN0
T2JqX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ci5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RPYmooKTsKQEAg
LTEwOSw1MiArMTA3LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJX
bwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RPYmoqKTsKIFRlc3RPYmoqIHRvVGVzdE9iaihKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBK
U1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
c3RhdGljIEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
ewotICAgICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5G
TzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE9i
akNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0g
ICAgSlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE9i
akNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1Rlc3RPYmooSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
LX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDU2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewor
cHJpdmF0ZToKKyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczEoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMy
KEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhKU0M6OkV4ZWNT
dGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoSlNDOjpFeGVjU3RhdGUqKTsKKyAg
ICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwq
LCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVj
dG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtMTI0LDcg
KzE3NCw3IEBAIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnUKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkp
OwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTE1MCwxMSArMjAwLDYgQEAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJsbwogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUs
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzX2luZm8gPSB7
ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSkgfTsKIAotSlNP
YmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OnNlbGYoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4odm0sIGdsb2JhbE9iamVjdCk7Ci19
Ci0KIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTE3NCw2
ICsyMTksMTEgQEAgSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OgogICAg
IHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6Omdl
dFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPih2bSwg
Z2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNf
aAogI2RlZmluZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKIAotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVj
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09i
amVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzIsNyArNzAsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKIH07CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNPd25lciA6IHB1
YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05NSw1NiArOTIsNiBAQCBpbmxpbmUgdm9p
ZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMq
KTsKIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiB0b1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZtLmhlYXAp
KSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEpTQzo6RXhl
Y1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihKU0M6OkV4ZWNTdGF0ZSopOwot
ICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM0KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3Ry
dWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRh
Jik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTWVz
c2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTQ2LDYgKzQ3LDQ5IEBAIHZvaWQgc2V0SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXIKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25s
eVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitj
bGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7Citwcml2YXRlOgorICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNv
bnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6
CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhlYXAp
KSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29u
c3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9
IHsKQEAgLTcwLDcgKzExNCw3IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYo
dm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBA
IC0xMTAsMTEgKzE1NCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJp
YWwKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDYsIDE1LCB0cnVlLCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6c19pbmZv
ID0geyAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSIsICZCYXNl
OjpzX2luZm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVU
YWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMzQsNiArMTcz
LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnQKICAgICByZXR1
cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiB7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4o
Y2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMyw4IEBACiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFBy
b3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDYgKzM5LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC0xMDEsNDkgKzk5LDYg
QEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsKIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIHRvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShKU0M6OkpTVmFsdWUpOwog
Ci1jbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpT
Qzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4g
cHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7
Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAg
c3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAxNzAx
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbjIo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0lu
Y2x1ZGUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC03Miw2
ICs3Myw1MiBAQCB2b2lkIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0
VHlwZWRlZnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFR5
cGVkZWZzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsK
KworY2xhc3MgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERF
Q0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBz
dGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdFR5
cGVkZWZzKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9Owor
CiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1Rlc3RUeXBlZGVmc1RhYmxlSW5kZXhbMl0gPSB7CkBAIC0xMjUsNyArMTcyLDcgQEAgdm9p
ZCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpmaW5pc2hDcgogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFR5cGVkZWZzUHJvdG90
eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVm
czo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigy
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJv
cGVydGllcyh2bSwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7
CiB9CkBAIC0yMzIsMTEgKzI3OSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RUeXBlZGUKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGVU
YWJsZSA9IHsgMTcsIDYzLCB0cnVlLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlVmFsdWVz
LCAwLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFR5cGVkZWZzUHJvdG90
eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFR5cGVkZWZzUHJvdG90eXBlVGFibGUsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0
KiBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RUeXBlZGVm
cz4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CkBAIC0yNTYsNiArMjk4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlUHJv
dG90eXAKICAgICByZXR1cm4gSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNP
YmplY3QqIEpTVGVzdFR5cGVkZWZzOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0VHlw
ZWRlZnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpkZXN0
cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDgg
QEAKICNpZm5kZWYgSlNUZXN0VHlwZWRlZnNfaAogI2RlZmluZSBKU1Rlc3RUeXBlZGVmc19oCiAK
LSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNp
bmNsdWRlICJUZXN0VHlwZWRlZnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RUeXBlZGVmcygpOwpA
QCAtOTYsNTIgKzk0LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJX
bwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RUeXBlZGVmcyopOwogVGVzdFR5cGVkZWZzKiB0b1Rlc3RUeXBlZGVmcyhKU0M6OkpTVmFs
dWUpOwogCi1jbGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAg
IHN0YXRpYyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6OkV4ZWNTdGF0ZSopOwotICAg
IHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCos
IEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTYXR0cmlidXRlLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTYXR0cmli
dXRlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiYXR0cmlidXRlLmgi
CkBAIC0zNSw2ICszNiw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNhdHRyaWJ1dGVSZWFkb25seShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBK
U2F0dHJpYnV0ZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGlj
IEpTYXR0cmlidXRlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTYXR0cmlidXRlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU2F0
dHJpYnV0ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZh
dGU6CisgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yPih2bS5o
ZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTYXR0cmlidXRlQ29uc3RydWN0b3JUYWJs
ZUluZGV4WzFdID0gewpAQCAtNTksNyArMTAzLDcgQEAgdm9pZCBKU2F0dHJpYnV0ZUNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTYXR0cmlidXRlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU2F0dHJpYnV0ZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
RG9udEVudW0pOwogfQogCkBAIC04MiwxMSArMTI2LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTYXR0cmlidXRlUAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU2F0dHJpYnV0ZVBy
b3RvdHlwZVRhYmxlID0geyAyLCAzLCB0cnVlLCBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlVmFs
dWVzLCAwLCBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c19pbmZvID0geyAiYXR0cmlidXRlUHJvdG90eXBlIiwg
JkJhc2U6OnNfaW5mbywgJkpTYXR0cmlidXRlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNhdHRyaWJ1dGVQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU2F0dHJpYnV0
ZVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU2F0dHJpYnV0ZT4odm0sIGdsb2JhbE9iamVj
dCk7Ci19Ci0KIHZvaWQgSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMDYsNiArMTQ1LDExIEBA
IEpTT2JqZWN0KiBKU2F0dHJpYnV0ZTo6Y3JlYXRlUHJvdG90eXBlKFYKICAgICByZXR1cm4gSlNh
dHRyaWJ1dGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU2F0dHJpYnV0ZVBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
ZXJyb3JQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNhdHRyaWJ1dGU6OmdldFByb3Rv
dHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU2F0dHJpYnV0ZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZv
aWQgSlNhdHRyaWJ1dGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNhdHRy
aWJ1dGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU2F0dHJpYnV0ZSo+KGNlbGwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
YXR0cmlidXRlLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSAr
MjEsOSBAQAogI2lmbmRlZiBKU2F0dHJpYnV0ZV9oCiAjZGVmaW5lIEpTYXR0cmlidXRlX2gKIAot
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2lu
Y2x1ZGUgImF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaD4K
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U09iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM4LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU2F0dHJpYnV0ZSgpOwogICAg
IERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcxLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU2F0
dHJpYnV0ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5
Myw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBhdHRyaWJ1dGUq
KTsKIGF0dHJpYnV0ZSogdG9hdHRyaWJ1dGUoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNhdHRy
aWJ1dGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3Rh
dGljIEpTYXR0cmlidXRlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7
Ci0gICAgICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTYXR0cmlidXRlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFS
RV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBK
U2F0dHJpYnV0ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXBy
aXZhdGU6Ci0gICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25s
eS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTcmVhZG9ubHkuaCIKIAorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgInJlYWRvbmx5LmgiCiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgogCkBAIC0zMSw2ICszMiw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBB
dHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNyZWFkb25seUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNyZWFkb25seVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTcmVhZG9ubHlQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNyZWFkb25seVByb3RvdHlwZSogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5UHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNyZWFkb25seVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNyZWFkb25s
eVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQorfTsKKworY2xhc3MgSlNyZWFkb25seUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU3JlYWRvbmx5Q29uc3RydWN0b3Iq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTcmVhZG9ubHlDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5Q29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU3JlYWRvbmx5Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9y
ICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU3JlYWRvbmx5Q29u
c3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNTUsNyArOTksNyBAQCB2b2lkIEpTcmVhZG9u
bHlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNyZWFkb25seVByb3RvdHlwZTo6c2VsZih2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNyZWFkb25seTo6Z2V0UHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC03NSwxMSArMTE5LDYgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTcmVhZG9ubHlQcgogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU3Jl
YWRvbmx5UHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTcmVhZG9ubHlQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCwgSlNyZWFkb25seVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENs
YXNzSW5mbyBKU3JlYWRvbmx5UHJvdG90eXBlOjpzX2luZm8gPSB7ICJyZWFkb25seVByb3RvdHlw
ZSIsICZCYXNlOjpzX2luZm8sICZKU3JlYWRvbmx5UHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNyZWFkb25seVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTcmVhZG9u
bHlQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNyZWFkb25seT4odm0sIGdsb2JhbE9iamVj
dCk7Ci19Ci0KIHZvaWQgSlNyZWFkb25seVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTk5LDYgKzEzOCwxMSBAQCBK
U09iamVjdCogSlNyZWFkb25seTo6Y3JlYXRlUHJvdG90eXBlKFZNCiAgICAgcmV0dXJuIEpTcmVh
ZG9ubHlQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU3JlYWRvbmx5UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNyZWFkb25seTo6Z2V0UHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTcmVhZG9ubHk+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpT
cmVhZG9ubHk6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNyZWFkb25seSog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTcmVhZG9ubHkqPihjZWxsKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHku
aAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNp
Zm5kZWYgSlNyZWFkb25seV9oCiAjZGVmaW5lIEpTcmVhZG9ubHlfaAogCi0jaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAicmVhZG9u
bHkuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5
cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTcmVhZG9ubHkoKTsKICAgICBERUNMQVJFX0lORk87
CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNyZWFkb25seU93bmVyIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2
b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCByZWFkb25seSopOwogcmVhZG9ubHkqIHRv
cmVhZG9ubHkoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNyZWFkb25seVByb3RvdHlwZSA6IHB1
YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlND
OjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNyZWFkb25seVByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU3JlYWRvbmx5
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTcmVhZG9u
bHlQcm90b3R5cGU+KHZtLmhlYXApKSBKU3JlYWRvbmx5UHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBKU3JlYWRvbmx5UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU3JlYWRvbmx5Q29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU3JlYWRvbmx5Q29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoK
LSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTcmVh
ZG9ubHlDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAg
SlNyZWFkb25seUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTcmVhZG9ubHlDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233379</attachid>
            <date>2014-06-19 13:51:58 -0700</date>
            <delta_ts>2014-06-19 15:54:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140619135136.patch</filename>
            <type>text/plain</type>
            <size>185820</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOSAg
cGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbQ3VybF0g
Q29tcGlsZSBlcnJvcnMgcmVsYXRlZCB0byBodHRwIGhlYWRlciBmaWVsZCBuYW1lcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyU291cmNlTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9k
ZS5oIgogI2luY2x1ZGUgIkpTQXVkaW9CdWZmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTQXVk
aW9CdWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+
CkBAIC00Miw5ICs0Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0F1ZGlvQ29udGV4dENvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0F1ZGlvQ29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0g
anNDYXN0PEpTQXVkaW9Db250ZXh0Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0
b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMs
ICJBdWRpb0NvbnRleHQgY29uc3RydWN0b3IgY2FsbGVlIGlzIHVuYXZhaWxhYmxlIikpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmls
dGVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplCiAgICAgcmV0dXJuIHdyYXA8SlNCbG9iPihnbG9iYWxPYmplY3Qs
IGJsb2IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQmxv
YkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQmxvYkNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURh
dGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIHN0YXRpYyBIVE1M
Rm9ybUVsZW1lbnQqIHRvSFRNTEZvcm1FbGVtZW4KICAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMo
SlNIVE1MRm9ybUVsZW1lbnQ6OmluZm8oKSkgPyAmanNDYXN0PEpTSFRNTEZvcm1FbGVtZW50Kj4o
YXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU0RPTUZvcm1EYXRhQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTRE9NRm9ybURhdGEo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U0RPTUZvcm1EYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0RPTUZvcm1EYXRhQ29uc3Ry
dWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNET01Gb3JtRGF0YUNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogCiAgICAg
SFRNTEZvcm1FbGVtZW50KiBmb3JtID0gMDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID4gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWltZVR5cGVBcnJh
eUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIkpTRE9NTWltZVR5cGVBcnJheS5oIgog
CiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NTWltZVR5cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5B
cnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGx1Z2luQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNET01QbHVnaW5BcnJheS5oIgogCiAj
aW5jbHVkZSAiRE9NUGx1Z2luQXJyYXkuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTVBsdWdpbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5D
dXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVBsdWdpbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0RPTVBsdWdpbi5oIgogCi0jaW5jbHVk
ZSAiRE9NUGx1Z2luLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01NaW1lVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5LDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKIAor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKwogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorCiAjaW5jbHVkZSAiSlNEYXRhQ3VlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDQsOSArNDcsOSBAQCB2b2lkIEpTRGF0YUN1ZTo6c2V0VmFsdWUoRXhlY1N0YXRlKiBleGVj
CiB9CiAjZW5kaWYKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RhdGFDdWVDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3VlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNEYXRhQ3VlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBKU0RhdGFDdWVDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU0RhdGFDdWVD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgp
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRGF0YVRyYW5zZmVyLmgiCiAK
LSNpbmNsdWRlICJEYXRhVHJhbnNmZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiRXZlbnRIZWFkZXJzLmgiCiAjaW5jbHVkZSAiRXZlbnRJbnRlcmZh
Y2VzLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRGF0YVRyYW5zZmVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNGaWxlUmVhZGVyLmgiCiAK
ICNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpbmNsdWRlICJKU0hpc3RvcnkuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
SGlzdG9yeS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCShyZXZp
c2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJREJGYWN0
b3J5LmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5o
IgogI2luY2x1ZGUgIkpTSURCQ3Vyc29yLmgiCiAjaW5jbHVkZSAiSlNJREJDdXJzb3JXaXRoVmFs
dWUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0
YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5o
IgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9y
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNJREJJbmRleC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdl
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgdm9pZCBKU0ltYWdlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU0hUTUxJbWFnZUVsZW1lbnRQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVj
dCksIE5vbmUpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU0hUTUxJbWFnZUVsZW1lbnQ6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9u
ZSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdElt
YWdlKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW1hZ2VEYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCiAKICNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0V2ZW50Lmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5j
cHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgogCi0jaW5jbHVkZSAiTG9jYXRp
b24uaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTRnVu
Y3Rpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291
cmNlU3RhdGVzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAj
aW5jbHVkZSAiSlNNZWRpYVNvdXJjZVN0YXRlcy5oIgogCi0jaW5jbHVkZSAiTWVkaWFTb3VyY2VT
dGF0ZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbUNhcGFi
aWxpdGllc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZWRpYVN0cmVhbUNhcGFiaWxpdGllc0N1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXND
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJK
U0FsbEF1ZGlvQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSlNBbGxWaWRlb0NhcGFiaWxpdGll
cy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lv
biAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKU011dGF0aW9uT2JzZXJ2ZXIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU011dGF0aW9uT2JzZXJ2ZXIoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKQEAgLTUzLDcgKzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU011
dGF0aW9uTwogICAgIGlmICghb2JqZWN0IHx8IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEob2JqZWN0LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQ2FsbGJhY2sgYXJndW1l
bnQgbXVzdCBiZSBhIGZ1bmN0aW9uIikpOwogCi0gICAgSlNNdXRhdGlvbk9ic2VydmVyQ29uc3Ry
dWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3Ry
dWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAg
ICAgUmVmUHRyPEpTTXV0YXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBKU011dGF0aW9uQ2FsbGJh
Y2s6OmNyZWF0ZShvYmplY3QsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKTsKICAgICBK
U09iamVjdCoganNPYnNlcnZlciA9IGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+
Z2xvYmFsT2JqZWN0KCksIE11dGF0aW9uT2JzZXJ2ZXI6OmNyZWF0ZShjYWxsYmFjay5yZWxlYXNl
KCkpKSk7CiAgICAgUHJpdmF0ZU5hbWUgcHJvcGVydHlOYW1lOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRv
ck5vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk9zY2lsbGF0b3JOb2RlLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYW5uZXJOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIlBhbm5lck5vZGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3Rh
dGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEwICsyOSwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Bv
cFN0YXRlRXZlbnQuaCIKIAotI2luY2x1ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRlICJKU0hpc3Rv
cnkuaCIKLSNpbmNsdWRlICJKU1BvcFN0YXRlRXZlbnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDSWNlQ2FuZGlkYXRlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ0ljZUNhbmRpZGF0ZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UlRDSWNlQ2FuZGlkYXRlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEz
IEBACiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNSVENJ
Y2VDYW5kaWRhdGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNSVENJY2VDYW5kaWRhdGUoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JUQ0lj
ZUNhbmRpZGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgRGljdGlvbmFyeSBzZXNzaW9uSW5pdDsKQEAgLTQ5LDcgKzUwLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1JUQ0ljZUNhbgogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBKU1JUQ0ljZUNhbmRpZGF0
ZUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTUlRDSWNlQ2FuZGlkYXRlQ29u
c3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpz
Q29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUo
KSk7CiAgICAgUmVmUHRyPFJUQ0ljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRlID0gUlRDSWNlQ2Fu
ZGlkYXRlOjpjcmVhdGUoc2Vzc2lvbkluaXQsIGVjKTsKICAgICBpZiAoZWMgPT0gVFlQRV9NSVNN
QVRDSF9FUlIpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDUGVlckNvbm5lY3Rp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1JUQ1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNSVENQZWVyQ29ubmVjdGlvbi5oIgogCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNSVENQZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1JU
Q1BlZXJDb25uZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNSVENQZWVyQ29ubmVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgLy8gU3BlYyBzYXlzIHRoYXQgd2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnVtZW50LCB0
aGUgUlRDQ29uZmlndXJhdGlvbi4KICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkK
QEAgLTQ5LDcgKzUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1JUQ1BlZXJD
bwogICAgIGlmICghcnRjQ29uZmlndXJhdGlvbi5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUlRDUGVlckNvbm5lY3Rp
b24gYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkiKSk7CiAKLSAgICBKU1JUQ1Bl
ZXJDb25uZWN0aW9uQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNSVENQZWVy
Q29ubmVjdGlvbkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVj
dG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4o
ZXhlYy0+Y2FsbGVlKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJSVENQZWVyQ29ubmVjdGlvbiBj
b25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIikpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENTZXNzaW9uRGVzY3JpcHRpb25DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSVENTZXNzaW9uRGVzY3JpcHRpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxMiArMzEsMTMgQEAKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBEaWN0aW9uYXJ5
IHNlc3Npb25Jbml0OwpAQCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTUlRDU2Vzc2lvCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIH0KIAotICAgIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ29uc3RydWN0
b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNSVENTZXNzaW9uRGVzY3JpcHRpb25Db25zdHJ1
Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25z
dHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsK
ICAgICBSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBzZXNzaW9uRGVzY3JpcHRpb24gPSBS
VENTZXNzaW9uRGVzY3JpcHRpb246OmNyZWF0ZShzZXNzaW9uSW5pdCwgZWMpOwogICAgIGlmIChl
YyA9PSBUWVBFX01JU01BVENIX0VSUikgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENTdGF0c1Jlc3BvbnNl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JU
Q1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRl
ICJKU1JUQ1N0YXRzUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRS
b3dMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0LmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRT
ZXRSb3dMaXN0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
UUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5
IEBACiAjaW5jbHVkZSAiSlNTUUxUcmFuc2FjdGlvblN5bmMuaCIKIAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU1NRTFJl
c3VsdFNldC5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgotI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uU3luYy5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhD
dXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAK
ICNpbmNsdWRlICJKU1NWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJvcGVydHku
aCIKICNpbmNsdWRlICJTVkdFeGNlcHRpb24uaCIKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRX
b3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkg
KzUwLDkgQEAgdm9pZCBKU1NoYXJlZFdvcmtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbAogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNTaGFyZWRXb3Jr
ZXIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1NoYXJlZFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNTaGFyZWRXb3JrZXJD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1NoYXJlZFdvcmtlckNvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0
cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCiAKLSNpbmNsdWRlICJTdG9yYWdlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5s
aW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykK
IAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTVXNlck1lc3NhZ2VIYW5k
bGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYktpdFBvaW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTV2ViS2l0UG9pbnQuaCIKIAotI2luY2x1ZGUgIldlYktpdFBvaW50LmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYktpdFBv
aW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9pbnQoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYktpdFBvaW50KEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBKU1dlYktpdFBvaW50Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0
b3IgPSBqc0Nhc3Q8SlNXZWJLaXRQb2ludENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwor
ICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0
cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogCiAgICAgZmxvYXQgeCA9IDA7CiAgICAg
ZmxvYXQgeSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMSBA
QAogI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5j
bHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9t
LmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIK
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC00
NCw5ICs0NSw5IEBAIEpTQzo6SlNWYWx1ZSBKU1dvcmtlcjo6cG9zdE1lc3NhZ2UoSlNDOjoKICAg
ICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmltcGwoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXb3JrZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXb3Jr
ZXIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1dvcmtlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNXb3JrZXJDb25zdHJ1Y3Rvciog
anNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1dvcmtlckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PERP
TUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFs
U2NvcGUuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL01pY3JvdGFzay5oPgog
CiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxNzAx
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNDcnlwdG9LZXkuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxpc3QuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtODAzLDEyICs4MDMsOSBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICBpZiAoJGhhc1BhcmVudCkgewogICAgICAgICAkaGVhZGVySW5jbHVkZXN7
IiRwYXJlbnRDbGFzc05hbWUuaCJ9ID0gMTsKICAgICB9IGVsc2UgewotICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwotICAgICAgICAkaGVhZGVySW5jbHVkZXN7
IjxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+In0gPSAxOworICAgICAgICAkaGVhZGVySW5jbHVk
ZXN7IkpTRE9NV3JhcHBlci5oIn0gPSAxOwogICAgICAgICBpZiAoJGludGVyZmFjZS0+aXNFeGNl
cHRpb24pIHsKICAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3JQcm90
b3R5cGUuaD4ifSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkaGVhZGVySW5j
bHVkZXN7IjxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPiJ9ID0gMTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtODIwLDcgKzgxNyw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAkaGVh
ZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7CiAgICAgfQogICAgIAotICAgICRo
ZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNPYmplY3QuaD4ifSA9IDE7CiAgICAgJGhlYWRlcklu
Y2x1ZGVzeyJTVkdFbGVtZW50LmgifSA9IDEgaWYgJGNsYXNzTmFtZSA9fiAvXkpTU1ZHLzsKIAog
ICAgIG15ICRpbXBsVHlwZSA9ICRpbnRlcmZhY2VOYW1lOwpAQCAtODk1LDcgKzg5MSwxMCBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICAjIFByb3RvdHlwZQotICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIikgdW5sZXNzIElzRE9NR2xvYmFsT2Jq
ZWN0KCRpbnRlcmZhY2UpOworICAgIHVubGVzcyAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFj
ZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKTsKKyAg
ICB9CiAKICAgICAkaGVhZGVyVHJhaWxpbmdJbmNsdWRlc3siJHtjbGFzc05hbWV9Q3VzdG9tLmgi
fSA9IDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tSGVhZGVy
In07CiAKQEAgLTExMTQsNiArMTExMyw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6XG4iKTsKKwogICAgICMgQ29uc3Ry
dWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEpTQzo6Vk0mLCBKU0M6OlN0cnVj
dHVyZSosIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7CkBA
IC0xMTI2LDE1ICsxMTI2LDE2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKLQog
ICAgIH0KIAogICAgICMgc3RydWN0dXJlIGZsYWdzCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAiKTsKLSAgICBmb3Jl
YWNoIG15ICRzdHJ1Y3R1cmVGbGFnIChzb3J0IChrZXlzICVzdHJ1Y3R1cmVGbGFncykpIHsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgJHN0cnVjdHVyZUZsYWcgLiAiIHwgIik7CisgICAg
aWYgKCVzdHJ1Y3R1cmVGbGFncykgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9ICIpOworICAgICAgICBmb3Jl
YWNoIG15ICRzdHJ1Y3R1cmVGbGFnIChzb3J0IChrZXlzICVzdHJ1Y3R1cmVGbGFncykpIHsKKyAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICRzdHJ1Y3R1cmVGbGFnIC4gIiB8ICIpOwor
ICAgICAgICB9CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJCYXNlOjpTdHJ1Y3R1cmVG
bGFncztcbiIpOwogICAgIH0KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQmFzZTo6U3RydWN0
dXJlRmxhZ3M7XG4iKTsKIAogICAgICMgSW5kZXggc2V0dGVyCiAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKQEAgLTExOTYs
MTQgKzExOTcsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiXG4iKTsKIAogICAgICMgQWRkIHByb3RvdHlwZSBkZWNsYXJhdGlvbi4KLSAgICBHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVy
ZmFjZSwgJGludGVyZmFjZU5hbWUpOwotCi0gICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTm9JbnRlcmZhY2VPYmplY3QifSkgewotICAgICAgICAkaGVhZGVySW5jbHVk
ZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwotICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewotICAgICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIn0gPSAxOwotICAgICAgICB9
Ci0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQs
ICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKKyAgICBpZiAoSGVhZGVy
TmVlZHNQcm90b3R5cGVEZWNsYXJhdGlvbigkaW50ZXJmYWNlKSkgeworICAgICAgICBHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVy
ZmFjZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0KIAogICAgIGlmICgkaGFzRm9yd2FyZERlY2xh
cmluZ0Z1bmN0aW9ucykgewpAQCAtMTI1MSw2ICsxMjQ2LDE1IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRl
cmZhY2UpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIvLyBDdXN0b20gY29uc3Ry
dWN0b3JcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSop
O1xuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JU
ZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiYm9vbCBmaWxsJHtpbnRlcmZhY2VOYW1lfUluaXQoJHtpbnRlcmZhY2VOYW1lfUluaXQm
LCBKU0RpY3Rpb25hcnkmKTtcblxuIik7CisgICAgfQorCiAgICAgbXkgJGNvbmRpdGlvbmFsU3Ry
aW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVyZmFj
ZSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxufSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxu
XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxT
dHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKQEAgLTE2OTIsNiArMTY5Niw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0
ZW1wbGF0ZQogICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uQ29udGVudEhlYWRlcigkaW50ZXJmYWNlKSk7CiAKKyAgICAkaW1wbEluY2x1ZGVzeyJKU0RP
TUJpbmRpbmcuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyI8d3RmL0dldFB0ci5oPiJ9ID0g
MTsKICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPiJ9ID0g
MSBpZiAkaW5kZXhlZEdldHRlckZ1bmN0aW9uOwogCkBAIC0xNzMyLDEwICsxNzM3LDEyIEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KSBpZiAkaW5BcHBsZUNvcHlyaWdodDsKKworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgfQogCiAgICAgaWYgKCRudW1BdHRy
aWJ1dGVzID4gMCB8fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vSW50ZXJm
YWNlT2JqZWN0In0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIi8vIEF0dHJpYnV0ZXNc
blxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLy8gQXR0cmlidXRlc1xuXG4iKTsK
ICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9
KSB7CiAgICAgICAgICAgICBuZXh0IGlmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkZvcndhcmREZWNsYXJlSW5IZWFkZXIifTsKIApAQCAtMTc1OSw4ICsxNzY2
LDI1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkY29uc3Ry
dWN0b3JGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0
b3IiOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y29uc3RydWN0b3JG
dW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpO1xuIik7CiAgICAgICAgIH0KKworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgfQorCisgICAgIyBBZGQgcHJvdG90eXBl
IGRlY2xhcmF0aW9uLgorICAgIGlmICghSGVhZGVyTmVlZHNQcm90b3R5cGVEZWNsYXJhdGlvbigk
aW50ZXJmYWNlKSkgeworICAgICAgICBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaW1w
bENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKKyAgICB9
CisKKyAgICAjIEFkZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbgorICAgIGlmICghJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vSW50ZXJmYWNlT2JqZWN0In0pIHsKKyAgICAgICAg
JGltcGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CisgICAgICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIn0gPSAxOwor
ICAgICAgICB9CisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbihcQGltcGxD
b250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgfQog
CisKICAgICBteSBAaGFzaEtleXMgPSAoKTsKICAgICBteSBAaGFzaFZhbHVlMSA9ICgpOwogICAg
IG15IEBoYXNoVmFsdWUyID0gKCk7CkBAIC0xOTQ0LDEyICsxOTY4LDYgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
ImNvbnN0IENsYXNzSW5mbyAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNfaW5mbyA9IHsgXCIke3Zp
c2libGVJbnRlcmZhY2VOYW1lfVByb3RvdHlwZVwiLCAmQmFzZTo6c19pbmZvLCAmJHtjbGFzc05h
bWV9UHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoJHtjbGFzc05hbWV9UHJv
dG90eXBlKSB9O1xuXG4iKTsKICAgICB9Ci0gICAgdW5sZXNzIChJc0RPTUdsb2JhbE9iamVjdCgk
aW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2Ns
YXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8JHtjbGFzc05hbWV9
Pih2bSwgZ2xvYmFsT2JqZWN0KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7Ci0gICAgfQogCiAgICAgaWYgKFByb3RvdHlwZU92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCgkaW50ZXJmYWNlKSkgewogICAgICAgICBteSAkbnVtUHJvdG90eXBlQXR0cmlidXRlcyA9
IFByb3RvdHlwZUF0dHJpYnV0ZUNvdW50KCRpbnRlcmZhY2UpOwpAQCAtMjA1MywxMiArMjA3MSwx
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX06OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJHBhcmVudENsYXNzTmFtZSBuZSAi
SlNDOjpET01Ob2RlRmlsdGVyIikgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
ICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3Qs
ICR7cGFyZW50Q2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJHtjbGFzc05h
bWV9UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgJHtjbGFzc05hbWV9UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgJHtwYXJlbnRDbGFzc05hbWV9
OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTtcbiIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbXkgJHByb3RvdHlwZSA9ICRpbnRlcmZhY2UtPmlzRXhjZXB0aW9uID8g
ImVycm9yUHJvdG90eXBlIiA6ICJvYmplY3RQcm90b3R5cGUiOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+JHtwcm90b3R5cGV9KCkpKTtcbiIpOwogICAg
ICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX06OmdldFByb3RvdHlwZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTwke2NsYXNzTmFtZX0+KHZtLCBnbG9iYWxPYmplY3QpO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKICAgICBpZiAo
ISRoYXNQYXJlbnQpIHsKQEAgLTQyNjYsOSArNDI4OSw2IEBAIHN1YiBHZW5lcmF0ZVByb3RvdHlw
ZURlY2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiY2xhc3MgJHtwcm90b3R5cGVD
bGFzc05hbWV9IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7XG4iKTsKICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJwdWJsaWM6XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTtcbiIpOwotICAgIHVubGVzcyAo
SXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7XG4iKTsKLSAgICB9CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
c3RhdGljICR7cHJvdG90eXBlQ2xhc3NOYW1lfSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpXG4i
KTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAge1xuIik7CkBAIC00Mjc5LDcgKzQyOTks
MjAgQEAgc3ViIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24KIAogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBERUNMQVJFX0lORk87XG4iKTsKIAorICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwKKyAgICAgICAgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKVxuIiAuCisgICAgICAgICIgICAge1xuIiAuCisgICAgICAgICIgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTtcbiIgLgorICAgICAgICAiICAgIH1cbiIpOworCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
XG5wcml2YXRlOlxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICR7cHJvdG90eXBl
Q2xhc3NOYW1lfShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKwogICAgIGlmIChQ
cm90b3R5cGVPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSkpIHsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKICAgICAgICAgaWYgKElzRE9NR2xvYmFsT2Jq
ZWN0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAg
ICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
In0gPSAxOwpAQCAtNDI4NywyMSArNDMyMCwxOCBAQCBzdWIgR2VuZXJhdGVQcm90b3R5cGVEZWNs
YXJhdGlvbgogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpO1xuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcHVzaChAJG91
dHB1dEFycmF5LAotICAgICAgICAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iIC4KLSAgICAgICAgIiAgICB7XG4iIC4KLSAgICAgICAg
IiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpO1xuIiAuCi0gICAgICAgICIgICAgfVxuIik7CisKICAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSJ9
KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlT
bG90Jik7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGJvb2wgcHV0RGVs
ZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgfQogCiAgICAgIyBDdXN0b20gZGVmaW5l
T3duUHJvcGVydHkgZnVuY3Rpb24KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBz
aG91bGRUaHJvdyk7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlIn07Ci0KLSAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJcbnByaXZhdGU6XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgJHtw
cm90b3R5cGVDbGFzc05hbWV9KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkgeyB9XG4iKTsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9KSB7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIlxuIik7CisgICAgCXB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHNob3VsZFRocm93KTtcbiIpOworICAgIH0KIAogICAgICMgc3RydWN0dXJlIGZsYWdzCiAgICAg
aWYgKCVzdHJ1Y3R1cmVGbGFncykgewpAQCAtNDM0NywxMCArNDM3Nyw5IEBAIHN1YiBHZW5lcmF0
ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxu
Iik7CiAKICAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpICYmICEkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwotCiAgICAgICAgIGlmICgh
SGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0JHtjbGFzc05hbWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKICAgICAgICAgICAgIG15IEBj
b25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc307CiAgICAgICAgICAgICBp
ZiAoQGNvbnN0cnVjdG9ycyA+IDEpIHsKICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRjb25z
dHJ1Y3RvciAoQGNvbnN0cnVjdG9ycykgewpAQCAtNDM2NywxMCArNDM5Niw2IEBAIHN1YiBHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAifTtcblxuIik7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1w
bGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJib29sIGZpbGwke2ludGVyZmFjZU5hbWV9SW5pdCgke2ludGVyZmFjZU5hbWV9SW5pdCYsIEpT
RGljdGlvbmFyeSYpO1xuXG4iKTsKLSAgICB9Ci0KICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewogICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksIDw8RU5EKTsKIGNsYXNzIEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewpAQCAtNDY5NCwxMSArNDcx
OSwxMSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICB9IGVsc2lm
ICgkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7XG4iKTsKICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZih2bSwgZ2xv
YmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke2NsYXNzTmFtZX06
OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke3Byb3RvQ2xhc3NOYW1lfTo6
c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfQogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoJHtsZWFzdENvbnN0cnVjdG9yTGVuZ3RofSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8
IERvbnRFbnVtKTtcbiIpIGlmIGRlZmluZWQgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGg7CiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgJHtjbGFz
c05hbWV9Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpO1xuIikgaWYgQ29uc3RydWN0b3JI
YXNQcm9wZXJ0aWVzKCRpbnRlcmZhY2UpOwpAQCAtNDc1Miw0ICs0Nzc3LDExIEBAIHN1YiBJc0Nv
bnN0cnVjdGFibGUKICAgICByZXR1cm4gSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkg
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JUZW1wbGF0ZSJ9OwogfQog
CitzdWIgSGVhZGVyTmVlZHNQcm90b3R5cGVEZWNsYXJhdGlvbgoreworICAgIG15ICRpbnRlcmZh
Y2UgPSBzaGlmdDsKKworICAgIHJldHVybiBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSB8
fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21OYW1lZEdldHRlck9u
UHJvdG90eXBlIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9t
RGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9OworfQorCiAxOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsNTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
RnVuY3Rpb25Qb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsK
KyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgor
ICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsK
KwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUZXN0QWN0aXZlRE9NT2JqZWN0VGFibGVJbmRleFs0XSA9IHsKQEAgLTgyLDcgKzEyNiw3
IEBAIHZvaWQgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmYKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
OwogfQogCkBAIC0xMDUsMTEgKzE0OSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RBY3RpdmUKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlVGFibGUgPSB7IDIsIDMsIGZhbHNlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90
b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGVJ
bmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6
c19pbmZvID0geyAiVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8s
ICZKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZl
RE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RBY3RpdmVET01P
YmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CkBAIC0xMjksNiArMTY4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RBY3Rp
dmVET01PYmplY3Q6OmNyZWF0ZVAKICAgICByZXR1cm4gSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0
OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xv
YmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdEFjdGl2ZURPTU9i
amVjdF9oCiAjZGVmaW5lIEpTVGVzdEFjdGl2ZURPTU9iamVjdF9oCiAKLSNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0QWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3Rv
dHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlND
OjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Z2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CkBA
IC05Niw0OSArOTQsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldv
CiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
VGVzdEFjdGl2ZURPTU9iamVjdCopOwogVGVzdEFjdGl2ZURPTU9iamVjdCogdG9UZXN0QWN0aXZl
RE9NT2JqZWN0KEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5
cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0
ZToKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0
b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURP
TU9iamVjdENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1
bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbihKU0M6OkV4ZWNTdGF0
ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBz
dGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2Ns
YXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAg
eworICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAK
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlclRhYmxlSW5kZXhbMl0gPSB7CkBAIC03Niw3ICsxMjAsNyBAQCB2b2lkIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6
OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTk2LDEx
ICsxNDAsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q3VzdG9tCiBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUg
PSB7IDEsIDEsIGZhbHNlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlVmFs
dWVzLCAwLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNv
bnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RDdXN0b21O
YW1lZEdldHRlcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMjAsNiArMTU5LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlcjo6Y3JlYXQKICAgICByZXR1cm4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCShyZXZpc2lvbiAx
NzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNp
Zm5kZWYgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAogI2RlZmluZSBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlcl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXIuaCIKICNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIKLSNpbmNsdWRlIDxy
dW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCop
OwpAQCAtMTAwLDQ5ICs5OCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFw
cGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKIFRlc3RDdXN0b21OYW1lZEdldHRlciogdG9U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9J
TkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19Owot
Ci1jbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJD
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGlj
OgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgIHsKLSAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFS
RV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0
b3IuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFy
eS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5oIgpAQCAtMzgsNiArMzksNTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0
cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0
cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6
OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qg
eworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShK
U0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKwogLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC0x
MDAsNyArMTQ3LDcgQEAgdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6Ogog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtMTM1LDExICsxODIsNiBAQCBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRDCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSA9IHsgMywgNywgdHJ1ZSwgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBl
IiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKSB9
OwogCi1KU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQog
dm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTU5LDYgKzIwMSwxMSBA
QCBKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlCiAgICAgcmV0dXJuIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVj
dCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVz
dEV2ZW50Q29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0
RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29u
c3RydWN0b3IqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAko
cmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIx
LDggQEAKICNpZm5kZWYgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcl9oCiAjZGVmaW5lIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVj
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDIsNiArMzksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CiAgICAgfkpTVGVzdEV2ZW50Q29uc3RydWN0b3IoKTsKICAgICBERUNMQVJFX0lORk87
CkBAIC03NCw3ICs3Miw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk3LDUyICs5NCw2
IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXZlbnRDb25z
dHJ1Y3RvciopOwogVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvVGVzdEV2ZW50Q29uc3RydWN0b3Io
SlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1
cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToK
LSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAg
fQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwotICAg
IHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCos
IEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0
b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYsIEpTRGljdGlvbmFyeSYpOwogCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRh
cmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNTMgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1
dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRU
YXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNz
IEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0
cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVu
dFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAv
KiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3RFdmVudFRhcmdldFRhYmxlSW5kZXhbMl0gPSB7CkBAIC04NSw3ICsxMjksNyBAQCB2b2lk
IEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50
VGFyZ2V0OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTExNCwx
MSArMTU4LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50VAogc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlID0geyA0
LCA3LCBmYWxzZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldFByb3Rv
dHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKSB9OwogCi1K
U09iamVjdCogSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNU
ZXN0RXZlbnRUYXJnZXQ+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEV2ZW50
VGFyZ2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwpAQCAtMTM4LDYgKzE3NywxMSBAQCBKU09iamVjdCogSlNUZXN0RXZl
bnRUYXJnZXQ6OmNyZWF0ZVByb3RvCiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0UHJvdG90
eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
Z2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50VGFyZ2V0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
Kwogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsK
ICAgICBKU1Rlc3RFdmVudFRhcmdldCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2
ZW50VGFyZ2V0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24g
MTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVm
IEpTVGVzdEV2ZW50VGFyZ2V0X2gKICNkZWZpbmUgSlNUZXN0RXZlbnRUYXJnZXRfaAogCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVk
ZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVj
dFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzM4LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5
cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTEwNCw0OSArMTAyLDYgQEAg
aW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudFRhcmdldCop
OwogVGVzdEV2ZW50VGFyZ2V0KiB0b1Rlc3RFdmVudFRhcmdldChKU0M6OkpTVmFsdWUpOwogCi1j
bGFzcyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0
ZToKLSAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDE3MDE1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNl
cHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
VGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtMzUsNiArMzYsNDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5h
bWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25D
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvblByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rl
c3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVf
SU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNz
IEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0
IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFeGNlcHRpb25D
b25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RF
eGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNM
QVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxl
ICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RFeGNlcHRp
b25UYWJsZUluZGV4WzJdID0gewpAQCAtNzMsNyArMTE3LDcgQEAgdm9pZCBKU1Rlc3RFeGNlcHRp
b25Db25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c2VsZih2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXhjZXB0aW9uOjpnZXRQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8
IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTkzLDExICsxMzcsNiBAQCBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXhjZXB0CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlVGFi
bGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdEV4Y2VwdGlvblByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6
OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXhjZXB0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0K
LQogdm9pZCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTcsNiArMTU2LDExIEBAIEpT
T2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHkKICAgICByZXR1cm4gSlNUZXN0
RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXhjZXB0
aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5lcnJvclByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246
OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFeGNlcHRpb24+KHZtLCBnbG9iYWxPYmpl
Y3QpOworfQorCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2Vs
bCkKIHsKICAgICBKU1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RFeGNlcHRpb24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9uIDE3
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
eGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDkgQEAKICNpZm5kZWYgSlNU
ZXN0RXhjZXB0aW9uX2gKICNkZWZpbmUgSlNUZXN0RXhjZXB0aW9uX2gKIAotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RF
eGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yUHJvdG90eXBlLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszOCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV4Y2VwdGlvbigpOwpAQCAtOTYsNDkgKzk1
LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFeGNlcHRp
b24qKTsKIFRlc3RFeGNlcHRpb24qIHRvVGVzdEV4Y2VwdGlvbihKU0M6OkpTVmFsdWUpOwogCi1j
bGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwot
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBy
ZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0
RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7
Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAg
c3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMTcwMTU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTMxLDYgKzMyLDQ5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFz
cyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC01NSw3ICs5OSw3IEBAIHZvaWQgSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG8KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAK
QEAgLTc1LDExICsxMTksNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2Vu
ZXJhCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3Rv
dHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFi
bGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgJkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZSwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKSB9
OwogCi1KU09iamVjdCogSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERP
TVByb3RvdHlwZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPih2bSwgZ2xvYmFsT2JqZWN0KTsK
LX0KLQogdm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtOTksNiAr
MTM4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpjcmUKICAgICBy
ZXR1cm4gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7
CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRQcm90b3R5cGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRE
T01Qcm90b3R5cGU8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4odm0sIGdsb2JhbE9iamVjdCk7
Cit9CisKIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6ZGVzdHJveShKU0M6OkpTQ2Vs
bCogY2VsbCkKIHsKICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KGNlbGwpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2gKICNkZWZpbmUgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZV9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKICNpbmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAg
ICB+SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSgpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcy
LDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAg
aW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKik7CiBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogdG9UZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICB7Ci0gICAgICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNs
YXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25z
dHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGlj
OgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAg
ICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kNChK
U0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCisKIC8vIEF0dHJpYnV0ZXMKIAogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQpAQCAtMTIxLDYgKzEyMiw1NCBAQCBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsCiB2b2lkIHNldEpTVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworCitjbGFzcyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEpTQzo6RXhlY1N0YXRlKik7Cisj
aWYgRU5BQkxFKFRFU1RfSU5URVJGQUNFKQorICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworI2Vu
ZGlmIC8vIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKK307CisKIC8qIEhhc2ggdGFibGUgKi8KIAog
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEludGVyZmFjZVRhYmxl
SW5kZXhbNF0gPSB7CkBAIC0yNjYsNyArMzE1LDcgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFs
T2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNlOjpnZXRQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBAIC00MzgsMTEgKzQ4
Nyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RJbnRlcmYKIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDE3LCA2Mywg
dHJ1ZSwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VQcm90b3R5cGUiLCAmQmFzZTo6
c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEludGVyZmFjZT4odm0sIGds
b2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtNDYy
LDYgKzUwNiwxMSBAQCBKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5CiAg
ICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3Qq
IEpTVGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEludGVyZmFj
ZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMs
OCBAQAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5j
bHVkZSAiVGVzdEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICszOSw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtMTIzLDU0ICsx
MjEsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEludGVy
ZmFjZSopOwogVGVzdEludGVyZmFjZSogdG9UZXN0SW50ZXJmYWNlKEpTQzo6SlNWYWx1ZSk7CiAK
LWNsYXNzIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAg
ICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSop
OwotI2lmIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
LSNlbmRpZiAvLyBFTkFCTEUoVEVTVF9JTlRFUkZBQ0UpCi19OwotCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw5ICszNSw1MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGdW5jdGlvbnMK
IAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBB
dHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3Rh
dGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBz
dHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I+KHZt
LmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3Ioc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0
cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNjIs
NyArMTA2LDcgQEAgdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldFByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtODUsMTEgKzEyOSw2IEBAIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RNZWRpYVEKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxlID0geyAyLCAzLCB0cnVl
LCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAm
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzZWxmKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KHZtLCBnbG9iYWxPYmplY3QpOwot
fQotCiB2b2lkIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMDks
NiArMTQ4LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjoKICAg
ICByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4odm0s
IGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6
ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcio+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
X2gKICNkZWZpbmUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcl9oCiAKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9P
YmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcigpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyT3duZXIgOiBw
dWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZv
aWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Kik7CiBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogdG9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcihKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVj
dG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgogCisjaW5j
bHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29u
c3RydWN0b3IuaCIKQEAgLTM0LDYgKzM1LDc0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0
dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0
ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgeworcHVibGljOgorICAgIHR5cGVk
ZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKKworICAgIHN0YXRpYyBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY29u
c3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gY29uc3RydWN0b3I7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0
YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVj
dG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU4LDcgKzEyNyw3IEBAIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjoKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpz
ZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTk2LDcgKzE2
NSw3IEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWMKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVChpbmhlcml0cyhp
bmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
Tm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9u
ZSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTEyMiwxMSAr
MTkxLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVkQwogc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUgPSB7
IDEsIDEsIHRydWUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlcywg
MCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0
TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4o
dm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKQEAgLTE0Niw2ICsyMTAsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OmNyZWF0ZQogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJv
dG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldFBy
b3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKK30KKwogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDEyICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JfaAogI2RlZmluZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKIAotI2luY2x1ZGUgIkRP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKICAgICBERUNM
QVJFX0lORk87CkBAIC03NCw3ICs3MSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk3
LDc0ICs5Myw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
TmFtZWRDb25zdHJ1Y3RvciopOwogVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvVGVzdE5hbWVkQ29u
c3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5
cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0g
ICAgewotICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewot
cHJpdmF0ZToKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewotcHVibGljOgotICAg
IHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKLQotICAgIHN0YXRpYyBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAg
ICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Kik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw1MiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0
Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dE5vZGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0Tm9kZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROb2RlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Tm9kZVByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Tm9kZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNUZXN0Tm9kZUNvbnN0
cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7
CisgICAgICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROb2Rl
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3Rl
ZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTVGVzdE5vZGUoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
K307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3ROb2RlQ29uc3RydWN0b3JUYWJsZUluZGV4WzFd
ID0gewpAQCAtNjUsNyArMTExLDcgQEAgdm9pZCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdE5vZGU6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsK
IH0KIApAQCAtOTEsMTEgKzEzNyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3ROb2RlUHIKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxl
ID0geyAxLCAxLCB0cnVlLCBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVz
dE5vZGVQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9kZVBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGVQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAm
SlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5v
ZGVQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxmKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVz
dE5vZGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CkBAIC0xMTEsNyArMTUyLDEyIEBAIEpTVGVzdE5vZGU6OkpTVGVzdE5v
ZGUoU3RydWN0dXJlKiBzdHJ1Y3QKIAogSlNPYmplY3QqIEpTVGVzdE5vZGU6OmNyZWF0ZVByb3Rv
dHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJu
IEpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2Rl
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNOb2RlUHJvdG90
eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpKSk7CisgICAgcmV0dXJuIEpTVGVzdE5vZGVQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNOb2RlOjpnZXRQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5vZGU6OmdldFByb3RvdHlwZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERP
TVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDggQEAKICNpZm5kZWYg
SlNUZXN0Tm9kZV9oCiAjZGVmaW5lIEpTVGVzdE5vZGVfaAogCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiVGVzdE5vZGUuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzks
NiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNy
ZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKICAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjYsNTIgKzY1LDYgQEAgcHJvdGVjdGVk
OgogfTsKIAogCi1jbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE5v
ZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7
IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZUNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3ROb2RlKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZUZ1bmN0aW9uTm9u
ZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRy
aWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNSZWFkb25seUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtNTUsNiArNTYsNDkg
QEAgdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2Vw
dGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5v
bmRldGVybWluaXN0aWNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwg
c3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVz
dE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFz
ZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAv
KiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yVGFibGVJbmRl
eFsxXSA9IHsKQEAgLTc5LDcgKzEyMyw3IEBAIHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0Nv
bnN0cnVjdG9yOjoKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTEyMCwxMSArMTY0LDYgQEAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5vbmRldAogc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGUgPSB7IDcsIDE1LCB0cnVl
LCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5v
bmRldGVybWluaXN0aWNQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vbmRldGVybWlu
aXN0aWNQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vbmRldGVybWluaXN0
aWNQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90
eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vbmRldGVybWluaXN0aWM+KHZtLCBnbG9iYWxP
YmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0x
NDQsNiArMTgzLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpjcmVhdGUK
ICAgICByZXR1cm4gSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7
CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisK
IHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
IHsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYy5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljX2gKICNk
ZWZpbmUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY19oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0Tm9uZGV0ZXJtaW5p
c3RpYy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3Rv
dHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYygpOwogICAg
IERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpA
QCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJX
bwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3ROb25kZXRlcm1pbmlzdGljKik7CiBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdG9UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyhKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRp
YyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpT
Qzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVz
dE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBK
U1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0
LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNEb3VibGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChK
U0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEpTQzo6RXhlY1N0YXRlKik7CisKIC8vIEF0dHJpYnV0
ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKQEAgLTI5MCw2ICsyOTEsNTIgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGUoSgogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoUmVzZXJ2ZWRFbnVtVHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiB2b2lkIHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNz
IEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGlj
IEpTVGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KK307CisKK2NsYXNzIEpTVGVzdE9iakNvbnN0
cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNU
ZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3Rh
dGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgewor
ICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE9iakNvbnN0
cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rl
c3RPYmooSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdl
dENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisK
IC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVGVzdE9ialRhYmxlSW5kZXhbMTddID0gewpAQCAtNDU1LDcgKzUwMiw3IEBAIHZvaWQgSlNU
ZXN0T2JqQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW8KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYo
dm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE9iajo6Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNU
ZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtMTE3NCwxMSArMTIy
MSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNywgNTExLCB0cnVl
LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0T2JqUHJvdG90eXBlVGFi
bGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RPYmpQcm90b3R5
cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpQcm90b3R5cGUpIH07CiAK
LUpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T2Jq
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RPYmpQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0x
MTk4LDYgKzEyNDAsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE9iajo6Y3JlYXRlUHJvdG90eXBlKFZN
JgogICAgIHJldHVybiBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RP
Ymo6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPYmo+KHZtLCBnbG9iYWxPYmplY3Qp
OworfQorCiB2b2lkIEpTVGVzdE9iajo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAg
ICBKU1Rlc3RPYmoqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihjZWxsKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIx
LDggQEAKICNpZm5kZWYgSlNUZXN0T2JqX2gKICNkZWZpbmUgSlNUZXN0T2JqX2gKIAotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUg
IlRlc3RPYmouaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQ
cm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RPYmooKTsKQEAgLTEwOSw1MiArMTA3LDYg
QEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmoqKTsKIFRl
c3RPYmoqIHRvVGVzdE9iaihKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RPYmpQcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBz
ZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE9i
alByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rl
c3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE9iakNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0T2JqQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoK
LSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVz
dE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBK
U1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE9iakNvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJF
X0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPYmooSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0
dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0
aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoSlND
OjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEpTQzo6RXhlY1N0YXRl
Kik7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0
YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczQoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVj
dERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtMTI0LDcgKzE3NCw3IEBAIHZvaWQg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnUKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250
RW51bSk7CiB9CiAKQEAgLTE1MCwxMSArMjAwLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZh
bHVlIEpTVGVzdE92ZXJsbwogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycz4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTE3NCw2ICsyMTksMTEgQEAgSlNP
YmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OgogICAgIHJldHVybiBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAor
SlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldFByb3RvdHlwZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPih2bSwgZ2xvYmFsT2JqZWN0KTsK
K30KKwogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKj4oY2VsbCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4
IEBACiAjaWZuZGVmIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNfaAogI2RlZmluZSBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
KCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzIsNyArNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKIGNs
YXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNPd25lciA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CkBAIC05NSw1NiArOTIsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRl
eHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqKTsKIFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKiB0b1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKEpTQzo6SlNWYWx1
ZSk7CiAKLWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6
Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAg
ICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQot
Y2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwot
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0
YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1
cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoSlNDOjpFeGVjU3Rh
dGUqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
c3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzMihKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0
KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBA
CiAKICNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNp
bmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKQEAgLTQ2LDYgKzQ3LDQ5IEBAIHZvaWQgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXIKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUG9ydHMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkgeyB9Cit9OworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgor
ICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAg
IHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0
b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAog
c3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTcwLDcgKzEx
NCw3IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVj
dCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMTAsMTEgKzE1NCw2
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWwKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBl
VGFibGUgPSB7IDYsIDE1LCB0cnVlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewot
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMzQsNiArMTczLDExIEBAIEpTT2JqZWN0
KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnQKICAgICByZXR1cm4gSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSkpOwogfQogCitKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
CShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDExICsyMyw4IEBACiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDYgKzM5LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC0xMDEsNDkgKzk5LDYgQEAgaW5saW5lIHZvaWQq
IHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqKTsKIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRvVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAg
ICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQot
ICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
LXByaXZhdGU6Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0g
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbjIoSlNDOjpFeGVjU3RhdGUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoSlNDOjpFeGVj
U3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwor
CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNp
Z25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC03Miw2ICs3Myw1MiBAQCB2b2lk
IHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwogdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0VHlwZWRlZnNQcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc1By
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlND
OjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3MgSlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2
YXRlOgorICAgIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdFR5cGVkZWZzKEpTQzo6RXhl
Y1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxl
ICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RUeXBlZGVm
c1RhYmxlSW5kZXhbMl0gPSB7CkBAIC0xMjUsNyArMTcyLDcgQEAgdm9pZCBKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yOjpmaW5pc2hDcgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpzZWxmKHZtLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmczo6Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNU
ZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CkBAIC0yMzIsMTEg
KzI3OSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RUeXBlZGUKIHN0YXRp
YyBjb25zdCBIYXNoVGFibGUgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGVUYWJsZSA9IHsgMTcsIDYz
LCB0cnVlLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFR5cGVkZWZzUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgJkpTVGVzdFR5cGVkZWZzUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RUeXBlZGVmcz4odm0sIGdsb2JhbE9i
amVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0yNTYsNiArMjk4
LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlUHJvdG90eXAKICAgICByZXR1
cm4gSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdFR5
cGVkZWZzOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0VHlwZWRlZnM+KHZtLCBnbG9i
YWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQogewogICAgIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNUZXN0VHlwZWRlZnMqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCShyZXZpc2lvbiAx
NzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VHlwZWRlZnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNU
ZXN0VHlwZWRlZnNfaAogI2RlZmluZSBKU1Rlc3RUeXBlZGVmc19oCiAKLSNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0VHlw
ZWRlZnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RUeXBlZGVmcygpOwpAQCAtOTYsNTIgKzk0LDYg
QEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RUeXBlZGVmcyop
OwogVGVzdFR5cGVkZWZzKiB0b1Rlc3RUeXBlZGVmcyhKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qgewot
cHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
LSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0
VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0
cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90
ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNv
bnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0
RGF0YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRl
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTYXR0cmlidXRlLmgiCiAKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiYXR0cmlidXRlLmgiCkBAIC0zNSw2ICszNiw0
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNhdHRyaWJ1
dGVSZWFkb25seShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmli
dXRlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU2F0dHJpYnV0ZVByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTYXR0cmlidXRlUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTYXR0cmli
dXRlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTYXR0
cmlidXRlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Cit9OworCitjbGFzcyBKU2F0dHJpYnV0ZUNvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNhdHRy
aWJ1dGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKwor
cHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0
aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsK
KyAgICAgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNhdHRyaWJ1
dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwog
LyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTYXR0cmlidXRlQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpA
QCAtNTksNyArMTAzLDcgQEAgdm9pZCBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dAogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTYXR0cmlidXRlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU2F0dHJpYnV0ZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQog
CkBAIC04MiwxMSArMTI2LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTYXR0cmli
dXRlUAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlID0g
eyAyLCAzLCB0cnVlLCBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU2F0dHJp
YnV0ZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU2F0dHJpYnV0ZVBy
b3RvdHlwZTo6c19pbmZvID0geyAiYXR0cmlidXRlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywg
JkpTYXR0cmlidXRlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNhdHRy
aWJ1dGVQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c2Vs
ZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU2F0dHJpYnV0ZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQg
SlNhdHRyaWJ1dGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMDYsNiArMTQ1LDExIEBAIEpTT2JqZWN0KiBKU2F0
dHJpYnV0ZTo6Y3JlYXRlUHJvdG90eXBlKFYKICAgICByZXR1cm4gSlNhdHRyaWJ1dGVQcm90b3R5
cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZXJyb3JQcm90b3R5cGUo
KSkpOwogfQogCitKU09iamVjdCogSlNhdHRyaWJ1dGU6OmdldFByb3RvdHlwZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU2F0dHJpYnV0ZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNhdHRyaWJ1dGU6
OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNhdHRyaWJ1dGUqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU2F0dHJpYnV0ZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU2F0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOSBAQAogI2lmbmRl
ZiBKU2F0dHJpYnV0ZV9oCiAjZGVmaW5lIEpTYXR0cmlidXRlX2gKIAotI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgImF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwogICAgIH5KU2F0dHJpYnV0ZSgpOwogICAgIERFQ0xBUkVfSU5GTzsK
QEAgLTcyLDcgKzcxLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU2F0dHJpYnV0ZU93bmVyIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Myw2IEBAIGlubGluZSB2
b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBhdHRyaWJ1dGUqKTsKIGF0dHJpYnV0ZSog
dG9hdHRyaWJ1dGUoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNhdHRyaWJ1dGVQcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTYXR0cmlidXRl
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTYXR0
cmlidXRlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
YXR0cmlidXRlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU2F0dHJpYnV0ZUNvbnN0
cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNh
dHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsK
LQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBz
dGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAg
IHsKLSAgICAgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNhdHRy
aWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsK
LQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3Jl
YWRvbmx5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkpTcmVhZG9ubHkuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgInJlYWRvbmx5LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBA
IC0zMSw2ICszMiw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
KworY2xhc3MgSlNyZWFkb25seVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Cisg
ICAgc3RhdGljIEpTcmVhZG9ubHlQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgSlNyZWFkb25seVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5UHJvdG90eXBlPih2bS5oZWFwKSkgSlNyZWFkb25s
eVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNM
QVJFX0lORk87CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CisgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNyZWFkb25seVByb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQorfTsKKworY2xhc3Mg
SlNyZWFkb25seUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3By
aXZhdGU6CisgICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU3JlYWRvbmx5Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5Q29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU3JlYWRvbmx5Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU3JlYWRvbmx5Q29uc3RydWN0b3JUYWJsZUlu
ZGV4WzFdID0gewpAQCAtNTUsNyArOTksNyBAQCB2b2lkIEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNyZWFkb25seVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNyZWFkb25seTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogfQogCkBAIC03NSwxMSArMTE5LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTcmVhZG9ubHlQcgogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU3JlYWRvbmx5UHJvdG90eXBl
VGFibGUgPSB7IDEsIDEsIHRydWUsIEpTcmVhZG9ubHlQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwg
SlNyZWFkb25seVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU3JlYWRv
bmx5UHJvdG90eXBlOjpzX2luZm8gPSB7ICJyZWFkb25seVByb3RvdHlwZSIsICZCYXNlOjpzX2lu
Zm8sICZKU3JlYWRvbmx5UHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNy
ZWFkb25seVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTcmVhZG9ubHlQcm90b3R5cGU6OnNl
bGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBn
ZXRET01Qcm90b3R5cGU8SlNyZWFkb25seT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQg
SlNyZWFkb25seVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTk5LDYgKzEzOCwxMSBAQCBKU09iamVjdCogSlNyZWFk
b25seTo6Y3JlYXRlUHJvdG90eXBlKFZNCiAgICAgcmV0dXJuIEpTcmVhZG9ubHlQcm90b3R5cGU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU3JlYWRvbmx5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkp
OwogfQogCitKU09iamVjdCogSlNyZWFkb25seTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
cmVhZG9ubHk+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTcmVhZG9ubHk6OmRlc3Ry
b3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNyZWFkb25seSogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTcmVhZG9ubHkqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuaAkocmV2aXNpb24gMTcw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9u
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNyZWFkb25s
eV9oCiAjZGVmaW5lIEpTcmVhZG9ubHlfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAicmVhZG9ubHkuaCIKLSNpbmNsdWRl
IDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxs
Kik7CiAgICAgfkpTcmVhZG9ubHkoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2
IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNyZWFkb25seU93bmVyIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29u
dGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCByZWFkb25seSopOwogcmVhZG9ubHkqIHRvcmVhZG9ubHkoSlNDOjpK
U1ZhbHVlKTsKIAotY2xhc3MgSlNyZWFkb25seVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNyZWFkb25seVByb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU3JlYWRvbmx5UHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTcmVhZG9ubHlQcm90b3R5cGU+KHZt
LmhlYXApKSBKU3JlYWRvbmx5UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwot
ICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU3JlYWRv
bmx5UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkg
eyB9Ci19OwotCi1jbGFzcyBKU3JlYWRvbmx5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU3JlYWRvbmx5Q29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTcmVhZG9ubHlDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNyZWFkb25seUNvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTcmVhZG9ubHlD
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTcmVhZG9ubHlDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233389</attachid>
            <date>2014-06-19 15:55:02 -0700</date>
            <delta_ts>2014-06-19 16:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140619155440.patch</filename>
            <type>text/plain</type>
            <size>188471</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOSAg
cGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbQ3VybF0g
Q29tcGlsZSBlcnJvcnMgcmVsYXRlZCB0byBodHRwIGhlYWRlciBmaWVsZCBuYW1lcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyU291cmNlTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9k
ZS5oIgogI2luY2x1ZGUgIkpTQXVkaW9CdWZmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTQXVk
aW9CdWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+
CkBAIC00Miw5ICs0Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0F1ZGlvQ29udGV4dENvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0F1ZGlvQ29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0g
anNDYXN0PEpTQXVkaW9Db250ZXh0Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0
b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMs
ICJBdWRpb0NvbnRleHQgY29uc3RydWN0b3IgY2FsbGVlIGlzIHVuYXZhaWxhYmxlIikpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmls
dGVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplCiAgICAgcmV0dXJuIHdyYXA8SlNCbG9iPihnbG9iYWxPYmplY3Qs
IGJsb2IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQmxv
YkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQmxvYkNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNVQlRM
RV9DUllQVE8pCiAKICNpbmNsdWRlICJKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5UGFpckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9L
ZXlQYWlyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9LZXlQYWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5UGFp
ci5oIgogCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKwogI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudCogdG9IVE1MRm9ybUVsZW1lbgogICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU0hU
TUxGb3JtRWxlbWVudDo6aW5mbygpKSA/ICZqc0Nhc3Q8SlNIVE1MRm9ybUVsZW1lbnQqPihhc09i
amVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YShFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTRE9N
Rm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RPTUZvcm1EYXRhQ29uc3RydWN0b3IqPihleGVj
LT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBq
c0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAKICAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0gPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1p
bWVUeXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTU1pbWVUeXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNET01NaW1lVHlwZUFycmF5LmgiCiAKICNp
bmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01NaW1lVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVBsdWdpbkFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJKU0RPTVBsdWdpbkFycmF5LmgiCiAKICNpbmNs
dWRlICJET01QbHVnaW5BcnJheS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGx1Z2luQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUGx1Z2luQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NUGx1Z2luLmgiCiAKLSNpbmNsdWRlICJE
T01QbHVnaW4uaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTU1p
bWVUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgogCisjaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RhdGFDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKICNpbmNsdWRlICJKU0RhdGFDdWUuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
NCw5ICs0Nyw5IEBAIHZvaWQgSlNEYXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMKIH0K
ICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YUN1ZUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTRGF0YUN1ZUNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTRGF0YUN1ZUNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBjYXN0
ZWRUaGlzID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKIAotI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJFdmVudEhlYWRlcnMuaCIKICNpbmNsdWRlICJFdmVudEludGVyZmFjZXMu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIuaCIKIAogI2lu
Y2x1ZGUgIkZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
IDxydW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVy
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgIkpTSGlzdG9yeS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIaXN0
b3J5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklEQkZhY3Rvcnku
aCIKICNpbmNsdWRlICJJREJJbmRleC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKICNpbmNsdWRlICJKU0lEQkN1cnNvcldpdGhWYWx1ZS5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAj
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0lEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAx
NzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklEQkJp
bmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0lE
QkluZGV4LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCB2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
Tm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
SFRNTEltYWdlRWxlbWVudDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2Uo
RXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFn
ZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKIAogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9z
dC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCiAKLSNpbmNsdWRlICJMb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VT
dGF0ZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNs
dWRlICJKU01lZGlhU291cmNlU3RhdGVzLmgiCiAKLSNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRl
cy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFtQ2FwYWJpbGl0
aWVzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbUNhcGFiaWxpdGllc0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkpTQWxs
QXVkaW9DYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KENIQU5ORUxfTUVTU0FHSU5HKQogCiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbC5oIgorI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAs
MTUgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRl
ICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CkBAIC01Myw3ICs1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNNdXRhdGlv
bk8KICAgICBpZiAoIW9iamVjdCB8fCBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KG9iamVjdCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkNhbGxiYWNrIGFyZ3VtZW50IG11
c3QgYmUgYSBmdW5jdGlvbiIpKTsKIAotICAgIEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFJl
ZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gSlNNdXRhdGlvbkNhbGxiYWNrOjpj
cmVhdGUob2JqZWN0LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgSlNPYmpl
Y3QqIGpzT2JzZXJ2ZXIgPSBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBNdXRhdGlvbk9ic2VydmVyOjpjcmVhdGUoY2FsbGJhY2sucmVsZWFzZSgpKSkp
OwogICAgIFByaXZhdGVOYW1lIHByb3BlcnR5TmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIkpTTm9kZUl0
ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRv
cklubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPc2NpbGxhdG9y
Tm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiT3NjaWxsYXRvck5vZGUuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiUGFubmVyTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTAgKzI5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUG9w
U3RhdGVFdmVudC5oIgogCi0jaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUgIkpTSGlzdG9y
eS5oIgotI2luY2x1ZGUgIkpTUG9wU3RhdGVFdmVudC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENJY2VDYW5kaWRhdGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDSWNlQ2FuZGlkYXRlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
VENJY2VDYW5kaWRhdGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTMg
QEAKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1JUQ0lj
ZUNhbmRpZGF0ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1JUQ0ljZUNhbmRpZGF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUlRDSWNl
Q2FuZGlkYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBEaWN0aW9uYXJ5IHNlc3Npb25Jbml0OwpAQCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDSWNlQ2FuCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIEpTUlRDSWNlQ2FuZGlkYXRl
Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNSVENJY2VDYW5kaWRhdGVDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganND
b25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgp
KTsKICAgICBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGUgPSBSVENJY2VDYW5k
aWRhdGU6OmNyZWF0ZShzZXNzaW9uSW5pdCwgZWMpOwogICAgIGlmIChlYyA9PSBUWVBFX01JU01B
VENIX0VSUikgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENQZWVyQ29ubmVjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUlRDUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MiArMzAsMTMgQEAKICNpbmNsdWRlICJKU1JUQ1BlZXJDb25uZWN0aW9uLmgiCiAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1JUQ1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUlRD
UGVlckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1JUQ1BlZXJDb25uZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICAvLyBTcGVjIHNheXMgdGhhdCB3ZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFydW1lbnQsIHRo
ZSBSVENDb25maWd1cmF0aW9uLgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQpA
QCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDUGVlckNv
CiAgICAgaWYgKCFydGNDb25maWd1cmF0aW9uLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSVENQZWVyQ29ubmVjdGlv
biBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeSIpKTsKIAotICAgIEpTUlRDUGVl
ckNvbm5lY3Rpb25Db25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ1BlZXJD
b25uZWN0aW9uQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0
b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlJUQ1BlZXJDb25uZWN0aW9uIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENTZXNzaW9u
RGVzY3JpcHRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEyICszMSwxMyBAQAogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSVENTZXNzaW9uRGVzY3JpcHRpb24oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkg
c2Vzc2lvbkluaXQ7CkBAIC00OSw3ICs1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNSVENTZXNzaW8KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNSVENTZXNzaW9uRGVzY3JpcHRpb25Db25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkNvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0
cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbiA9IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKHNlc3Npb25Jbml0LCBlYyk7CiAgICAgaWYgKGVj
ID09IFRZUEVfTUlTTUFUQ0hfRVJSKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1N0YXRzUmVzcG9uc2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRD
U3RhdHNSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUg
IkpTUlRDU3RhdHNSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJv
d0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJKU1NRTFJlc3VsdFNl
dFJvd0xpc3QuaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgIlNRTFJlc3VsdFNl
dFJvd0xpc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkg
QEAKICNpbmNsdWRlICJKU1NRTFRyYW5zYWN0aW9uU3luYy5oIgogCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTU1FMUmVz
dWx0U2V0LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25TeW5jLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAog
I2luY2x1ZGUgIkpTU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5o
IgogI2luY2x1ZGUgIlNWR0V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdv
cmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSAr
NTAsOSBAQCB2b2lkIEpTU2hhcmVkV29ya2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtl
cihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTU2hhcmVkV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1NoYXJlZFdvcmtlckNv
bnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTU2hhcmVkV29ya2VyQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3Ry
dWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKIAotI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNUcmVlV2Fsa2VyLmgiCiAKICNpbmNs
dWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Vz
ZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU1VzZXJNZXNzYWdlSGFuZGxlci5o
IgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU1dlYktpdFBvaW50LmgiCiAKLSNpbmNsdWRlICJXZWJLaXRQb2ludC5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJLaXRQb2ludENv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYktpdFBvaW50KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJLaXRQb2ludChFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0g
anNDYXN0PEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBE
T01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rv
ck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGZsb2F0IHggPSAwOwogICAgIGZsb2F0
IHkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNp
bmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5oIgog
I2luY2x1ZGUgIldvcmtlci5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNDQsOSAr
NDUsOSBAQCBKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6CiAgICAgcmV0
dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNX
b3JrZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTV29ya2VyQ29uc3RydWN0b3IqIGpzQ29u
c3RydWN0b3IgPSBqc0Nhc3Q8SlNXb3JrZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsK
KyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25z
dHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGlmICghZXhlYy0+YXJndW1l
bnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAJKHJldmlzaW9uIDE3
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpTRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3Bl
LmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NaWNyb3Rhc2suaD4KIAogI2lm
IEVOQUJMRShTSEFSRURfV09SS0VSUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTcwMTU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5LmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTgwMywxMiArODAzLDkgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgaWYgKCRoYXNQYXJlbnQpIHsKICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkcGFy
ZW50Q2xhc3NOYW1lLmgifSA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJGhlYWRlckluY2x1
ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oPiJ9ID0gMTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJK
U0RPTVdyYXBwZXIuaCJ9ID0gMTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmlzRXhjZXB0aW9u
KSB7CiAgICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0Vycm9yUHJvdG90eXBl
Lmg+In0gPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVz
eyI8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4ifSA9IDE7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTgyMCw3ICs4MTcsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgJGhlYWRlcklu
Y2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAgICAKLSAgICAkaGVhZGVy
SW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwogICAgICRoZWFkZXJJbmNsdWRl
c3siU1ZHRWxlbWVudC5oIn0gPSAxIGlmICRjbGFzc05hbWUgPX4gL15KU1NWRy87CiAKICAgICBt
eSAkaW1wbFR5cGUgPSAkaW50ZXJmYWNlTmFtZTsKQEAgLTg5NSw3ICs4OTEsMTAgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgIyBQcm90b3R5cGUKLSAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIHVubGVzcyBJc0RPTUdsb2JhbE9iamVjdCgk
aW50ZXJmYWNlKTsKKyAgICB1bmxlc3MgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdl
dFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7CisgICAgfQog
CiAgICAgJGhlYWRlclRyYWlsaW5nSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfUN1c3RvbS5oIn0gPSAx
IGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUhlYWRlciJ9Owog
CkBAIC0xMTE0LDYgKzExMTMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7CisKICAgICAjIENvbnN0cnVjdG9y
CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUq
LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4sIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOwpAQCAtMTEy
NiwxNSArMTEyNiwxNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtc
biIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7Ci0KICAgICB9
CiAKICAgICAjIHN0cnVjdHVyZSBmbGFncwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gIik7Ci0gICAgZm9yZWFjaCBt
eSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0dXJlRmxhZ3MpKSB7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICRzdHJ1Y3R1cmVGbGFnIC4gIiB8ICIpOworICAgIGlmICgl
c3RydWN0dXJlRmxhZ3MpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAiKTsKKyAgICAgICAgZm9yZWFjaCBt
eSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0dXJlRmxhZ3MpKSB7CisgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkc3RydWN0dXJlRmxhZyAuICIgfCAiKTsKKyAgICAg
ICAgfQorICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQmFzZTo6U3RydWN0dXJlRmxhZ3M7
XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkJhc2U6OlN0cnVjdHVyZUZs
YWdzO1xuIik7CiAKICAgICAjIEluZGV4IHNldHRlcgogICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CkBAIC0xMTk2LDE0ICsx
MTk3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxu
Iik7CiAKICAgICAjIEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24uCi0gICAgR2VuZXJhdGVQcm90
b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2Us
ICRpbnRlcmZhY2VOYW1lKTsKLQotICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5vSW50ZXJmYWNlT2JqZWN0In0pIHsKLSAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJK
U0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNs
dWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9ID0gMTsKLSAgICAgICAgfQotICAg
ICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBoZWFkZXJDb250ZW50LCAkY2xh
c3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAgaWYgKEhlYWRlck5lZWRz
UHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQcm90
b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2Us
ICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKICAgICBpZiAoJGhhc0ZvcndhcmREZWNsYXJpbmdG
dW5jdGlvbnMpIHsKQEAgLTEyNTEsNiArMTI0NiwxNSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGlmIChIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNl
KSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLy8gQ3VzdG9tIGNvbnN0cnVjdG9y
XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcblxu
Iik7CisgICAgfQorCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxh
dGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
ImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNlTmFtZX1Jbml0JiwgSlNE
aWN0aW9uYXJ5Jik7XG5cbiIpOworICAgIH0KKwogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9
ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcblxuIik7
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkBAIC0xNjkyLDYgKzE2OTYsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxh
dGUKICAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkNv
bnRlbnRIZWFkZXIoJGludGVyZmFjZSkpOwogCisgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5k
aW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9HZXRQdHIuaD4ifSA9IDE7CiAg
ICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4ifSA9IDEgaWYg
JGluZGV4ZWRHZXR0ZXJGdW5jdGlvbjsKIApAQCAtMTczMiwxMCArMTczNywxMiBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICRlbmRBcHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CisKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KIAogICAgIGlmICgkbnVtQXR0cmlidXRl
cyA+IDAgfHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9i
amVjdCJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCIvLyBBdHRyaWJ1dGVzXG5cbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIEF0dHJpYnV0ZXNcblxuIik7CiAgICAg
ICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewog
ICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJGb3J3YXJkRGVjbGFyZUluSGVhZGVyIn07CiAKQEAgLTE3NTksOCArMTc2NiwyNSBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9y
RnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NvbnN0cnVjdG9yRnVuY3Rp
b25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOwogICAgICAgICB9CisKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIH0KKworICAgICMgQWRkIHByb3RvdHlwZSBkZWNs
YXJhdGlvbi4KKyAgICBpZiAoIUhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVy
ZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGltcGxDb250
ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CiAgICAgfQogCisg
ICAgIyBBZGQgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KKyAgICBpZiAoISRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOworICAgICAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgeworICAgICAgICAgICAg
JGltcGxJbmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9ID0gMTsKKyAgICAg
ICAgfQorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBpbXBsQ29udGVu
dCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOworICAgIH0KKworCiAg
ICAgbXkgQGhhc2hLZXlzID0gKCk7CiAgICAgbXkgQGhhc2hWYWx1ZTEgPSAoKTsKICAgICBteSBA
aGFzaFZhbHVlMiA9ICgpOwpAQCAtMTk0NCwxMiArMTk2OCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJjb25z
dCBDbGFzc0luZm8gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzX2luZm8gPSB7IFwiJHt2aXNpYmxl
SW50ZXJmYWNlTmFtZX1Qcm90b3R5cGVcIiwgJkJhc2U6OnNfaW5mbywgJiR7Y2xhc3NOYW1lfVBy
b3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCR7Y2xhc3NOYW1lfVByb3RvdHlw
ZSkgfTtcblxuIik7CiAgICAgfQotICAgIHVubGVzcyAoSXNET01HbG9iYWxPYmplY3QoJGludGVy
ZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05h
bWV9UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPCR7Y2xhc3NOYW1lfT4odm0s
IGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwotICAgIH0KIAogICAgIGlmIChQcm90b3R5cGVPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qo
JGludGVyZmFjZSkpIHsKICAgICAgICAgbXkgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgPSBQcm90
b3R5cGVBdHRyaWJ1dGVDb3VudCgkaW50ZXJmYWNlKTsKQEAgLTIwNTMsMTIgKzIwNzEsMTcgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJK
U09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50ICYmICRwYXJlbnRDbGFzc05hbWUgbmUgIkpTQzo6
RE9NTm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAke2Ns
YXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCAke3Bh
cmVudENsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCkpKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVBy
b3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsICR7cGFyZW50Q2xhc3NOYW1lfTo6Z2V0
UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIG15ICRwcm90b3R5cGUgPSAkaW50ZXJmYWNlLT5pc0V4Y2VwdGlvbiA/ICJlcnJv
clByb3RvdHlwZSIgOiAib2JqZWN0UHJvdG90eXBlIjsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPiR7cHJvdG90eXBlfSgpKSk7XG4iKTsKICAgICAgICAg
fQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpnZXRQcm90b3R5cGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBn
ZXRET01Qcm90b3R5cGU8JHtjbGFzc05hbWV9Pih2bSwgZ2xvYmFsT2JqZWN0KTtcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCiAgICAgaWYgKCEkaGFz
UGFyZW50KSB7CkBAIC00MjY2LDkgKzQyODksNiBAQCBzdWIgR2VuZXJhdGVQcm90b3R5cGVEZWNs
YXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNsYXNzICR7cHJvdG90eXBlQ2xhc3NO
YW1lfSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qge1xuIik7CiAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAicHVibGljOlxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHR5
cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7XG4iKTsKLSAgICB1bmxlc3MgKElzRE9N
R2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopO1xuIik7Ci0gICAgfQogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRp
YyAke3Byb3RvdHlwZUNsYXNzTmFtZX0qIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKVxuIik7CiAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwpAQCAtNDI3OSw3ICs0Mjk5LDIwIEBA
IHN1YiBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uCiAKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgREVDTEFSRV9JTkZPO1xuIik7CiAKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksCisg
ICAgICAgICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSlcbiIgLgorICAgICAgICAiICAgIHtcbiIgLgorICAgICAgICAiICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7XG4i
IC4KKyAgICAgICAgIiAgICB9XG4iKTsKKworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxucHJp
dmF0ZTpcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke3Byb3RvdHlwZUNsYXNz
TmFtZX0oSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKwog
ICAgIGlmIChQcm90b3R5cGVPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSkp
IHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKICAgICAgICAgaWYgKElzRE9N
R2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xu
Iik7CiAgICAgICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90In0gPSAxOwpAQCAtNDI4NywyMSArNDMyMCwxOCBAQCBzdWIgR2VuZXJhdGVQcm90
b3R5cGVEZWNsYXJhdGlvbgogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1xuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
cHVzaChAJG91dHB1dEFycmF5LAotICAgICAgICAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iIC4KLSAgICAgICAgIiAgICB7XG4iIC4K
LSAgICAgICAgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpO1xuIiAuCi0gICAgICAgICIgICAgfVxuIik7CisKICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblBy
b3RvdHlwZSJ9KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0
UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGJv
b2wgcHV0RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgfQogCiAgICAgIyBDdXN0
b20gZGVmaW5lT3duUHJvcGVydHkgZnVuY3Rpb24KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlIn07Ci0KLSAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJcbnByaXZhdGU6XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgJHtwcm90b3R5cGVDbGFzc05hbWV9KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9XG4iKTsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9KSB7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgIH0KIAogICAgICMgc3RydWN0dXJl
IGZsYWdzCiAgICAgaWYgKCVzdHJ1Y3R1cmVGbGFncykgewpAQCAtNDM0NywxMCArNDM3Nyw5IEBA
IHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgfVxuIik7CiAKICAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpICYm
ICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7
Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOwotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwotCiAg
ICAgICAgIGlmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOworICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0JHtjbGFzc05hbWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKICAgICAg
ICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc307CiAg
ICAgICAgICAgICBpZiAoQGNvbnN0cnVjdG9ycyA+IDEpIHsKICAgICAgICAgICAgICAgICBmb3Jl
YWNoIG15ICRjb25zdHJ1Y3RvciAoQGNvbnN0cnVjdG9ycykgewpAQCAtNDM2NywxMCArNDM5Niw2
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICB9CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAifTtcblxuIik7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29u
c3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewotICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJib29sIGZpbGwke2ludGVyZmFjZU5hbWV9SW5pdCgke2ludGVyZmFjZU5h
bWV9SW5pdCYsIEpTRGljdGlvbmFyeSYpO1xuXG4iKTsKLSAgICB9Ci0KICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksIDw8RU5EKTsKIGNsYXNzIEpTJHtpbnRlcmZhY2VOYW1lfU5h
bWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewpAQCAt
NDY5NCwxMSArNDcxOSwxMSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMK
ICAgICB9IGVsc2lmICgkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7
XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cyhp
bmZvKCkpKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6
c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAk
e2NsYXNzTmFtZX06OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke3Byb3Rv
Q2xhc3NOYW1lfTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfTo6Z2V0UHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CiAgICAgfQogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoJHtsZWFzdENvbnN0cnVjdG9yTGVuZ3RofSksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmIGRlZmluZWQgJGxlYXN0Q29uc3RydWN0b3JM
ZW5ndGg7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJlaWZ5U3RhdGljUHJvcGVydGll
cyh2bSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpO1xuIikgaWYg
Q29uc3RydWN0b3JIYXNQcm9wZXJ0aWVzKCRpbnRlcmZhY2UpOwpAQCAtNDc1Miw0ICs0Nzc3LDEx
IEBAIHN1YiBJc0NvbnN0cnVjdGFibGUKICAgICByZXR1cm4gSGFzQ3VzdG9tQ29uc3RydWN0b3Io
JGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVj
dG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0
b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JUZW1w
bGF0ZSJ9OwogfQogCitzdWIgSGVhZGVyTmVlZHNQcm90b3R5cGVEZWNsYXJhdGlvbgoreworICAg
IG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKworICAgIHJldHVybiBJc0RPTUdsb2JhbE9iamVjdCgk
aW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21O
YW1lZEdldHRlck9uUHJvdG90eXBlIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9OworfQorCiAxOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURP
TU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01P
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsNTggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZl
RE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBB
dHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhj
aXRpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0
aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEFjdGl2ZURPTU9iamVj
dENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0QWN0aXZlRE9NT2JqZWN0
VGFibGVJbmRleFs0XSA9IHsKQEAgLTgyLDcgKzEzMCw3IEBAIHZvaWQgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0Q29uc3RydWN0b3I6OmYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OnNlbGYo
dm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMDUsMTEgKzE1Myw2
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RBY3RpdmUKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGUgPSB7IDIsIDMs
IGZhbHNlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJl
dHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMjks
NiArMTcyLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZVAKICAg
ICByZXR1cm4gSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQog
CitKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBK
U1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0QWN0
aXZlRE9NT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5o
CShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsy
MSw4IEBACiAjaWZuZGVmIEpTVGVzdEFjdGl2ZURPTU9iamVjdF9oCiAjZGVmaW5lIEpTVGVzdEFj
dGl2ZURPTU9iamVjdF9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
ICAgICB+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CkBAIC05Niw0OSArOTQsNiBAQCBpbmxpbmUg
dm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEFjdGl2ZURPTU9iamVjdCopOwog
VGVzdEFjdGl2ZURPTU9iamVjdCogdG9UZXN0QWN0aXZlRE9NT2JqZWN0KEpTQzo6SlNWYWx1ZSk7
CiAKLWNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
IHsgfQotfTsKLQotY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQot
cHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdENv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3Ioc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1
LDU3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5j
dGlvbkFub3RoZXJGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNz
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVj
dG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAg
dHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgewor
ICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0
b3I+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
clRhYmxlSW5kZXhbMl0gPSB7CkBAIC03Niw3ICsxMjQsNyBAQCB2b2lkIEpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyQ29uc3RydWN0b3I6CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNl
bGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTk2LDExICsx
NDQsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q3VzdG9tCiBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUgPSB7
IDEsIDEsIGZhbHNlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlVmFsdWVz
LCAwLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CkBAIC0xMjAsNiArMTYzLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlcjo6Y3JlYXQKICAgICByZXR1cm4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
clByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+
KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
dXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCShyZXZpc2lvbiAxNzAx
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5k
ZWYgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAogI2RlZmluZSBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlcl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBw
ZXIuaCIKICNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpA
QCAtMTAwLDQ5ICs5OCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVy
V28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKIFRlc3RDdXN0b21OYW1lZEdldHRlciogdG9UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
c3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1j
bGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25z
dHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgot
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAg
IHsKLSAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9J
TkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0b3Iu
aCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5oIgpAQCAtMzgsNiArMzksNTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9
OworCitjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsK
KwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVj
dCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxl
SW5kZXhbMV0gPSB7CkBAIC0xMDAsNyArMTUxLDcgQEAgdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3I6OgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYodm0s
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6Omdl
dFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtMTM1LDExICsxODYsNiBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRDCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSA9IHsgMywgNywg
dHJ1ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENv
bnN0cnVjdG9yUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEV2ZW50Q29uc3RydWN0
b3JQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFdmVudENvbnN0
cnVjdG9yUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclBy
b3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPih2bSwgZ2xv
YmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpA
QCAtMTU5LDYgKzIwNSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlCiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSkpOwogfQogCitKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOwor
fQorCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiB7CiAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcl9o
CiAjZGVmaW5lIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JfaAogCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50Q29u
c3RydWN0b3IuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzksNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQ
cm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV2ZW50Q29uc3RydWN0b3IoKTsK
ICAgICBERUNMQVJFX0lORk87CkBAIC03NCw3ICs3Miw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3Mg
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKQEAgLTk3LDUyICs5NCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFw
cGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0RXZlbnRDb25zdHJ1Y3RvciopOwogVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRvVGVz
dEV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGlj
OgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBz
dGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogYm9vbCBmaWxs
VGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYsIEpTRGlj
dGlvbmFyeSYpOwogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24g
MTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNTcgQEAgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExp
c3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChKU0M6OkV4ZWNTdGF0
ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRU
YXJnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAg
ICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAK
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RFdmVudFRhcmdldFRh
YmxlSW5kZXhbMl0gPSB7CkBAIC04NSw3ICsxMzMsNyBAQCB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0
Q29uc3RydWN0b3I6OmZpbmlzCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYodm0sIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8
IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTExNCwxMSArMTYyLDYgQEAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50VAogc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlID0geyA0LCA3LCBmYWxzZSwgSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRUYXJnZXRQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldFByb3RvdHlwZSIsICZCYXNlOjpzX2lu
Zm8sICZKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZl
bnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRUYXJnZXQ+KHZt
LCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpA
QCAtMTM4LDYgKzE4MSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRUYXJnZXQ6OmNyZWF0ZVBy
b3RvCiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAK
K0pTT2JqZWN0KiBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
VGVzdEV2ZW50VGFyZ2V0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RFdmVu
dFRhcmdldDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFdmVudFRh
cmdldCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oY2VsbCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdEV2ZW50VGFyZ2V0
X2gKICNkZWZpbmUgSlNUZXN0RXZlbnRUYXJnZXRfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0
LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKQEAgLTEwNCw0OSArMTAyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudFRhcmdldCopOwogVGVzdEV2ZW50VGFyZ2V0
KiB0b1Rlc3RFdmVudFRhcmdldChKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgot
ICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwg
c3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVu
dFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwot
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0
YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+
KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNUZXN0RXhjZXB0aW9uLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdEV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgIlVSTC5oIgpAQCAtMzUsNiArMzYsNTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9u
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2Ns
YXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVj
dG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFeGNlcHRp
b25Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVj
dG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRh
YmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RFeGNl
cHRpb25UYWJsZUluZGV4WzJdID0gewpAQCAtNzMsNyArMTIxLDcgQEAgdm9pZCBKU1Rlc3RFeGNl
cHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c2VsZih2
bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXhjZXB0aW9uOjpnZXRQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTkzLDExICsxNDEsNiBAQCBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXhjZXB0CiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBl
VGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6
c19pbmZvID0geyAiVGVzdEV4Y2VwdGlvblByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rl
c3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5
cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJl
dHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXhjZXB0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsK
LX0KLQogdm9pZCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTcsNiArMTYwLDExIEBA
IEpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHkKICAgICByZXR1cm4gSlNU
ZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5lcnJvclByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFeGNlcHRp
b246OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFeGNlcHRpb24+KHZtLCBnbG9iYWxP
YmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKIHsKICAgICBKU1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RFeGNlcHRpb24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDkgQEAKICNpZm5kZWYg
SlNUZXN0RXhjZXB0aW9uX2gKICNkZWZpbmUgSlNUZXN0RXhjZXB0aW9uX2gKIAotI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRl
c3RFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yUHJvdG90eXBlLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszOCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdl
dFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV4Y2VwdGlvbigpOwpAQCAtOTYsNDkg
Kzk1LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFeGNl
cHRpb24qKTsKIFRlc3RFeGNlcHRpb24qIHRvVGVzdEV4Y2VwdGlvbihKU0M6OkpTVmFsdWUpOwog
Ci1jbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9uUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0
cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMTcwMTU1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgog
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTMxLDYgKzMyLDUzIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitj
bGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3Ig
Y29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC01
NSw3ICsxMDMsNyBAQCB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0UHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC03NSwxMSArMTIzLDYgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdlbmVyYQogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKQEAgLTk5LDYgKzE0MiwxMSBAQCBKU09iamVjdCogSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZTo6Y3JlCiAgICAgcmV0dXJuIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGU+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
aAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCiAjZGVmaW5l
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKTsK
ICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3Mg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01X
cmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopOwogVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGUqIHRvVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5j
dGlvblN1cHBsZW1lbnRhbE1ldGhvZDQoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgorCiAvLyBB
dHRyaWJ1dGVzCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24y
MykKQEAgLTEyMSw2ICsxMjIsNTggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbAogdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwogI2VuZGlmCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAg
ICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
K3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSopOworI2lmIEVOQUJMRShU
RVNUX0lOVEVSRkFDRSkKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyNlbmRpZiAvLyBFTkFC
TEUoVEVTVF9JTlRFUkZBQ0UpCit9OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RJbnRlcmZhY2VUYWJsZUluZGV4WzRdID0g
ewpAQCAtMjY2LDcgKzMxOSw3IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmZp
bmlzaEMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtNDM4LDExICs0OTEsNiBAQCBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJmCiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyAxNywgNjMsIHRydWUsIEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
OjpzX2luZm8gPSB7ICJUZXN0SW50ZXJmYWNlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpT
VGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZVByb3Rv
dHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2U+KHZtLCBnbG9iYWxPYmplY3Qp
OwotfQotCiB2b2lkIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTQ2Miw2ICs1MTAsMTEg
QEAgSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZTo6Y3JlYXRlUHJvdG90eQogICAgIHJldHVybiBK
U1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RJbnRl
cmZhY2U6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2U+KHZtLCBnbG9i
YWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEludGVyZmFjZTo6ZGVzdHJveShKU0M6OkpTQ2Vs
bCogY2VsbCkKIHsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RJbnRlcmZhY2UqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDggQEAKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RJ
bnRlcmZhY2UuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzksNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQ
cm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKQEAgLTEyMyw1NCArMTIxLDYgQEAgaW5s
aW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJbnRlcmZhY2UqKTsKIFRl
c3RJbnRlcmZhY2UqIHRvVGVzdEludGVyZmFjZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgc3RhdGljIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3Ry
dWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewot
ICAgICAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJu
IHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAg
ICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2UoSlNDOjpFeGVjU3RhdGUqKTsKLSNpZiBFTkFC
TEUoVEVTVF9JTlRFUkZBQ0UpCi0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0jZW5kaWYgLy8g
RU5BQkxFKFRFU1RfSU5URVJGQUNFKQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OSArMzUsNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRnVuY3Rpb25zCiAKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlRnVuY3Rpb25NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFS
RV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2
YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAg
ICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNM
QVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxl
IGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5k
ZXggSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9
IHsKQEAgLTYyLDcgKzExMCw3IEBAIHZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpn
ZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTg1LDExICsxMzMsNiBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TWVkaWFRCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVUYWJsZSA9IHsg
MiwgMywgdHJ1ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxlVmFs
dWVzLCAwLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlVGFibGVJbmRleCB9
OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlIiwgJkJhc2U6
OnNfaW5mbywgJkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVUYWJsZSwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
KSB9OwogCi1KU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6
c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPih2bSwgZ2xvYmFs
T2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwpAQCAtMTA5LDYgKzE1MiwxMSBAQCBKU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcjo6CiAgICAgcmV0dXJuIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcl9oCiAjZGVmaW5lIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaAogCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5j
bHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3
ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBA
IGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciopOwogVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHRvVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVi
bGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAg
ICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToK
LSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9J
TkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aCIKIAorI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlRl
c3ROYW1lZENvbnN0cnVjdG9yLmgiCkBAIC0zNCw2ICszNSw3OCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGlj
IEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
clByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitw
dWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRp
YyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Io
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xB
UkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKK2NsYXNzIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50IEJhc2U7CisKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I+
KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0KKwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRl
OgorICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworfTsKKwogLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4
IEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC01
OCw3ICsxMzEsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6CiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogfQogCkBAIC05Niw3ICsxNjksNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JOYW1lZENvbnN0cnVjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90
b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogfQogCkBAIC0xMjIsMTEgKzE5NSw2IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3ROYW1lZEMKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQ
cm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUpIH07
CiAKLUpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2
b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNDYsNiArMjE0LDExIEBA
IEpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGUKICAgICByZXR1cm4gSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0
KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvcio+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMiArMjEs
OCBAQAogI2lmbmRlZiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKICNkZWZpbmUgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcl9oCiAKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0ds
b2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQx
LDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBj
cmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yKCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzQsNyArNzEsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKIH07CiAKIGNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JPd25lciA6IHB1Ymxp
YyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05Nyw3NCArOTMsNiBAQCBpbmxpbmUgdm9pZCog
d3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKIFRlc3RO
YW1lZENvbnN0cnVjdG9yKiB0b1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpTQzo6SlNWYWx1ZSk7CiAK
LWNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0g
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAg
IHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KLWNsYXNzIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yV2l0aERvY3VtZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50IEJhc2U7Ci0KLSAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi1w
cml2YXRlOgotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotfTsKLQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
QXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5vZGVQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vZGVQcm90b3R5cGUqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZVByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdE5vZGVDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE5v
ZGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVi
bGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMg
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAg
ICAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9kZUNvbnN0
cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rl
c3ROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9Owor
CiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0Tm9kZUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsK
QEAgLTY1LDcgKzExNSw3IEBAIHZvaWQgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3ROb2RlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAK
QEAgLTkxLDExICsxNDEsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9k
ZVByCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZSA9IHsg
MSwgMSwgdHJ1ZSwgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3ROb2Rl
UHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVz
dE5vZGVQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJv
dG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0Tm9kZVByb3RvdHlwZTo6c2VsZihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3ROb2Rl
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwpAQCAtMTExLDcgKzE1NiwxMiBAQCBKU1Rlc3ROb2RlOjpKU1Rlc3ROb2RlKFN0
cnVjdHVyZSogc3RydWN0CiAKIEpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpjcmVhdGVQcm90b3R5cGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBKU1Rl
c3ROb2RlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTTm9kZVByb3RvdHlwZTo6
c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSkpOworICAgIHJldHVybiBKU1Rlc3ROb2RlUHJvdG90eXBl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTTm9kZTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROb2RlOjpnZXRQcm90b3R5cGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0Tm9kZT4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSw4IEBACiAjaWZuZGVmIEpTVGVz
dE5vZGVfaAogI2RlZmluZSBKU1Rlc3ROb2RlX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIlRlc3ROb2RlLmgiCi0jaW5jbHVkZSA8
cnVudGltZS9KU09iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDYgKzM3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQ
cm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTY2LDUyICs2NSw2IEBAIHByb3RlY3RlZDoKIH07
CiAKIAotY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9kZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGVQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3ROb2RlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlUHJv
dG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19
OwotCi1jbGFzcyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGVDb25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0Tm9kZShKU0M6OkV4ZWNTdGF0ZSopOwot
ICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2Vs
bCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAJKHJldmlzaW9uIDE3
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVGdW5jdGlvbk5vbmRldGVy
bWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRl
cwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1p
bmlzdGljUmVhZG9ubHlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAgLTU1LDYgKzU2LDUzIEBAIHZv
aWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25B
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKIHZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworCitjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIDogcHVibGlj
IEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJp
dmF0ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25z
dHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC03OSw3ICsxMjcsNyBAQCB2b2lkIEpTVGVzdE5v
bmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlw
ZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYzo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMjAs
MTEgKzE2OCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb25kZXQKIHN0
YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxl
ID0geyA3LCAxNSwgdHJ1ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlVmFs
dWVzLCAwLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE5v
bmRldGVybWluaXN0aWNQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY1Byb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb25kZXRlcm1pbmlz
dGljPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwpAQCAtMTQ0LDYgKzE4NywxMSBAQCBKU09iamVjdCogSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYzo6Y3JlYXRlCiAgICAgcmV0dXJuIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6
Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vbmRldGVybWluaXN0aWM+KHZtLCBnbG9i
YWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWM6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlz
dGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY19oCiAjZGVmaW5lIEpTVGVzdE5vbmRldGVybWluaXN0aWNfaAogCi0jaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAi
VGVzdE5vbmRldGVybWluaXN0aWMuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdE5vbmRldGVy
bWluaXN0aWMoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwog
fTsKIAogY2xhc3MgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY093bmVyIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29u
dGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOwogVGVzdE5vbmRldGVybWlu
aXN0aWMqIHRvVGVzdE5vbmRldGVybWluaXN0aWMoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5v
bmRldGVybWluaXN0aWNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xB
UkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJv
dG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19
OwotCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpT
VGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgIHsKLSAgICAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9J
TkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU0LDYgKzE1NCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJp
YWRpY05vZGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShKU0M6OkV4ZWNTdGF0ZSop
OworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9u
bHlMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC0yOTAsNiArMjkxLDU2IEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEoKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9p
ZCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworCitjbGFzcyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNUZXN0T2JqUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qo
dm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRl
ZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RPYmpDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0T2JqQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2Jq
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T2JqKEpTQzo6RXhlY1N0YXRl
Kik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlICovCiAK
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RPYmpUYWJsZUluZGV4
WzE3XSA9IHsKQEAgLTQ1NSw3ICs1MDYsNyBAQCB2b2lkIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RPYmo6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFi
bGVWYWx1ZXMsICp0aGlzKTsKIH0KQEAgLTExNzQsMTEgKzEyMjUsNiBAQCBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVz
dE9ialByb3RvdHlwZVRhYmxlID0geyAxMzcsIDUxMSwgdHJ1ZSwgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXMsIDAsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmplY3RQcm90b3R5
cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0T2Jq
UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsK
LSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE9iaj4odm0sIGdsb2JhbE9iamVjdCk7
Ci19Ci0KIHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTE5OCw2ICsxMjQ0LDExIEBAIEpT
T2JqZWN0KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShWTSYKICAgICByZXR1cm4gSlNUZXN0
T2JqUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0T2JqUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0T2JqOjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RP
Ymo6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lv
biAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVz
dE9ial9oCiAjZGVmaW5lIEpTVGVzdE9ial9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
ICAgICB+SlNUZXN0T2JqKCk7CkBAIC0xMDksNTIgKzEwNyw2IEBAIGlubGluZSB2b2lkKiB3cmFw
cGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqKik7CiBUZXN0T2JqKiB0b1Rlc3RPYmooSlND
OjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0T2Jq
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
Ci19OwotCi1jbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0T2JqQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2JqQ29uc3RydWN0
b3I+KHZtLmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T2JqKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
c3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw2MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZt
LmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Ioc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEpT
Qzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihKU0M6OkV4ZWNTdGF0
ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBz
dGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6
Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1
Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0
aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTEyNCw3ICsxNzgsNyBAQCB2b2lk
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1CiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1Byb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwogfQogCkBAIC0xNTAsMTEgKzIwNCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RPdmVybG8KIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNzQsNiArMjIzLDExIEBAIEpT
T2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjoKICAgICByZXR1cm4gSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAK
K0pTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4odm0sIGdsb2JhbE9iamVjdCk7
Cit9CisKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyo+KGNlbGwpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCShyZXZpc2lv
biAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEs
OCBAQAogI2lmbmRlZiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKICNkZWZpbmUgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cygpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBj
bGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFr
SGFuZGxlT3duZXIgewpAQCAtOTUsNTYgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250
ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKik7CiBUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyogdG9UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhKU0M6OkpTVmFs
dWUpOwogCi1jbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0K
LWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsK
LQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBz
dGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0
dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
LSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKEpTQzo6RXhlY1N0
YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShKU0M6OkV4ZWNTdGF0ZSopOwotICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMzKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
NChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBA
QAogCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCiAj
aW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCkBAIC00Niw2ICs0Nyw1MyBAQCB2b2lkIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVBvcnRzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFS
RV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
SlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKwor
cHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0
aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Io
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xB
UkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUg
Zm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlSW5k
ZXhbMV0gPSB7CkBAIC03MCw3ICsxMTgsNyBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBl
OjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsK
IH0KIApAQCAtMTEwLDExICsxNTgsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0U2VyaWFsCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyA2LCAxNSwgdHJ1ZSwgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZv
aWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTM0
LDYgKzE3NywxMSBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50CiAg
ICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZv
aWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsOCBAQAogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9P
YmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miw2ICszOSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtMTAxLDQ5
ICs5OSw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7CiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiB0b1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoSlNDOjpKU1Zh
bHVlKTsKIAotY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
c2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNl
OwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVu
Y3Rpb24yKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVx
dWlyZXNJbmNsdWRlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpA
QCAtNzIsNiArNzMsNTYgQEAgdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0
dAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIHZvaWQgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNz
IEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBz
dGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGU+KHZtLmhlYXApKSBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCop
OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAg
IHN0YXRpYyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgeworICAgICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I+KHZtLmhl
YXApKSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6OkV4ZWNTdGF0ZSopOworICAg
IHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCos
IEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKwogLyogSGFzaCB0YWJsZSAqLwogCiBzdGF0aWMg
Y29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0VHlwZWRlZnNUYWJsZUluZGV4WzJd
ID0gewpAQCAtMTI1LDcgKzE3Niw3IEBAIHZvaWQgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3IKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnM6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtMjMyLDExICsyODMsNiBAQCBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0VHlwZWRlCiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlVGFibGUgPSB7IDE3LCA2MywgdHJ1ZSwgSlNUZXN0
VHlwZWRlZnNQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGVU
YWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNf
aW5mbyA9IHsgIlRlc3RUeXBlZGVmc1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFR5cGVk
ZWZzUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OnNl
bGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBn
ZXRET01Qcm90b3R5cGU8SlNUZXN0VHlwZWRlZnM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2
b2lkIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMjU2LDYgKzMwMiwxMSBAQCBKU09iamVj
dCogSlNUZXN0VHlwZWRlZnM6OmNyZWF0ZVByb3RvdHlwCiAgICAgcmV0dXJuIEpTVGVzdFR5cGVk
ZWZzUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRlZnNQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Z2V0UHJv
dG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFR5cGVkZWZzPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
Kwogdm9pZCBKU1Rlc3RUeXBlZGVmczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAg
ICBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFR5cGVkZWZz
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdFR5cGVkZWZzX2gK
ICNkZWZpbmUgSlNUZXN0VHlwZWRlZnNfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdFR5cGVkZWZzLmgiCi0jaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwq
KTsKICAgICB+SlNUZXN0VHlwZWRlZnMoKTsKQEAgLTk2LDUyICs5NCw2IEBAIGlubGluZSB2b2lk
KiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0VHlwZWRlZnMqKTsKIFRlc3RUeXBlZGVm
cyogdG9UZXN0VHlwZWRlZnMoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0VHlw
ZWRlZnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19Owot
Ci1jbGFzcyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9y
T2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RUeXBlZGVmc0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0
YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0VHlw
ZWRlZnMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdl
dENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0
dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU2F0dHJpYnV0ZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlVS
TC5oIgogI2luY2x1ZGUgImF0dHJpYnV0ZS5oIgpAQCAtMzUsNiArMzYsNTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHkoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0ZUNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNhdHRyaWJ1dGVQcm90b3R5cGUgOiBwdWJsaWMg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25G
aW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU2F0dHJpYnV0ZVByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZSog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZVByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTYXR0cmlidXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
SlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNhdHRyaWJ1dGVD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAg
IEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Cisg
ICAgc3RhdGljIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
KyAgICB7CisgICAgICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpT
YXR0cmlidXRlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
K307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yVGFibGVJbmRleFsx
XSA9IHsKQEAgLTU5LDcgKzEwNyw3IEBAIHZvaWQgSlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXQKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNhdHRyaWJ1dGU6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKIH0KIApAQCAtODIsMTEgKzEzMCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U2F0dHJpYnV0ZVAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNhdHRyaWJ1dGVQcm90b3R5cGVU
YWJsZSA9IHsgMiwgMywgdHJ1ZSwgSlNhdHRyaWJ1dGVQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwg
SlNhdHRyaWJ1dGVQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNhdHRy
aWJ1dGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgImF0dHJpYnV0ZVByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sICZKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTYXR0cmlidXRlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNhdHRyaWJ1dGVQcm90b3R5
cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJl
dHVybiBnZXRET01Qcm90b3R5cGU8SlNhdHRyaWJ1dGU+KHZtLCBnbG9iYWxPYmplY3QpOwotfQot
CiB2b2lkIEpTYXR0cmlidXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTA2LDYgKzE0OSwxMSBAQCBKU09iamVj
dCogSlNhdHRyaWJ1dGU6OmNyZWF0ZVByb3RvdHlwZShWCiAgICAgcmV0dXJuIEpTYXR0cmlidXRl
UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNhdHRyaWJ1dGVQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmVycm9yUHJv
dG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTYXR0cmlidXRlOjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNhdHRyaWJ1dGU+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTYXR0
cmlidXRlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTYXR0cmlidXRlKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNhdHRyaWJ1dGUqPihjZWxsKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0
ZS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNhdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDkgQEAK
ICNpZm5kZWYgSlNhdHRyaWJ1dGVfaAogI2RlZmluZSBKU2F0dHJpYnV0ZV9oCiAKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJh
dHRyaWJ1dGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yUHJvdG90eXBlLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszOCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNhdHRyaWJ1dGUoKTsKICAgICBERUNMQVJF
X0lORk87CkBAIC03Miw3ICs3MSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNhdHRyaWJ1dGVP
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05NSw0OSArOTMsNiBAQCBp
bmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgYXR0cmlidXRlKik7CiBhdHRy
aWJ1dGUqIHRvYXR0cmlidXRlKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTYXR0cmlidXRlUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU2F0
dHJpYnV0ZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAg
ICBKU2F0dHJpYnV0ZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU2F0dHJpYnV0ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTYXR0cmlidXRlUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNhdHRyaWJ1
dGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
IEpTYXR0cmlidXRlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4g
cHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNyZWFkb25seS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU3JlYWRvbmx5LmgiCiAKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJyZWFkb25seS5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KIApAQCAtMzEsNiArMzIsNTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQXR0cmlidXRl
cwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzcmVhZG9ubHlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CisKK2NsYXNzIEpTcmVhZG9ubHlQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU3JlYWRvbmx5UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIEpTcmVhZG9ubHlQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNyZWFkb25seVByb3RvdHlwZT4odm0uaGVhcCkpIEpT
cmVhZG9ubHlQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEpTcmVhZG9ubHlQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTcmVhZG9ubHlDb25zdHJ1
Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAg
IHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNyZWFkb25s
eUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU3Jl
YWRvbmx5Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNyZWFkb25seUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNyZWFkb25seUNvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlIGZv
ciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXgg
SlNyZWFkb25seUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU1LDcgKzEwMyw3IEBA
IHZvaWQgSlNyZWFkb25seUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU3JlYWRvbmx5UHJvdG90
eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU3JlYWRvbmx5Ojpn
ZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTc1LDExICsxMjMsNiBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNyZWFkb25seVByCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlIEpTcmVhZG9ubHlQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNyZWFk
b25seVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU3JlYWRvbmx5UHJvdG90eXBlVGFibGVJbmRl
eCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTcmVhZG9ubHlQcm90b3R5cGU6OnNfaW5mbyA9IHsgInJl
YWRvbmx5UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTcmVhZG9ubHlQcm90b3R5cGVUYWJs
ZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU3JlYWRvbmx5UHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNyZWFkb25seVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU3JlYWRvbmx5Pih2
bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU3JlYWRvbmx5UHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtOTks
NiArMTQyLDExIEBAIEpTT2JqZWN0KiBKU3JlYWRvbmx5OjpjcmVhdGVQcm90b3R5cGUoVk0KICAg
ICByZXR1cm4gSlNyZWFkb25seVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpT
cmVhZG9ubHlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU3JlYWRvbmx5
OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNyZWFkb25seT4odm0sIGdsb2JhbE9iamVjdCk7
Cit9CisKIHZvaWQgSlNyZWFkb25seTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAg
ICBKU3JlYWRvbmx5KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNyZWFkb25seSo+KGNlbGwp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9u
bHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNyZWFkb25seS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MSArMjEsOCBAQAogI2lmbmRlZiBKU3JlYWRvbmx5X2gKICNkZWZpbmUgSlNyZWFkb25seV9oCiAK
LSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNp
bmNsdWRlICJyZWFkb25seS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4K
LSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQ
cm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNyZWFkb25seSgpOwogICAg
IERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU3Jl
YWRvbmx5T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzky
LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIHJlYWRvbmx5Kik7
CiByZWFkb25seSogdG9yZWFkb25seShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU3JlYWRvbmx5
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBK
U3JlYWRvbmx5UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
ICAgIEpTcmVhZG9ubHlQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNyZWFkb25seVByb3RvdHlwZT4odm0uaGVhcCkpIEpTcmVhZG9ubHlQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEpTcmVhZG9ubHlQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTcmVhZG9ubHlD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAg
IEpTcmVhZG9ubHlDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAg
ICBzdGF0aWMgSlNyZWFkb25seUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU3JlYWRvbmx5Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNyZWFkb25seUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNyZWFk
b25seUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19Owot
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233390</attachid>
            <date>2014-06-19 16:12:10 -0700</date>
            <delta_ts>2014-06-19 16:21:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140619161148.patch</filename>
            <type>text/plain</type>
            <size>188839</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOSAg
cGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbQ3VybF0g
Q29tcGlsZSBlcnJvcnMgcmVsYXRlZCB0byBodHRwIGhlYWRlciBmaWVsZCBuYW1lcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyU291cmNlTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9k
ZS5oIgogI2luY2x1ZGUgIkpTQXVkaW9CdWZmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTQXVk
aW9CdWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+
CkBAIC00Miw5ICs0Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0F1ZGlvQ29udGV4dENvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0F1ZGlvQ29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0g
anNDYXN0PEpTQXVkaW9Db250ZXh0Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0
b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMs
ICJBdWRpb0NvbnRleHQgY29uc3RydWN0b3IgY2FsbGVlIGlzIHVuYXZhaWxhYmxlIikpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmls
dGVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplCiAgICAgcmV0dXJuIHdyYXA8SlNCbG9iPihnbG9iYWxPYmplY3Qs
IGJsb2IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQmxv
YkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQmxvYkNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNVQlRM
RV9DUllQVE8pCiAKICNpbmNsdWRlICJKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5UGFpckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9L
ZXlQYWlyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9LZXlQYWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5UGFp
ci5oIgogCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKwogI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudCogdG9IVE1MRm9ybUVsZW1lbgogICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU0hU
TUxGb3JtRWxlbWVudDo6aW5mbygpKSA/ICZqc0Nhc3Q8SlNIVE1MRm9ybUVsZW1lbnQqPihhc09i
amVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YShFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTRE9N
Rm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RPTUZvcm1EYXRhQ29uc3RydWN0b3IqPihleGVj
LT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBq
c0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAKICAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0gPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1p
bWVUeXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTU1pbWVUeXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNET01NaW1lVHlwZUFycmF5LmgiCiAKICNp
bmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01NaW1lVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVBsdWdpbkFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJKU0RPTVBsdWdpbkFycmF5LmgiCiAKICNpbmNs
dWRlICJET01QbHVnaW5BcnJheS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGx1Z2luQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUGx1Z2luQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NUGx1Z2luLmgiCiAKLSNpbmNsdWRlICJE
T01QbHVnaW4uaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTU1p
bWVUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgogCisjaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RhdGFDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKICNpbmNsdWRlICJKU0RhdGFDdWUuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
NCw5ICs0Nyw5IEBAIHZvaWQgSlNEYXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMKIH0K
ICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YUN1ZUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTRGF0YUN1ZUNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTRGF0YUN1ZUNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBjYXN0
ZWRUaGlzID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKIAotI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJFdmVudEhlYWRlcnMuaCIKICNpbmNsdWRlICJFdmVudEludGVyZmFjZXMu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIuaCIKIAogI2lu
Y2x1ZGUgIkZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
IDxydW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVy
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgIkpTSGlzdG9yeS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIaXN0
b3J5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklEQkZhY3Rvcnku
aCIKICNpbmNsdWRlICJJREJJbmRleC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKICNpbmNsdWRlICJKU0lEQkN1cnNvcldpdGhWYWx1ZS5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAj
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0lEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAx
NzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklEQkJp
bmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0lE
QkluZGV4LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCB2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
Tm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
SFRNTEltYWdlRWxlbWVudDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2Uo
RXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFn
ZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKIAogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9z
dC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCiAKLSNpbmNsdWRlICJMb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VT
dGF0ZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNs
dWRlICJKU01lZGlhU291cmNlU3RhdGVzLmgiCiAKLSNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRl
cy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFtQ2FwYWJpbGl0
aWVzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbUNhcGFiaWxpdGllc0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkpTQWxs
QXVkaW9DYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KENIQU5ORUxfTUVTU0FHSU5HKQogCiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbC5oIgorI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAs
MTUgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRl
ICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CkBAIC01Myw3ICs1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNNdXRhdGlv
bk8KICAgICBpZiAoIW9iamVjdCB8fCBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KG9iamVjdCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkNhbGxiYWNrIGFyZ3VtZW50IG11
c3QgYmUgYSBmdW5jdGlvbiIpKTsKIAotICAgIEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFJl
ZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gSlNNdXRhdGlvbkNhbGxiYWNrOjpj
cmVhdGUob2JqZWN0LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgSlNPYmpl
Y3QqIGpzT2JzZXJ2ZXIgPSBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBNdXRhdGlvbk9ic2VydmVyOjpjcmVhdGUoY2FsbGJhY2sucmVsZWFzZSgpKSkp
OwogICAgIFByaXZhdGVOYW1lIHByb3BlcnR5TmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIkpTTm9kZUl0
ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRv
cklubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPc2NpbGxhdG9y
Tm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiT3NjaWxsYXRvck5vZGUuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiUGFubmVyTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTAgKzI5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUG9w
U3RhdGVFdmVudC5oIgogCi0jaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUgIkpTSGlzdG9y
eS5oIgotI2luY2x1ZGUgIkpTUG9wU3RhdGVFdmVudC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENJY2VDYW5kaWRhdGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDSWNlQ2FuZGlkYXRlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
VENJY2VDYW5kaWRhdGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTMg
QEAKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1JUQ0lj
ZUNhbmRpZGF0ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1JUQ0ljZUNhbmRpZGF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUlRDSWNl
Q2FuZGlkYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBEaWN0aW9uYXJ5IHNlc3Npb25Jbml0OwpAQCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDSWNlQ2FuCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIEpTUlRDSWNlQ2FuZGlkYXRl
Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNSVENJY2VDYW5kaWRhdGVDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganND
b25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgp
KTsKICAgICBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGUgPSBSVENJY2VDYW5k
aWRhdGU6OmNyZWF0ZShzZXNzaW9uSW5pdCwgZWMpOwogICAgIGlmIChlYyA9PSBUWVBFX01JU01B
VENIX0VSUikgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENQZWVyQ29ubmVjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUlRDUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MiArMzAsMTMgQEAKICNpbmNsdWRlICJKU1JUQ1BlZXJDb25uZWN0aW9uLmgiCiAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1JUQ1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUlRD
UGVlckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1JUQ1BlZXJDb25uZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICAvLyBTcGVjIHNheXMgdGhhdCB3ZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFydW1lbnQsIHRo
ZSBSVENDb25maWd1cmF0aW9uLgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQpA
QCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDUGVlckNv
CiAgICAgaWYgKCFydGNDb25maWd1cmF0aW9uLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSVENQZWVyQ29ubmVjdGlv
biBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeSIpKTsKIAotICAgIEpTUlRDUGVl
ckNvbm5lY3Rpb25Db25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ1BlZXJD
b25uZWN0aW9uQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0
b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlJUQ1BlZXJDb25uZWN0aW9uIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENTZXNzaW9u
RGVzY3JpcHRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEyICszMSwxMyBAQAogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSVENTZXNzaW9uRGVzY3JpcHRpb24oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkg
c2Vzc2lvbkluaXQ7CkBAIC00OSw3ICs1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNSVENTZXNzaW8KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNSVENTZXNzaW9uRGVzY3JpcHRpb25Db25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkNvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0
cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbiA9IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKHNlc3Npb25Jbml0LCBlYyk7CiAgICAgaWYgKGVj
ID09IFRZUEVfTUlTTUFUQ0hfRVJSKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1N0YXRzUmVzcG9uc2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRD
U3RhdHNSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUg
IkpTUlRDU3RhdHNSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJv
d0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJKU1NRTFJlc3VsdFNl
dFJvd0xpc3QuaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgIlNRTFJlc3VsdFNl
dFJvd0xpc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkg
QEAKICNpbmNsdWRlICJKU1NRTFRyYW5zYWN0aW9uU3luYy5oIgogCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTU1FMUmVz
dWx0U2V0LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25TeW5jLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAog
I2luY2x1ZGUgIkpTU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5o
IgogI2luY2x1ZGUgIlNWR0V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdv
cmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSAr
NTAsOSBAQCB2b2lkIEpTU2hhcmVkV29ya2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtl
cihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTU2hhcmVkV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1NoYXJlZFdvcmtlckNv
bnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTU2hhcmVkV29ya2VyQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3Ry
dWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKIAotI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUb3VjaEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUb3VjaEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVG91Y2hDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJKU1RvdWNoLmgiCiAKLSNpbmNsdWRlICJUb3VjaC5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdh
bGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRl
ICJKU1RyZWVXYWxrZXIuaCIKIAogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDxoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTVXNlck1lc3NhZ2VIYW5kbGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJLaXRQb2ludEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxNSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTV2ViS2l0UG9pbnQuaCIKIAotI2luY2x1
ZGUgIldlYktpdFBvaW50LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1dlYktpdFBvaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1dlYktpdFBvaW50Q29u
c3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNXZWJLaXRQb2ludENvbnN0cnVjdG9y
Kj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVj
dG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogCiAg
ICAgZmxvYXQgeCA9IDA7CiAgICAgZmxvYXQgeSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEwICsyOSwxMSBAQAogI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRl
ICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCi0jaW5jbHVkZSAi
SlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CkBAIC00NCw5ICs0NSw5IEBAIEpTQzo6SlNWYWx1ZSBKU1dvcmtlcjo6
cG9zdE1lc3NhZ2UoSlNDOjoKICAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmlt
cGwoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXb3JrZXJDb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0SlNXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dvcmtlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
SlNXb3JrZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1dvcmtlckNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0Nv
bnN0cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkp
OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVCYXNlLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgogI2lu
Y2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29w
ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxy
dW50aW1lL01pY3JvdGFzay5oPgogCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAi
SlNDcnlwdG9LZXkuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxp
c3QuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtODAzLDEy
ICs4MDMsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoJGhhc1BhcmVudCkgewogICAg
ICAgICAkaGVhZGVySW5jbHVkZXN7IiRwYXJlbnRDbGFzc05hbWUuaCJ9ID0gMTsKICAgICB9IGVs
c2UgewotICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwotICAg
ICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+In0gPSAxOwor
ICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpTRE9NV3JhcHBlci5oIn0gPSAxOwogICAgICAgICBp
ZiAoJGludGVyZmFjZS0+aXNFeGNlcHRpb24pIHsKICAgICAgICAgICAgICRoZWFkZXJJbmNsdWRl
c3siPHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaD4ifSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPiJ9
ID0gMTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODIwLDcgKzgxNyw2IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7
CiAgICAgfQogICAgIAotICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNPYmplY3QuaD4i
fSA9IDE7CiAgICAgJGhlYWRlckluY2x1ZGVzeyJTVkdFbGVtZW50LmgifSA9IDEgaWYgJGNsYXNz
TmFtZSA9fiAvXkpTU1ZHLzsKIAogICAgIG15ICRpbXBsVHlwZSA9ICRpbnRlcmZhY2VOYW1lOwpA
QCAtODk1LDcgKzg5MSwxMCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICAjIFBy
b3RvdHlwZQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIikg
dW5sZXNzIElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpOworICAgIHVubGVzcyAoSXNET01H
bG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7XG4iKTsKKyAgICB9CiAKICAgICAkaGVhZGVyVHJhaWxpbmdJbmNsdWRlc3si
JHtjbGFzc05hbWV9Q3VzdG9tLmgifSA9IDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkpTQ3VzdG9tSGVhZGVyIn07CiAKQEAgLTExMTQsNiArMTExMyw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6
XG4iKTsKKwogICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRP
TVdpbmRvdyIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1l
KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgSlNET01X
aW5kb3dTaGVsbCopO1xuIik7CkBAIC0xMTI2LDE1ICsxMTI2LDE2IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgfVxuXG4iKTsKLQogICAgIH0KIAogICAgICMgc3RydWN0dXJlIGZsYWdzCi0gICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSAiKTsKLSAgICBmb3JlYWNoIG15ICRzdHJ1Y3R1cmVGbGFnIChzb3J0IChrZXlzICVz
dHJ1Y3R1cmVGbGFncykpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgJHN0cnVjdHVy
ZUZsYWcgLiAiIHwgIik7CisgICAgaWYgKCVzdHJ1Y3R1cmVGbGFncykgeworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9ICIpOworICAgICAgICBmb3JlYWNoIG15ICRzdHJ1Y3R1cmVGbGFnIChzb3J0IChrZXlzICVz
dHJ1Y3R1cmVGbGFncykpIHsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICRzdHJ1
Y3R1cmVGbGFnIC4gIiB8ICIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJCYXNlOjpTdHJ1Y3R1cmVGbGFncztcbiIpOwogICAgIH0KLSAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiQmFzZTo6U3RydWN0dXJlRmxhZ3M7XG4iKTsKIAogICAgICMgSW5kZXggc2V0dGVy
CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVk
U2V0dGVyIn0pIHsKQEAgLTExOTYsMTQgKzExOTcsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKIAogICAgICMgQWRkIHByb3RvdHlwZSBkZWNs
YXJhdGlvbi4KLSAgICBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVu
dCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwotCi0gICAgaWYgKCEk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9JbnRlcmZhY2VPYmplY3QifSkgewot
ICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwotICAgICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkg
ewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVu
dC5oIn0gPSAxOwotICAgICAgICB9Ci0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJh
dGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VO
YW1lKTsKKyAgICBpZiAoSGVhZGVyTmVlZHNQcm90b3R5cGVEZWNsYXJhdGlvbigkaW50ZXJmYWNl
KSkgeworICAgICAgICBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaGVhZGVyQ29udGVu
dCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0KIAogICAg
IGlmICgkaGFzRm9yd2FyZERlY2xhcmluZ0Z1bmN0aW9ucykgewpAQCAtMTI1MSw2ICsxMjQ2LDE1
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKEhhc0N1
c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIvLyBDdXN0b20gY29uc3RydWN0b3JcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NO
YW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgeworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiYm9vbCBmaWxsJHtpbnRlcmZhY2VOYW1lfUluaXQo
JHtpbnRlcmZhY2VOYW1lfUluaXQmLCBKU0RpY3Rpb25hcnkmKTtcblxuIik7CisgICAgfQorCiAg
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmcoJGludGVyZmFjZSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxufSAv
LyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2Vu
ZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
QEAgLTE2OTIsNiArMTY5Niw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyAt
IEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQogICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVy
LCBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRlcigkaW50ZXJmYWNlKSk7CiAKKyAg
ICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVz
eyI8d3RmL0dldFB0ci5oPiJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9Qcm9w
ZXJ0eU5hbWVBcnJheS5oPiJ9ID0gMSBpZiAkaW5kZXhlZEdldHRlckZ1bmN0aW9uOwogCkBAIC0x
NzMyLDEwICsxNzM3LDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIH0K
IAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KSBpZiAkaW5B
cHBsZUNvcHlyaWdodDsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAg
fQogCiAgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCB8fCAhJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5vSW50ZXJmYWNlT2JqZWN0In0pIHsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIi8vIEF0dHJpYnV0ZXNcblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
Ly8gQXR0cmlidXRlc1xuXG4iKTsKICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRp
bnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgICAgICBuZXh0IGlmICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkZvcndhcmREZWNsYXJlSW5IZWFkZXIi
fTsKIApAQCAtMTc1OSw4ICsxNzY2LDI1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICBteSAkY29uc3RydWN0b3JGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGludGVy
ZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ2b2lkICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpO1xuIik7
CiAgICAgICAgIH0KKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgfQor
CisgICAgIyBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9uLgorICAgIGlmICghSGVhZGVyTmVlZHNQ
cm90b3R5cGVEZWNsYXJhdGlvbigkaW50ZXJmYWNlKSkgeworICAgICAgICBHZW5lcmF0ZVByb3Rv
dHlwZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRp
bnRlcmZhY2VOYW1lKTsKICAgICB9CiAKKyAgICAjIEFkZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlv
bgorICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vSW50ZXJmYWNl
T2JqZWN0In0pIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7
CisgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25z
dHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oIn0gPSAxOworICAgICAgICB9CisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWNsYXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50
ZXJmYWNlTmFtZSk7CisgICAgfQorCisKICAgICBteSBAaGFzaEtleXMgPSAoKTsKICAgICBteSBA
aGFzaFZhbHVlMSA9ICgpOwogICAgIG15IEBoYXNoVmFsdWUyID0gKCk7CkBAIC0xOTQ0LDEyICsx
OTY4LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9IGVsc2UgewogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImNvbnN0IENsYXNzSW5mbyAke2NsYXNzTmFtZX1Qcm90b3R5
cGU6OnNfaW5mbyA9IHsgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1lfVByb3RvdHlwZVwiLCAmQmFz
ZTo6c19pbmZvLCAmJHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoJHtjbGFzc05hbWV9UHJvdG90eXBlKSB9O1xuXG4iKTsKICAgICB9Ci0gICAgdW5sZXNz
IChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8JHtjbGFzc05hbWV9Pih2bSwgZ2xvYmFsT2JqZWN0KTtcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgfQogCiAgICAgaWYgKFByb3RvdHlwZU92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgkaW50ZXJmYWNlKSkgewogICAgICAgICBteSAkbnVt
UHJvdG90eXBlQXR0cmlidXRlcyA9IFByb3RvdHlwZUF0dHJpYnV0ZUNvdW50KCRpbnRlcmZhY2Up
OwpAQCAtMjA1MywxMiArMjA3MSwxNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX06OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYg
JHBhcmVudENsYXNzTmFtZSBuZSAiSlNDOjpET01Ob2RlRmlsdGVyIikgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsICR7cGFyZW50Q2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZih2
bSwgZ2xvYmFsT2JqZWN0KSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCwgJHtwYXJlbnRDbGFzc05hbWV9OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTtc
biIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbXkgJHByb3RvdHlwZSA9ICRpbnRl
cmZhY2UtPmlzRXhjZXB0aW9uID8gImVycm9yUHJvdG90eXBlIiA6ICJvYmplY3RQcm90b3R5cGUi
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1l
fVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NOYW1lfVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+JHtwcm90
b3R5cGV9KCkpKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2NsYXNz
TmFtZX06OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTwke2NsYXNzTmFtZX0+KHZt
LCBnbG9iYWxPYmplY3QpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKICAgICB9CiAKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKQEAgLTQyNjYsOSArNDI4OSw2IEBA
IHN1YiBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uCiAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiY2xhc3MgJHtwcm90b3R5cGVDbGFzc05hbWV9IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9i
amVjdCB7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwdWJsaWM6XG4iKTsKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTtcbiIpOwotICAgIHVubGVzcyAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxm
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKTsKLSAgICB9CiAKICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljICR7cHJvdG90eXBlQ2xhc3NOYW1lfSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAge1xu
Iik7CkBAIC00Mjc5LDcgKzQyOTksMjAgQEAgc3ViIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRp
b24KIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBERUNMQVJFX0lORk87XG4iKTsKIAor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwKKyAgICAgICAgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIiAuCisgICAgICAgICIgICAge1xu
IiAuCisgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTtcbiIgLgorICAgICAgICAiICAgIH1cbiIpOworCisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiXG5wcml2YXRlOlxuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICR7cHJvdG90eXBlQ2xhc3NOYW1lfShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpXG4iKTsKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAge1xuIik7CisgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIH1cbiIpOworCiAgICAgaWYgKFByb3RvdHlwZU92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCgkaW50ZXJmYWNlKSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJcbiIpOwogICAgICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgICAgICRzdHJ1Y3R1cmVGbGFn
c3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7CkBAIC00Mjg3LDIxICs0
MzIwLDE4IEBAIHN1YiBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uCiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7XG4i
KTsKICAgICAgICAgfQogICAgIH0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksCi0gICAgICAgICIg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlc
biIgLgotICAgICAgICAiICAgIHtcbiIgLgotICAgICAgICAiICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7XG4iIC4KLSAgICAg
ICAgIiAgICB9XG4iKTsKKwogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIn0pIHsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRp
YyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYm9vbCBwdXREZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
XG4iKTsKICAgICB9CiAKICAgICAjIEN1c3RvbSBkZWZpbmVPd25Qcm9wZXJ0eSBmdW5jdGlvbgot
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29u
c3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTtcbiIpIGlmICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbURlZmluZU93blByb3BlcnR5
T25Qcm90b3R5cGUifTsKLQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxucHJpdmF0ZTpcbiIp
OwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke3Byb3RvdHlwZUNsYXNzTmFtZX0oSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH1cbiIpOworICAgIGlm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21EZWZpbmVPd25Qcm9w
ZXJ0eU9uUHJvdG90eXBlIn0pIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIik7
CisgICAgfQogCiAgICAgIyBzdHJ1Y3R1cmUgZmxhZ3MKICAgICBpZiAoJXN0cnVjdHVyZUZsYWdz
KSB7CkBAIC00MzQ3LDEwICs0Mzc3LDkgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJh
dGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKIAogICAgIGlmIChJc0Nv
bnN0cnVjdGFibGUoJGludGVyZmFjZSkgJiYgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
cHJvdGVjdGVkOlxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShK
U0M6OkV4ZWNTdGF0ZSopO1xuIik7Ci0KICAgICAgICAgaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3Rv
cigkaW50ZXJmYWNlKSkgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJvdGVj
dGVkOlxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlND
OjpFeGVjU3RhdGUqKTtcbiIpOwogICAgICAgICAgICAgbXkgQGNvbnN0cnVjdG9ycyA9IEB7JGlu
dGVyZmFjZS0+Y29uc3RydWN0b3JzfTsKICAgICAgICAgICAgIGlmIChAY29uc3RydWN0b3JzID4g
MSkgewogICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0cnVjdG9yIChAY29uc3RydWN0
b3JzKSB7CkBAIC00MzY3LDEwICs0Mzk2LDYgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbgogICAgIH0KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9O1xuXG4iKTsKIAotICAg
IGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJF
dmVudCIpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgZmlsbCR7aW50ZXJm
YWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNlTmFtZX1Jbml0JiwgSlNEaWN0aW9uYXJ5Jik7XG5cbiIp
OwotICAgIH0KLQogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFt
ZWRDb25zdHJ1Y3RvciJ9KSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwog
Y2xhc3MgSlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudCB7CkBAIC00Njk0LDExICs0NzE5LDExIEBAIHN1YiBHZW5lcmF0
ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcwogICAgIH0gZWxzaWYgKCRnZW5lcmF0aW5nTmFtZWRD
b25zdHJ1Y3RvcikgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7Ci0gICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBOb25lKTtc
biIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfTo6Z2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpLCBOb25lKTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcbiIpOwot
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9OjpzZWxmKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgJHtj
bGFzc05hbWV9OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7XG4iKTsKICAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigke2xlYXN0Q29uc3Ry
dWN0b3JMZW5ndGh9KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xuIikgaWYg
ZGVmaW5lZCAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aDsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCAke2NsYXNzTmFtZX1Db25zdHJ1Y3RvclRh
YmxlVmFsdWVzLCAqdGhpcyk7XG4iKSBpZiBDb25zdHJ1Y3Rvckhhc1Byb3BlcnRpZXMoJGludGVy
ZmFjZSk7CkBAIC00NzUyLDQgKzQ3NzcsMTEgQEAgc3ViIElzQ29uc3RydWN0YWJsZQogICAgIHJl
dHVybiBIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07CiB9CiAKK3N1YiBIZWFkZXJOZWVkc1By
b3RvdHlwZURlY2xhcmF0aW9uCit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworCisgICAg
cmV0dXJuIElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGUifSB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9u
UHJvdG90eXBlIn07Cit9CisKIDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDEwICszNyw1OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0
aW5nRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdl
KEpTQzo6RXhlY1N0YXRlKik7CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RBY3Rp
dmVET01PYmplY3RQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEFjdGl2ZURPTU9i
amVjdENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6
CisgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURP
TU9iamVjdENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9
OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZUluZGV4WzRdID0gewpAQCAtODIsNyArMTMw
LDcgQEAgdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6ZgogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CiB9CiAKQEAgLTEwNSwxMSArMTUzLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdEFjdGl2ZQogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGVUYWJsZSA9IHsgMiwgMywgZmFsc2UsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJs
ZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
OjpzX2luZm8gPSB7ICJUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5m
bywgJkpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RBY3Rp
dmVET01PYmplY3Q+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKQEAgLTEyOSw2ICsxNzIsMTEgQEAgSlNPYmplY3QqIEpTVGVzdEFj
dGl2ZURPTU9iamVjdDo6Y3JlYXRlUAogICAgIHJldHVybiBKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
Pm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmpl
Y3Q6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RBY3RpdmVET01PYmplY3Q+KHZtLCBn
bG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZGVzdHJveShK
U0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihjZWxsKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0QWN0aXZlRE9N
T2JqZWN0X2gKICNkZWZpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0X2gKIAotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RBY3RpdmVET01PYmplY3QoKTsK
QEAgLTk2LDQ5ICs5NCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVy
V28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0QWN0aXZlRE9NT2JqZWN0Kik7CiBUZXN0QWN0aXZlRE9NT2JqZWN0KiB0b1Rlc3RBY3Rp
dmVET01PYmplY3QoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBK
U1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIHsKLSAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9u
RmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RBY3RpdmVE
T01PYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2
YXRlOgotICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1
Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAg
fQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
RnVuY3Rpb25zCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0
b21OYW1lZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlKik7CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0
b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAg
IHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307
CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaElu
ZGV4IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyVGFibGVJbmRleFsyXSA9IHsKQEAgLTc2LDcgKzEy
NCw3IEBAIHZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcjoKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwot
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlclByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKIH0KIApAQCAtOTYsMTEgKzE0NCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RDdXN0b20KIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgZmFsc2UsIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVUYWJsZSwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSkg
fTsKIAotSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpzZWxmKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0K
LQogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTEyMCw2ICsxNjMs
MTEgQEAgSlNPYmplY3QqIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdAogICAgIHJldHVy
biBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitK
U09iamVjdCogSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldFByb3RvdHlwZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RDdXN0b21OYW1lZEdldHRlcio+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcl9oCiAj
ZGVmaW5lIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3RDdXN0b21OYW1l
ZEdldHRlci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC0xMDAsNDkgKzk4LDYgQEAgaW5saW5lIHZvaWQq
IHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RDdXN0b21OYW1lZEdldHRlciopOwogVGVz
dEN1c3RvbU5hbWVkR2V0dGVyKiB0b1Rlc3RDdXN0b21OYW1lZEdldHRlcihKU0M6OkpTVmFsdWUp
OwogCi1jbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBK
U1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21O
YW1lZEdldHRlckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCkBAIC0zOCw2ICszOSw1
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CisKK2NsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9i
amVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgor
ICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKik7CisgICAg
c3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3Rv
ciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTEwMCw3ICsxNTEsNyBA
QCB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6CiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
OwogfQogCkBAIC0xMzUsMTEgKzE4Niw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RFdmVudEMKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
clByb3RvdHlwZVRhYmxlID0geyAzLCA3LCB0cnVlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJs
ZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUiLCAmQmFzZTo6c19p
bmZvLCAmSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0
KiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVz
dEV2ZW50Q29uc3RydWN0b3I+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNTksNiArMjA1LDExIEBAIEpTT2JqZWN0KiBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGUKICAgICByZXR1cm4gSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KGNl
bGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNzAx
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRl
ZiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yX2gKICNkZWZpbmUgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKICNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00Miw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTc0LDcgKzcy
LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yT3duZXIgOiBw
dWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTcsNTIgKzk0LDYgQEAgaW5saW5lIHZv
aWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudENvbnN0cnVjdG9yKik7CiBU
ZXN0RXZlbnRDb25zdHJ1Y3RvciogdG9UZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkpTVmFsdWUp
OwogCi1jbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAg
fQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3Ry
dWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1Rlc3RFdmVudENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6
Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1
Y3REYXRhJik7Ci19OwotCiBib29sIGZpbGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoVGVzdEV2
ZW50Q29uc3RydWN0b3JJbml0JiwgSlNEaWN0aW9uYXJ5Jik7CiAKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw5ICs0NCw1NyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQ
cm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1
bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25E
aXNwYXRjaEV2ZW50KEpTQzo6RXhlY1N0YXRlKik7CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKKworY2xhc3MgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdl
dFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsK
KworY2xhc3MgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpT
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2
ZW50VGFyZ2V0Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
K307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFz
aEluZGV4IEpTVGVzdEV2ZW50VGFyZ2V0VGFibGVJbmRleFsyXSA9IHsKQEAgLTg1LDcgKzEzMyw3
IEBAIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6ZmluaXMKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0RXZlbnRUYXJnZXQ6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApA
QCAtMTE0LDExICsxNjIsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZl
bnRUCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlVGFi
bGUgPSB7IDQsIDcsIGZhbHNlLCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlVmFsdWVz
LCAwLCBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNz
SW5mbyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
VGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUp
IH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6c2VsZihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3RFdmVudFRhcmdldD4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNU
ZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMzgsNiArMTgxLDExIEBAIEpTT2JqZWN0KiBK
U1Rlc3RFdmVudFRhcmdldDo6Y3JlYXRlUHJvdG8KICAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJn
ZXRQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudFRhcmdldFBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXZlbnRUYXJnZXQ+KHZtLCBnbG9iYWxPYmpl
Y3QpOworfQorCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBj
ZWxsKQogewogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNUZXN0RXZlbnRUYXJnZXQqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAK
ICNpZm5kZWYgSlNUZXN0RXZlbnRUYXJnZXRfaAogI2RlZmluZSBKU1Rlc3RFdmVudFRhcmdldF9o
CiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIK
ICNpbmNsdWRlICJUZXN0RXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFs
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0
ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtMTA0LDQ5ICsx
MDIsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV2ZW50
VGFyZ2V0Kik7CiBUZXN0RXZlbnRUYXJnZXQqIHRvVGVzdEV2ZW50VGFyZ2V0KEpTQzo6SlNWYWx1
ZSk7CiAKLWNsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudFRhcmdl
dFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RF
dmVudFRhcmdldFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDog
SlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNU
ZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Ci1wcml2YXRlOgotICAgIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQot
ICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIKIAorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJUZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiVVJMLmgiCkBAIC0zNSw2ICszNiw1
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXhj
ZXB0aW9uTmFtZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0RXhjZXB0
aW9uUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0
RXhjZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
REVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RFeGNl
cHRpb25Db25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKwor
cHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0
aWMgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVGVzdEV4Y2VwdGlvblRhYmxlSW5kZXhbMl0gPSB7CkBAIC03Myw3
ICsxMjEsNyBAQCB2b2lkIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
RXhjZXB0aW9uUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU1Rlc3RFeGNlcHRpb246OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0K
IApAQCAtOTMsMTEgKzE0MSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RF
eGNlcHQKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlVGFi
bGUgPSB7IDEsIDEsIHRydWUsIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFsdWVzLCAw
LCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0RXhjZXB0aW9uUHJvdG90
eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSkgfTsKIAotSlNPYmpl
Y3QqIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFeGNl
cHRpb24+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEV4Y2VwdGlvblByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKQEAgLTExNyw2ICsxNjAsMTEgQEAgSlNPYmplY3QqIEpTVGVzdEV4Y2VwdGlvbjo6Y3Jl
YXRlUHJvdG90eQogICAgIHJldHVybiBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmVycm9yUHJvdG90eXBlKCkpKTsKIH0K
IAorSlNPYmplY3QqIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
VGVzdEV4Y2VwdGlvbj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0RXhjZXB0
aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEV4Y2VwdGlvbiog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV4Y2VwdGlvbio+KGNlbGwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSwxMSArMjEsOSBAQAogI2lmbmRlZiBKU1Rlc3RFeGNlcHRpb25faAogI2RlZmluZSBKU1Rl
c3RFeGNlcHRpb25faAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQwLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNU
ZXN0RXhjZXB0aW9uKCk7CkBAIC05Niw0OSArOTUsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNv
bnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV4Y2VwdGlvbiopOwogVGVzdEV4Y2VwdGlvbiogdG9UZXN0
RXhjZXB0aW9uKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
bGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAg
IEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFeGNlcHRp
b25Qcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQot
Y2xhc3MgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KIApAQCAtMzEsNiArMzIsNTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQXR0cmlidXRl
cwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwg
c3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciA6
IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
KyAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qg
c3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVj
dG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU1LDcgKzEwMyw3IEBAIHZvaWQgSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZUNvbnN0cnVjdG8KIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBl
OjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTc1
LDExICsxMjMsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2VuZXJhCiBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVU
YWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZVRh
YmxlVmFsdWVzLCAwLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGVJbmRl
eCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgJkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKSB9OwogCi1K
U09iamVjdCogSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQog
dm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtOTksNiArMTQyLDEx
IEBAIEpTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpjcmUKICAgICByZXR1cm4g
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAK
K0pTT2JqZWN0KiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRQcm90b3R5cGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisK
IHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2Vs
bCkKIHsKICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlX2gKICNkZWZpbmUgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCiAK
LSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNp
bmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Y3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSgpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcw
LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlT3duZXIg
OiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5l
IHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Kik7CiBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogdG9UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZShK
U0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBl
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBK
U0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2Vs
ZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7
Ci0gICAgICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1
Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAg
IHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAg
ewotICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDE3MDE1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kNChKU0M6OkV4
ZWNTdGF0ZSopOwogI2VuZGlmCisKIC8vIEF0dHJpYnV0ZXMKIAogI2lmIEVOQUJMRShDb25kaXRp
b24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQpAQCAtMTIxLDYgKzEyMiw1OCBAQCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsCiB2b2lkIHNldEpTVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitj
bGFzcyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwor
ICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZVByb3RvdHlwZT4odm0u
aGVhcCkpIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRl
OgorICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEpTQzo6
RXhlY1N0YXRlKik7CisjaWYgRU5BQkxFKFRFU1RfSU5URVJGQUNFKQorICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOworI2VuZGlmIC8vIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKK307CisKIC8qIEhh
c2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVz
dEludGVyZmFjZVRhYmxlSW5kZXhbNF0gPSB7CkBAIC0yNjYsNyArMzE5LDcgQEAgdm9pZCBKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6
c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNlOjpn
ZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9
CkBAIC00MzgsMTEgKzQ5MSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RJ
bnRlcmYKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFi
bGUgPSB7IDE3LCA2MywgdHJ1ZSwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMs
IDAsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdElu
dGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwpAQCAtNDYyLDYgKzUxMCwxMSBAQCBKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlOjpj
cmVhdGVQcm90b3R5CiAgICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsK
IH0KIAorSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdEludGVyZmFjZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0SW50
ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEludGVyZmFj
ZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZSo+KGNlbGwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMSArMjMsOCBAQAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00Miw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwpAQCAtMTIzLDU0ICsxMjEsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3Jh
cHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdEludGVyZmFjZSopOwogVGVzdEludGVyZmFjZSogdG9UZXN0SW50ZXJmYWNlKEpT
Qzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlND
OjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJp
dmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5G
TzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShK
U0M6OkV4ZWNTdGF0ZSopOwotI2lmIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKLSAgICBzdGF0aWMg
SlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNv
bnN0cnVjdERhdGEmKTsKLSNlbmRpZiAvLyBFTkFCTEUoVEVTVF9JTlRFUkZBQ0UpCi19OwotCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw1NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZChKU0M6OkV4ZWNT
dGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3Mg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwor
Y2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNjIsNyArMTEwLDcgQEAgdm9pZCBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKIH0KIApAQCAtODUsMTEgKzEzMyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RNZWRpYVEKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByb3RvdHlwZVRhYmxlID0geyAyLCAzLCB0cnVlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMDksNiArMTUyLDExIEBAIEpTT2JqZWN0
KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjoKICAgICByZXR1cm4gSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2Jq
ZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisK
IHZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKIHsKICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KGNlbGwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCShyZXZpc2lvbiAxNzAx
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAog
I2lmbmRlZiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKICNkZWZpbmUgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlw
ZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpOwog
ICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERP
TVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKik7CiBUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciogdG9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OkpTVmFsdWUpOwog
Ci1jbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAg
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNz
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25z
dHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVi
bGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JX
aXRoRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKQEAgLTM0LDYg
KzM1LDc4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlw
ZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6
OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0
ZToKKyAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgeworcHVibGljOgorICAgIHR5cGVk
ZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKKworICAgIHN0YXRpYyBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY29u
c3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gY29uc3RydWN0b3I7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0
TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0
YSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVj
dG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU4LDcgKzEzMSw3IEBAIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjoKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpz
ZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTk2LDcgKzE2
OSw3IEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWMKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwogICAgIEFTU0VSVChpbmhlcml0cyhp
bmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
Tm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgTm9u
ZSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTEyMiwxMSAr
MTk1LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVkQwogc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGUgPSB7
IDEsIDEsIHRydWUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlcywg
MCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0
TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvclByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4o
dm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKQEAgLTE0Niw2ICsyMTQsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OmNyZWF0ZQogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJv
dG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldFBy
b3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKK30KKwogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlND
ZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDEyICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JfaAogI2RlZmluZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKIAotI2luY2x1ZGUgIkRP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKICAgICBERUNM
QVJFX0lORk87CkBAIC03NCw3ICs3MSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk3
LDc0ICs5Myw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
TmFtZWRDb25zdHJ1Y3RvciopOwogVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRvVGVzdE5hbWVkQ29u
c3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5
cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0g
ICAgewotICAgICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewot
cHJpdmF0ZToKLSAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewotcHVibGljOgotICAg
IHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKLQotICAgIHN0YXRpYyBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAg
ICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCop
OwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Kik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw1NiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0
Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dE5vZGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0Tm9kZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROb2RlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Tm9kZVByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Tm9kZVByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwor
Y2xhc3MgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0
IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvciogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROb2RlQ29uc3RydWN0b3I+
KHZtLmhlYXApKSBKU1Rlc3ROb2RlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5vZGUoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBz
dGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBK
U0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9y
ICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3ROb2RlQ29u
c3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNjUsNyArMTE1LDcgQEAgdm9pZCBKU1Rlc3RO
b2RlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNlbGYodm0s
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5vZGU6OmdldFByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtOTEsMTEgKzE0MSw2IEBAIHN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHIKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNU
ZXN0Tm9kZVByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3ROb2RlUHJvdG90eXBl
VGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0Tm9kZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGVQcm90b3R5
cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RO
b2RlUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
LXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmpl
Y3QpOwotfQotCiB2b2lkIEpTVGVzdE5vZGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMTEsNyArMTU2LDEyIEBA
IEpTVGVzdE5vZGU6OkpTVGVzdE5vZGUoU3RydWN0dXJlKiBzdHJ1Y3QKIAogSlNPYmplY3QqIEpT
VGVzdE5vZGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgSlNOb2RlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpKSk7CisgICAg
cmV0dXJuIEpTVGVzdE5vZGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rl
c3ROb2RlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNOb2Rl
OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVz
dE5vZGU6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5vZGUuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTAgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0Tm9kZV9oCiAjZGVmaW5lIEpTVGVzdE5vZGVfaAog
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVk
ZSAiVGVzdE5vZGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzksNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjYs
NTIgKzY1LDYgQEAgcHJvdGVjdGVkOgogfTsKIAogCi1jbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBl
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBK
U0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2Vs
ZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb2Rl
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dE5vZGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0Tm9kZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE5vZGVDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE5v
ZGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVi
bGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMg
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAg
ICAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9kZUNvbnN0
cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAg
ICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0g
ICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rl
c3ROb2RlKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19Owot
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRl
cm1pbmlzdGljLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1Byb3RvdHlwZUZ1bmN0aW9uTm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbihKU0M6OkV4
ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwpAQCAtNTUsNiArNTYsNTMgQEAgdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9pZCBzZXRK
U1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWlu
aXN0aWNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5vbmRldGVy
bWluaXN0aWNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQ
cm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
K307CisKK2NsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE5vbmRldGVybWluaXN0
aWNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVi
bGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgeworICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0Nv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNoIHRhYmxlIGZv
ciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXgg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTc5
LDcgKzEyNyw3IEBAIHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjoKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUg
fCBEb250RW51bSk7CiB9CiAKQEAgLTEyMCwxMSArMTY4LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdE5vbmRldAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGUgPSB7IDcsIDE1LCB0cnVlLCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5vbmRldGVybWluaXN0aWNQ
cm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZVRhYmxlLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUpIH07
CiAKLUpTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpzZWxmKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE5vbmRldGVybWluaXN0aWM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2
b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNDQsNiArMTg3LDExIEBA
IEpTT2JqZWN0KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpjcmVhdGUKICAgICByZXR1cm4gSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpT
VGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0
KiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYz4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYzo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEs
OCBAQAogI2lmbmRlZiBKU1Rlc3ROb25kZXRlcm1pbmlzdGljX2gKICNkZWZpbmUgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY19oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oIgotI2luY2x1
ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKICAgICB+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYygpOwogICAgIERFQ0xBUkVfSU5GTzsK
QEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNDkgKzkyLDYg
QEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROb25kZXRlcm1p
bmlzdGljKik7CiBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdG9UZXN0Tm9uZGV0ZXJtaW5pc3RpYyhK
U0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
ICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZT4odm0uaGVh
cCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVy
biBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9i
amVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE5vbmRldGVybWluaXN0
aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDcgQEAgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2Qo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSop
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQW55KEpTQzo6RXhlY1N0YXRlKik7CisKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAg
LTI5MCw2ICsyOTEsNTYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUo
SgogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CiB2b2lkIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE9ialByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE9ialByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RPYmpQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2Jq
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdE9i
akNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6Cisg
ICAgSlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Cisg
ICAgc3RhdGljIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgeworICAgICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE9i
akNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Citwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKU1Rlc3RPYmooSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
K307CisKIC8qIEhhc2ggdGFibGUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFz
aEluZGV4IEpTVGVzdE9ialRhYmxlSW5kZXhbMTddID0gewpAQCAtNDU1LDcgKzUwNiw3IEBAIHZv
aWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW8KIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPYmpQcm90b3R5cGU6
OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE9iajo6Z2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2
bSwgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtMTE3NCwx
MSArMTIyNSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KIHN0
YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNywgNTEx
LCB0cnVlLCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RPYmpQ
cm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpQcm90b3R5cGUp
IH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNU
ZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RPYmpQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CkBAIC0xMTk4LDYgKzEyNDQsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE9iajo6Y3JlYXRlUHJvdG90
eXBlKFZNJgogICAgIHJldHVybiBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBK
U1Rlc3RPYmo6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPYmo+KHZtLCBnbG9iYWxP
YmplY3QpOworfQorCiB2b2lkIEpTVGVzdE9iajo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
IHsKICAgICBKU1Rlc3RPYmoqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0T2JqX2gKICNkZWZpbmUgSlNUZXN0T2JqX2gKIAot
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2lu
Y2x1ZGUgIlRlc3RPYmouaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RPYmooKTsKQEAgLTEwOSw1MiAr
MTA3LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmoq
KTsKIFRlc3RPYmoqIHRvVGVzdE9iaihKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RPYmpQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
VGVzdE9ialByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAg
ICBKU1Rlc3RPYmpQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0T2JqUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T2JqUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE9iakNvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0
T2JqQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1
YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTVGVzdE9iakNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAg
ICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE9iakNvbnN0cnVj
dG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBE
RUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAg
c3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RP
YmooSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENv
bnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDYwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQorICAgIHsKKyAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJv
dGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhKU0M6OkV4ZWNTdGF0ZSopOworICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMyKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
MyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoSlNDOjpFeGVj
U3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKIC8qIEhhc2ggdGFibGUg
Zm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0g
ewpAQCAtMTI0LDcgKzE3OCw3IEBAIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpn
ZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTE1MCwxMSArMjA0LDYg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJsbwogc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFibGUgPSB7
IDEsIDEsIHRydWUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZVZh
bHVlcywgMCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlSW5kZXgg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBl
OjpzX2luZm8gPSB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSIsICZCYXNl
OjpzX2luZm8sICZKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFibGUsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSkgfTsKIAotSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6
OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4odm0sIGdsb2Jh
bE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKQEAgLTE3NCw2ICsyMjMsMTEgQEAgSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM6OgogICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNfaAogI2RlZmluZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKIAot
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2lu
Y2x1ZGUgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9K
U0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzIs
NyArNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05NSw1NiArOTIsNiBA
QCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMqKTsKIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiB0b1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6
Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3I+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Ioc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMxKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihKU0M6OkV4
ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNDOjpFeGVjU3RhdGUqKTsK
LSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGlj
IEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpD
b25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTQ2LDYgKzQ3LDUzIEBAIHZvaWQgc2V0
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
YWNoZWRSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1
Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNv
bnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTcwLDcgKzExOCw3IEBAIHZv
aWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWMKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0UHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMTAsMTEgKzE1OCw2IEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWwKIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7
IDYsIDE1LCB0cnVlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUpIH07CiAK
LUpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6
OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPih2
bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMzQsNiArMTc3LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnQKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQog
CitKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRQcm90
b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPih2
bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCShyZXZpc2lv
biAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDExICsyMyw4IEBACiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKICNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQyLDYgKzM5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOwogICAgIH5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKICAg
ICBERUNMQVJFX0lORk87CkBAIC0xMDEsNDkgKzk5LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJD
b250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsK
IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRvVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZShKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwot
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xB
UkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3Ry
dWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6
Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVm
IERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1Niw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbjIoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoSlNDOjpFeGVjU3RhdGUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRy
aWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdM
b25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC03Miw2ICs3Myw1NiBAQCB2b2lkIHNldEpTVGVz
dFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogdm9p
ZCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RUeXBlZGVmc1By
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwor
Y2xhc3MgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9i
amVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3Io
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xB
UkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdFR5cGVk
ZWZzKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAv
KiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3RUeXBlZGVmc1RhYmxlSW5kZXhbMl0gPSB7CkBAIC0xMjUsNyArMTc2LDcgQEAgdm9pZCBK
U1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpmaW5pc2hDcgogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBl
OjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmczo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigyKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVy
dGllcyh2bSwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9
CkBAIC0yMzIsMTEgKzI4Myw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RU
eXBlZGUKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGVUYWJs
ZSA9IHsgMTcsIDYzLCB0cnVlLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlVmFsdWVzLCAw
LCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFR5cGVkZWZzUHJvdG90eXBl
IiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFR5cGVkZWZzUHJvdG90eXBlVGFibGUsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RUeXBlZGVmcz4o
dm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBA
IC0yNTYsNiArMzAyLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RUeXBlZGVmczo6Y3JlYXRlUHJvdG90
eXAKICAgICByZXR1cm4gSlNUZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmpl
Y3QqIEpTVGVzdFR5cGVkZWZzOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0VHlwZWRl
ZnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5o
CShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAK
ICNpZm5kZWYgSlNUZXN0VHlwZWRlZnNfaAogI2RlZmluZSBKU1Rlc3RUeXBlZGVmc19oCiAKLSNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNs
dWRlICJUZXN0VHlwZWRlZnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5KU1Rlc3RUeXBlZGVmcygpOwpAQCAt
OTYsNTIgKzk0LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwog
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RUeXBlZGVmcyopOwogVGVzdFR5cGVkZWZzKiB0b1Rlc3RUeXBlZGVmcyhKU0M6OkpTVmFsdWUp
OwogCi1jbGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwot
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0
YXRpYyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I+KHZtLmhlYXAp
KSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0
dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
LSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0
YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpT
Qzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTYXR0cmlidXRlLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTYXR0cmlidXRl
LmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiYXR0cmlidXRlLmgiCkBA
IC0zNSw2ICszNiw1MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNhdHRyaWJ1dGVSZWFkb25seShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU2F0
dHJpYnV0ZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpT
YXR0cmlidXRlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTYXR0cmlidXRlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTYXR0cmlidXRl
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworCitjbGFzcyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNhdHRyaWJ1dGVDb25z
dHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0
ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3Ry
dWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTYXR0cmli
dXRlQ29uc3RydWN0b3JUYWJsZUluZGV4WzFdID0gewpAQCAtNTksNyArMTA3LDcgQEAgdm9pZCBK
U2F0dHJpYnV0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdAogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTYXR0cmlidXRlUHJvdG90eXBlOjpz
ZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU2F0dHJpYnV0ZTo6Z2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC04MiwxMSArMTMwLDYgQEAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTYXR0cmlidXRlUAogc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlID0geyAyLCAzLCB0cnVlLCBKU2F0dHJpYnV0
ZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlSW5kZXgg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c19pbmZvID0geyAiYXR0
cmlidXRlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTYXR0cmlidXRlUHJvdG90eXBlVGFi
bGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNhdHRyaWJ1dGVQcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU2F0dHJpYnV0
ZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBA
IC0xMDYsNiArMTQ5LDExIEBAIEpTT2JqZWN0KiBKU2F0dHJpYnV0ZTo6Y3JlYXRlUHJvdG90eXBl
KFYKICAgICByZXR1cm4gSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+ZXJyb3JQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNh
dHRyaWJ1dGU6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU2F0dHJpYnV0ZT4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKIHZvaWQgSlNhdHRyaWJ1dGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiB7CiAgICAgSlNhdHRyaWJ1dGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU2F0dHJp
YnV0ZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTYXR0cmlidXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSwxMSArMjEsOSBAQAogI2lmbmRlZiBKU2F0dHJpYnV0ZV9oCiAjZGVmaW5l
IEpTYXR0cmlidXRlX2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgImF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQwLDYgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIH5K
U2F0dHJpYnV0ZSgpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcxLDYgQEAgcHJvdGVj
dGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CiB9OwogCiBjbGFzcyBKU2F0dHJpYnV0ZU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKQEAgLTk1LDQ5ICs5Myw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01X
cmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBhdHRyaWJ1dGUqKTsKIGF0dHJpYnV0ZSogdG9hdHRyaWJ1dGUoSlNDOjpKU1ZhbHVl
KTsKIAotY2xhc3MgSlNhdHRyaWJ1dGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTYXR0cmlidXRlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTYXR0cmlidXRlUHJvdG90eXBlKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTYXR0cmlidXRlUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNhdHRyaWJ1dGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTYXR0cmli
dXRlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkg
eyB9Ci19OwotCi1jbGFzcyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNhdHRyaWJ1dGVD
b25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJp
YnV0ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3Jl
YWRvbmx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNyZWFkb25seS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTcmVh
ZG9ubHkuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgInJlYWRvbmx5
LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBAIC0zMSw2ICszMiw1MyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNyZWFk
b25seUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNyZWFkb25seVByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTcmVhZG9ubHlQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNyZWFkb25s
eVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRv
bmx5UHJvdG90eXBlPih2bS5oZWFwKSkgSlNyZWFkb25seVByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNyZWFkb25seVByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNy
ZWFkb25seUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZh
dGU6CisgICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU3JlYWRvbmx5Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKKyAgICB7CisgICAgICAgIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5Q29uc3RydWN0b3I+KHZtLmhlYXAp
KSBKU3JlYWRvbmx5Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU3JlYWRvbmx5Q29uc3RydWN0b3JUYWJsZUluZGV4
WzFdID0gewpAQCAtNTUsNyArMTAzLDcgQEAgdm9pZCBKU3JlYWRvbmx5Q29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTcmVhZG9ubHlQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTcmVhZG9ubHk6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKIH0KIApAQCAtNzUsMTEgKzEyMyw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U3JlYWRvbmx5UHIKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNyZWFkb25seVByb3RvdHlwZVRh
YmxlID0geyAxLCAxLCB0cnVlLCBKU3JlYWRvbmx5UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpT
cmVhZG9ubHlQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNyZWFkb25s
eVByb3RvdHlwZTo6c19pbmZvID0geyAicmVhZG9ubHlQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZv
LCAmSlNyZWFkb25seVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTcmVh
ZG9ubHlQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU3JlYWRvbmx5UHJvdG90eXBlOjpzZWxm
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTcmVhZG9ubHk+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpT
cmVhZG9ubHlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CkBAIC05OSw2ICsxNDIsMTEgQEAgSlNPYmplY3QqIEpTcmVhZG9u
bHk6OmNyZWF0ZVByb3RvdHlwZShWTQogICAgIHJldHVybiBKU3JlYWRvbmx5UHJvdG90eXBlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNyZWFkb25seVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsK
IH0KIAorSlNPYmplY3QqIEpTcmVhZG9ubHk6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU3Jl
YWRvbmx5Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU3JlYWRvbmx5OjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTcmVhZG9ubHkqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU3JlYWRvbmx5Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgJKHJldmlzaW9uIDE3MDE1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTcmVhZG9ubHlf
aAogI2RlZmluZSBKU3JlYWRvbmx5X2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlci5oIgogI2luY2x1ZGUgInJlYWRvbmx5LmgiCi0jaW5jbHVkZSA8
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4K
LSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCop
OwogICAgIH5KU3JlYWRvbmx5KCk7CiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzIsNyArNzAsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKIH07CiAKIGNsYXNzIEpTcmVhZG9ubHlPd25lciA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CkBAIC05NSw0OSArOTIsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRl
eHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgcmVhZG9ubHkqKTsKIHJlYWRvbmx5KiB0b3JlYWRvbmx5KEpTQzo6SlNW
YWx1ZSk7CiAKLWNsYXNzIEpTcmVhZG9ubHlQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTcmVhZG9ubHlQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNyZWFkb25seVByb3RvdHlwZSogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5UHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNyZWFkb25seVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwot
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNyZWFkb25s
eVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsg
fQotfTsKLQotY2xhc3MgSlNyZWFkb25seUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU3JlYWRvbmx5Q29uc3RydWN0b3Iq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTcmVhZG9ubHlDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5Q29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU3JlYWRvbmx5Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233391</attachid>
            <date>2014-06-19 16:21:24 -0700</date>
            <delta_ts>2014-06-19 16:40:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134054-20140619162102.patch</filename>
            <type>text/plain</type>
            <size>189227</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxNC0wNi0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZ2VuZXJhdGUgcHJvdG90eXBl
IGFuZCBjb25zdHJ1Y3RvciBjbGFzc2VzIGludG8gdGhlIGdlbmVyYXRlZCBpbXBsZW1lbnRhdGlv
biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gYW4gZWZmb3J0IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdz
IGhlYWRlcnMsIHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICBhcyB0aGUgZ2VuZXJhdGVkIGhl
YWRlcnMgZ2V0IGluY2x1ZGVkIGluIGEgbG90IG9mIHBsYWNlcywgdGhpcyBwYXRjaCBtb3ZlcyB0
aGUgcHJvdG90eXBlCisgICAgICAgIGFuZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbnMgZnJvbSB0
aGUgaGVhZGVyIHRvIGltcGxlbWVudGF0aW9uIGZpbGUuIFRoaXMgd29ya3MgYmVjYXVzZSwKKyAg
ICAgICAgZm9yIHRoZSBtb3N0IHBhcnQsIG5vIGNvZGUgY2FyZXMgYWJvdXQgdGhlIHByb3RvdHlw
ZSBvciBjb25zdHJ1Y3RvcnMgZXhjZXB0IHRoZSBpbnN0YW5jZS4KKworICAgICAgICBUaGVyZSBh
cmUgYSBmZXcgZXhjZXB0aW9ucyB3aGljaCBoYWQgdG8gYmUgYWNjb3VudGVkIGZvcjoKKyAgICAg
ICAgLSBUaGUgZ2xvYmFsIG9iamVjdHMgKEpTRE9NV2luZG93IGFuZCBKU1dvcmtlckdsb2JhbFNj
b3BlKSBuZWVkIHRvIGhhdmUgdGhlaXIgcHJvdG90eXBlcworICAgICAgICAgIGF2YWlsYWJsZSBk
dXJpbmcgaW5pdGlhbGl6YXRpb24sIHNvIHRoZXkgcmVtYWluIGluIHRoZSBoZWFkZXIuCisgICAg
ICAgIC0gSlNMb2NhdGlvbiByZXF1aXJlcyBjdXN0b21pemluZyBzb21lIGFzcGVjdHMgb2YgdGhl
IHByb3RvdHlwZSBiZWhhdmlvciwgc28gaXRzIHByb3RvdHlwZSwKKyAgICAgICAgICBhbmQgYW55
IGZ1dHVyZSBjbGFzcyB0aGF0IHVzZXMgSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIG9y
IEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKKyAgICAgICAgICByZW1haW5z
IGluIHRoZSBoZWFkZXIuCisgICAgICAgIC0gQSBmZXcgY2xhc3NlcyBoYWQgY3VzdG9tIGNvbnN0
cnVjdG9yIGZ1bmN0aW9ucy4gSW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBlbnRpcmUgY29uc3RydWN0
b3IKKyAgICAgICAgICBpbiB0aGUgaGVhZGVyLCBJIG9wdGVkIGZvciBwdWxsaW5nIGp1c3QgdGhl
IHN0YXRpYyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnRvIHRoZSBoZWFkZXIsIGFuZAorICAgICAg
ICAgIG1vZGlmeWluZyB0aGUgY3VzdG9tIGNvbnN0cnVjdG9ycyB0byB1c2UgdGhlIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHR5cGUgYXMgdGhlIGNhbGxlZSwgc2luY2UgdGhlCisgICAgICAgICAgbW9y
ZSBzcGVjaWZpYyB0eXBlIHdhcyB1bm5lY2Vzc2FyeS4KKworICAgICAgICBBcyBhIHJlc3VsdCBv
ZiBtYWtpbmcgdGhlc2UgY2hhbmdlcywgSSB3YXMgYWxzbyBhYmxlIHRvIHJlbW92ZSB0aGUgI2lu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nLmggZnJvbQorICAgICAgICBhbGwgdGhlIGhlYWRlcnMsIHdo
aWNoIGJyb3VnaHQgaW4gcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0F1ZGlv
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU0F1ZGlvQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTQmxvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9iKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0RPTUZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRm9ybURh
dGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVBsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RhdGFDdWVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhQ3Vl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U011dGF0aW9uT2JzZXJ2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJl
ZFdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXZWJLaXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViS2l0UG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZVByb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNs
YXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6Cisg
ICAgICAgIChIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0Lmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKKwogMjAxNC0wNi0xOSAg
cGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbQ3VybF0g
Q29tcGlsZSBlcnJvcnMgcmVsYXRlZCB0byBodHRwIGhlYWRlciBmaWVsZCBuYW1lcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyU291cmNlTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9k
ZS5oIgogI2luY2x1ZGUgIkpTQXVkaW9CdWZmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTQXVk
aW9CdWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+
CkBAIC00Miw5ICs0Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0F1ZGlvQ29udGV4dENvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0F1ZGlvQ29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTQXVkaW9Db250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0F1ZGlvQ29udGV4dENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0g
anNDYXN0PEpTQXVkaW9Db250ZXh0Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0
b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMs
ICJBdWRpb0NvbnRleHQgY29uc3RydWN0b3IgY2FsbGVlIGlzIHVuYXZhaWxhYmxlIikpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmls
dGVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplCiAgICAgcmV0dXJuIHdyYXA8SlNCbG9iPihnbG9iYWxPYmplY3Qs
IGJsb2IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQmxvYkNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0Jsb2IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQmxv
YkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQmxvYkNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJCbG9iIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNVQlRM
RV9DUllQVE8pCiAKICNpbmNsdWRlICJKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5UGFpckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9L
ZXlQYWlyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9LZXlQYWlyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5UGFp
ci5oIgogCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKwogI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudCogdG9IVE1MRm9ybUVsZW1lbgogICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhKU0hU
TUxGb3JtRWxlbWVudDo6aW5mbygpKSA/ICZqc0Nhc3Q8SlNIVE1MRm9ybUVsZW1lbnQqPihhc09i
amVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNET01Gb3JtRGF0YShFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTRE9N
Rm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTRE9NRm9ybURhdGFDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RPTUZvcm1EYXRhQ29uc3RydWN0b3IqPihleGVj
LT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBq
c0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAKICAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0gPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaW1lVHlwZUFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1p
bWVUeXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTU1pbWVUeXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNET01NaW1lVHlwZUFycmF5LmgiCiAKICNp
bmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01NaW1lVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVBsdWdpbkFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01QbHVnaW5BcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJKU0RPTVBsdWdpbkFycmF5LmgiCiAKICNpbmNs
dWRlICJET01QbHVnaW5BcnJheS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NUGx1Z2luLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGx1Z2luQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBsdWdpbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUGx1Z2luQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NUGx1Z2luLmgiCiAKLSNpbmNsdWRlICJE
T01QbHVnaW4uaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTU1p
bWVUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgogCisjaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RhdGFDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKICNpbmNsdWRlICJKU0RhdGFDdWUuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
NCw5ICs0Nyw5IEBAIHZvaWQgSlNEYXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMKIH0K
ICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YUN1ZUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0RhdGFDdWUoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTRGF0YUN1ZUNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTRGF0YUN1ZUNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBjYXN0
ZWRUaGlzID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKIAotI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJFdmVudEhlYWRlcnMuaCIKICNpbmNsdWRlICJFdmVudEludGVyZmFjZXMu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNEYXRhVHJhbnNmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIuaCIKIAogI2lu
Y2x1ZGUgIkZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
IDxydW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVy
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgIkpTSGlzdG9yeS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIaXN0
b3J5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9u
IDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklEQkZhY3Rvcnku
aCIKICNpbmNsdWRlICJJREJJbmRleC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKICNpbmNsdWRlICJKU0lEQkN1cnNvcldpdGhWYWx1ZS5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAj
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0lEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCShyZXZpc2lvbiAx
NzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklEQkJp
bmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0lE
QkluZGV4LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bWFnZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCB2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUsIEpTSFRNTEltYWdlRWxlbWVudFByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
Tm9uZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
SFRNTEltYWdlRWxlbWVudDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2Uo
RXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFn
ZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKIAogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9z
dC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCiAKLSNpbmNsdWRlICJMb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VT
dGF0ZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNs
dWRlICJKU01lZGlhU291cmNlU3RhdGVzLmgiCiAKLSNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRl
cy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFtQ2FwYWJpbGl0
aWVzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbUNhcGFiaWxpdGllc0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkpTQWxs
QXVkaW9DYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KENIQU5ORUxfTUVTU0FHSU5HKQogCiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbC5oIgorI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAs
MTUgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRl
ICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0
b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU011dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNNdXRhdGlvbk9ic2VydmVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CkBAIC01Myw3ICs1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNNdXRhdGlv
bk8KICAgICBpZiAoIW9iamVjdCB8fCBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KG9iamVjdCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkNhbGxiYWNrIGFyZ3VtZW50IG11
c3QgYmUgYSBmdW5jdGlvbiIpKTsKIAotICAgIEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFJl
ZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gSlNNdXRhdGlvbkNhbGxiYWNrOjpj
cmVhdGUob2JqZWN0LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgSlNPYmpl
Y3QqIGpzT2JzZXJ2ZXIgPSBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBNdXRhdGlvbk9ic2VydmVyOjpjcmVhdGUoY2FsbGJhY2sucmVsZWFzZSgpKSkp
OwogICAgIFByaXZhdGVOYW1lIHByb3BlcnR5TmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIkpTTm9kZUl0
ZXJhdG9yLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRv
cklubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPc2NpbGxhdG9y
Tm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiT3NjaWxsYXRvck5vZGUuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiUGFubmVyTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTAgKzI5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUG9w
U3RhdGVFdmVudC5oIgogCi0jaW5jbHVkZSAiSGlzdG9yeS5oIgogI2luY2x1ZGUgIkpTSGlzdG9y
eS5oIgotI2luY2x1ZGUgIkpTUG9wU3RhdGVFdmVudC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENJY2VDYW5kaWRhdGVDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRDSWNlQ2FuZGlkYXRlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
VENJY2VDYW5kaWRhdGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTMg
QEAKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1JUQ0lj
ZUNhbmRpZGF0ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1JUQ0ljZUNhbmRpZGF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUlRDSWNl
Q2FuZGlkYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBEaWN0aW9uYXJ5IHNlc3Npb25Jbml0OwpAQCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDSWNlQ2FuCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIEpTUlRDSWNlQ2FuZGlkYXRl
Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNSVENJY2VDYW5kaWRhdGVDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganND
b25zdHJ1Y3RvciA9IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgp
KTsKICAgICBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGUgPSBSVENJY2VDYW5k
aWRhdGU6OmNyZWF0ZShzZXNzaW9uSW5pdCwgZWMpOwogICAgIGlmIChlYyA9PSBUWVBFX01JU01B
VENIX0VSUikgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENQZWVyQ29ubmVjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUlRDUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MiArMzAsMTMgQEAKICNpbmNsdWRlICJKU1JUQ1BlZXJDb25uZWN0aW9uLmgiCiAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1JUQ1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUlRD
UGVlckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1JUQ1BlZXJDb25uZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICAvLyBTcGVjIHNheXMgdGhhdCB3ZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFydW1lbnQsIHRo
ZSBSVENDb25maWd1cmF0aW9uLgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQpA
QCAtNDksNyArNTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUlRDUGVlckNv
CiAgICAgaWYgKCFydGNDb25maWd1cmF0aW9uLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSVENQZWVyQ29ubmVjdGlv
biBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeSIpKTsKIAotICAgIEpTUlRDUGVl
ckNvbm5lY3Rpb25Db25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ1BlZXJD
b25uZWN0aW9uQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0
b3JPYmplY3QqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlJUQ1BlZXJDb25uZWN0aW9uIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENTZXNzaW9u
RGVzY3JpcHRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEyICszMSwxMyBAQAogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSVENTZXNzaW9uRGVzY3JpcHRpb24oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkg
c2Vzc2lvbkluaXQ7CkBAIC00OSw3ICs1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNSVENTZXNzaW8KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNSVENTZXNzaW9uRGVzY3JpcHRpb25Db25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkNvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KiBqc0NvbnN0
cnVjdG9yID0ganNDYXN0PERPTUNvbnN0cnVjdG9yT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIFJlZlB0cjxSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbiA9IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKHNlc3Npb25Jbml0LCBlYyk7CiAgICAgaWYgKGVj
ID09IFRZUEVfTUlTTUFUQ0hfRVJSKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JUQ1N0YXRzUmVzcG9uc2VD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUlRD
U3RhdHNSZXNwb25zZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUg
IkpTUlRDU3RhdHNSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJv
d0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJKU1NRTFJlc3VsdFNl
dFJvd0xpc3QuaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgotI2luY2x1ZGUgIlNRTFJlc3VsdFNl
dFJvd0xpc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkg
QEAKICNpbmNsdWRlICJKU1NRTFRyYW5zYWN0aW9uU3luYy5oIgogCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTU1FMUmVz
dWx0U2V0LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25TeW5jLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAog
I2luY2x1ZGUgIkpTU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5o
IgogI2luY2x1ZGUgIlNWR0V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdv
cmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSAr
NTAsOSBAQCB2b2lkIEpTU2hhcmVkV29ya2VyOjp2aXNpdEFkZGl0aW9uYWxDaGlsCiAgICAgICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1NoYXJlZFdvcmtl
cihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTU2hhcmVkV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1NoYXJlZFdvcmtlckNv
bnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTU2hhcmVkV29ya2VyQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QqIGpzQ29uc3Ry
dWN0b3IgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7CiAK
ICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKIAotI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUb3VjaEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUb3VjaEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVG91Y2hDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJKU1RvdWNoLmgiCiAKLSNpbmNsdWRlICJUb3VjaC5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RvdWNoTGlzdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUb3VjaExpc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RvdWNoTGlz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkpTVG91Y2hMaXN0LmgiCiAKLSNpbmNsdWRlICJUb3VjaExpc3QuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAx
NzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiSlNUcmVlV2Fs
a2VyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVy
c05hbWVzcGFjZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU1VzZXJN
ZXNzYWdlSGFuZGxlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTUgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU1dlYktpdFBvaW50LmgiCiAKLSNpbmNsdWRlICJXZWJLaXRQ
b2ludC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNXZWJLaXRQb2ludENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYktpdFBvaW50KEV4ZWNTdGF0
ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJLaXRQ
b2ludChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yKiBq
c0NvbnN0cnVjdG9yID0ganNDYXN0PEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNh
bGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9IGpzQ2Fz
dDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGZsb2F0IHgg
PSAwOwogICAgIGZsb2F0IHkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MCArMjksMTEgQEAKICNpbmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdl
UG9ydEN1c3RvbS5oIgogI2luY2x1ZGUgIldvcmtlci5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93
Q3VzdG9tLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwpAQCAtNDQsOSArNDUsOSBAQCBKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdl
KEpTQzo6CiAgICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV29ya2VyQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTV29ya2VyQ29u
c3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNXb3JrZXJDb25zdHJ1Y3Rvcio+KGV4
ZWMtPmNhbGxlZSgpKTsKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdCoganNDb25zdHJ1Y3RvciA9
IGpzQ2FzdDxET01Db25zdHJ1Y3Rvck9iamVjdCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5j
cHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJKU1dv
cmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NaWNy
b3Rhc2suaD4KIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2
aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5
LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTgwMywxMiArODAzLDkgQEAg
c3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKCRoYXNQYXJlbnQpIHsKICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyIkcGFyZW50Q2xhc3NOYW1lLmgifSA9IDE7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyI8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPiJ9ID0gMTsKKyAgICAgICAgJGhl
YWRlckluY2x1ZGVzeyJKU0RPTVdyYXBwZXIuaCJ9ID0gMTsKICAgICAgICAgaWYgKCRpbnRlcmZh
Y2UtPmlzRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1l
L0Vycm9yUHJvdG90eXBlLmg+In0gPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4ifSA9IDE7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTgyMCw3ICs4MTcsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAg
ICAKLSAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwogICAg
ICRoZWFkZXJJbmNsdWRlc3siU1ZHRWxlbWVudC5oIn0gPSAxIGlmICRjbGFzc05hbWUgPX4gL15K
U1NWRy87CiAKICAgICBteSAkaW1wbFR5cGUgPSAkaW50ZXJmYWNlTmFtZTsKQEAgLTg5NSw3ICs4
OTEsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgIyBQcm90b3R5cGUKLSAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQ
cm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIHVubGVzcyBJc0RP
TUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKTsKKyAgICB1bmxlc3MgKElzRE9NR2xvYmFsT2JqZWN0
KCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
O1xuIik7CisgICAgfQogCiAgICAgJGhlYWRlclRyYWlsaW5nSW5jbHVkZXN7IiR7Y2xhc3NOYW1l
fUN1c3RvbS5oIn0gPSAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1
c3RvbUhlYWRlciJ9OwogCkBAIC0xMTE0LDYgKzExMTMsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7CisKICAg
ICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwg
SlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4sIEpTRE9NV2luZG93U2hlbGwq
KTtcbiIpOwpAQCAtMTEyNiwxNSArMTEyNiwxNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
O1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1c
blxuIik7Ci0KICAgICB9CiAKICAgICAjIHN0cnVjdHVyZSBmbGFncwotICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gIik7
Ci0gICAgZm9yZWFjaCBteSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0dXJlRmxh
Z3MpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICRzdHJ1Y3R1cmVGbGFnIC4gIiB8
ICIpOworICAgIGlmICglc3RydWN0dXJlRmxhZ3MpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAiKTsKKyAg
ICAgICAgZm9yZWFjaCBteSAkc3RydWN0dXJlRmxhZyAoc29ydCAoa2V5cyAlc3RydWN0dXJlRmxh
Z3MpKSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkc3RydWN0dXJlRmxhZyAu
ICIgfCAiKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiQmFzZTo6
U3RydWN0dXJlRmxhZ3M7XG4iKTsKICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkJh
c2U6OlN0cnVjdHVyZUZsYWdzO1xuIik7CiAKICAgICAjIEluZGV4IHNldHRlcgogICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7
CkBAIC0xMTk2LDE0ICsxMTk3LDggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlxuIik7CiAKICAgICAjIEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24uCi0g
ICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05h
bWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKLQotICAgIGlmICghJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vSW50ZXJmYWNlT2JqZWN0In0pIHsKLSAgICAgICAgJGhl
YWRlckluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAg
ICAgICRoZWFkZXJJbmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9ID0gMTsK
LSAgICAgICAgfQotICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBoZWFk
ZXJDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAg
aWYgKEhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSkpIHsKKyAgICAg
ICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGhlYWRlckNvbnRlbnQsICRjbGFzc05h
bWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKICAgICBpZiAoJGhhc0Zv
cndhcmREZWNsYXJpbmdGdW5jdGlvbnMpIHsKQEAgLTEyNTEsNiArMTI0NiwxNSBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChIYXNDdXN0b21Db25zdHJ1
Y3RvcigkaW50ZXJmYWNlKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLy8gQ3Vz
dG9tIGNvbnN0cnVjdG9yXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpF
eGVjU3RhdGUqKTtcblxuIik7CisgICAgfQorCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Nv
bnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNl
TmFtZX1Jbml0JiwgSlNEaWN0aW9uYXJ5Jik7XG5cbiIpOworICAgIH0KKwogICAgIG15ICRjb25k
aXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5n
KCRpbnRlcmZhY2UpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVcblxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkBAIC0xNjkyLDYg
KzE2OTYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICMgLSBBZGQgZGVmYXVs
dCBoZWFkZXIgdGVtcGxhdGUKICAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFkZXIoJGludGVyZmFjZSkpOwogCisgICAgJGltcGxJbmNs
dWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9HZXRQ
dHIuaD4ifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJy
YXkuaD4ifSA9IDEgaWYgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbjsKIApAQCAtMTczMiwxMCArMTcz
NywxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9CiAKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICRlbmRBcHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmln
aHQ7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KIAogICAgIGlm
ICgkbnVtQXR0cmlidXRlcyA+IDAgfHwgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCIvLyBB
dHRyaWJ1dGVzXG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIEF0dHJpYnV0
ZXNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5h
dHRyaWJ1dGVzfSkgewogICAgICAgICAgICAgbmV4dCBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJGb3J3YXJkRGVjbGFyZUluSGVhZGVyIn07CiAKQEAgLTE3
NTksOCArMTc2NiwyNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
bXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRpbnRlcmZhY2VOYW1lIC4g
IkNvbnN0cnVjdG9yIjsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2Nv
bnN0cnVjdG9yRnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOwogICAgICAgICB9
CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIH0KKworICAgICMgQWRk
IHByb3RvdHlwZSBkZWNsYXJhdGlvbi4KKyAgICBpZiAoIUhlYWRlck5lZWRzUHJvdG90eXBlRGVj
bGFyYXRpb24oJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJh
dGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFt
ZSk7CiAgICAgfQogCisgICAgIyBBZGQgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KKyAgICBpZiAo
ISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOworICAgICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkg
eworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aCJ9ID0gMTsKKyAgICAgICAgfQorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRp
b24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUp
OworICAgIH0KKworCiAgICAgbXkgQGhhc2hLZXlzID0gKCk7CiAgICAgbXkgQGhhc2hWYWx1ZTEg
PSAoKTsKICAgICBteSBAaGFzaFZhbHVlMiA9ICgpOwpAQCAtMTk0NCwxMiArMTk2OCw2IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJjb25zdCBDbGFzc0luZm8gJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzX2luZm8g
PSB7IFwiJHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Qcm90b3R5cGVcIiwgJkJhc2U6OnNfaW5mbywg
JiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCR7Y2xh
c3NOYW1lfVByb3RvdHlwZSkgfTtcblxuIik7CiAgICAgfQotICAgIHVubGVzcyAoSXNET01HbG9i
YWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09i
amVjdCogJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPCR7
Y2xhc3NOYW1lfT4odm0sIGdsb2JhbE9iamVjdCk7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOwotICAgIH0KIAogICAgIGlmIChQcm90b3R5cGVPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSkpIHsKICAgICAgICAgbXkgJG51bVByb3RvdHlwZUF0
dHJpYnV0ZXMgPSBQcm90b3R5cGVBdHRyaWJ1dGVDb3VudCgkaW50ZXJmYWNlKTsKQEAgLTIwNTMs
MTIgKzIwNzEsMTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIGlmICgkaGFzUGFyZW50ICYmICRwYXJlbnRDbGFz
c05hbWUgbmUgIkpTQzo6RE9NTm9kZUZpbHRlciIpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCAke3BhcmVudENsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9i
amVjdCkpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
ICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsICR7Y2xhc3NO
YW1lfVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsICR7cGFyZW50
Q2xhc3NOYW1lfTo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7XG4iKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIG15ICRwcm90b3R5cGUgPSAkaW50ZXJmYWNlLT5pc0V4
Y2VwdGlvbiA/ICJlcnJvclByb3RvdHlwZSIgOiAib2JqZWN0UHJvdG90eXBlIjsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX1Qcm90b3R5cGU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPiR7cHJvdG90eXBlfSgpKSk7
XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpnZXRQ
cm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8JHtjbGFzc05hbWV9Pih2bSwgZ2xvYmFsT2Jq
ZWN0KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQog
CiAgICAgaWYgKCEkaGFzUGFyZW50KSB7CkBAIC00MjY2LDkgKzQyODksNiBAQCBzdWIgR2VuZXJh
dGVQcm90b3R5cGVEZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNsYXNzICR7
cHJvdG90eXBlQ2xhc3NOYW1lfSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qge1xuIik7
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHVibGljOlxuIik7CiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7XG4iKTsKLSAg
ICB1bmxlc3MgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIik7Ci0gICAgfQogCiAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHN0YXRpYyAke3Byb3RvdHlwZUNsYXNzTmFtZX0qIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOwpAQCAtNDI3
OSw3ICs0Mjk5LDIwIEBAIHN1YiBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uCiAKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgREVDTEFSRV9JTkZPO1xuIik7CiAKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksCisgICAgICAgICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIgLgorICAgICAgICAiICAgIHtcbiIgLgorICAgICAg
ICAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7XG4iIC4KKyAgICAgICAgIiAgICB9XG4iKTsKKworICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIlxucHJpdmF0ZTpcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAk
e3Byb3RvdHlwZUNsYXNzTmFtZX0oSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKVxuIik7CisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICB9XG4iKTsKKwogICAgIGlmIChQcm90b3R5cGVPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKICAg
ICAgICAgaWYgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90In0gPSAxOwpAQCAtNDI4NywyMSArNDMyMCwxOCBAQCBz
dWIgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbgogICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1xuIik7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LAotICAgICAgICAiICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iIC4KLSAgICAg
ICAgIiAgICB7XG4iIC4KLSAgICAgICAgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpO1xuIiAuCi0gICAgICAgICIgICAgfVxu
Iik7CisKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9t
TmFtZWRHZXR0ZXJPblByb3RvdHlwZSJ9KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IlxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGJvb2wgcHV0RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAg
fQogCiAgICAgIyBDdXN0b20gZGVmaW5lT3duUHJvcGVydHkgZnVuY3Rpb24KLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBl
In07Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbnByaXZhdGU6XG4iKTsKLSAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgJHtwcm90b3R5cGVDbGFzc05hbWV9KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9XG4iKTsKKyAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3Rv
dHlwZSJ9KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgIH0KIAog
ICAgICMgc3RydWN0dXJlIGZsYWdzCiAgICAgaWYgKCVzdHJ1Y3R1cmVGbGFncykgewpAQCAtNDM0
NywxMCArNDM3Nyw5IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CiAKICAgICBpZiAoSXNDb25zdHJ1Y3RhYmxl
KCRpbnRlcmZhY2UpICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRD
b25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpc
biIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3Rh
dGUqKTtcbiIpOwotCiAgICAgICAgIGlmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFj
ZSkpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInByb3RlY3RlZDpcbiIpOwor
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0JHtjbGFzc05hbWV9KEpTQzo6RXhlY1N0YXRl
Kik7XG4iKTsKICAgICAgICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNv
bnN0cnVjdG9yc307CiAgICAgICAgICAgICBpZiAoQGNvbnN0cnVjdG9ycyA+IDEpIHsKICAgICAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRjb25zdHJ1Y3RvciAoQGNvbnN0cnVjdG9ycykgewpAQCAt
NDM2NywxMCArNDM5Niw2IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAg
ICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifTtcblxuIik7CiAKLSAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewot
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sIGZpbGwke2ludGVyZmFjZU5hbWV9SW5p
dCgke2ludGVyZmFjZU5hbWV9SW5pdCYsIEpTRGljdGlvbmFyeSYpO1xuXG4iKTsKLSAgICB9Ci0K
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0
b3IifSkgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksIDw8RU5EKTsKIGNsYXNzIEpTJHtp
bnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRo
RG9jdW1lbnQgewpAQCAtNDY5NCwxMSArNDcxOSwxMSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3Rv
ckhlbHBlck1ldGhvZHMKICAgICB9IGVsc2lmICgkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3Ip
IHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NO
YW1lfVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7XG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCAke2NsYXNzTmFtZX06OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSwgTm9uZSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKLSAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCAke3Byb3RvQ2xhc3NOYW1lfTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfTo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpO1xu
Iik7CiAgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoJHtsZWFzdENvbnN0cnVjdG9yTGVuZ3Ro
fSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmIGRlZmluZWQgJGxl
YXN0Q29uc3RydWN0b3JMZW5ndGg7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJlaWZ5
U3RhdGljUHJvcGVydGllcyh2bSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3JUYWJsZVZhbHVlcywg
KnRoaXMpO1xuIikgaWYgQ29uc3RydWN0b3JIYXNQcm9wZXJ0aWVzKCRpbnRlcmZhY2UpOwpAQCAt
NDc1Miw0ICs0Nzc3LDExIEBAIHN1YiBJc0NvbnN0cnVjdGFibGUKICAgICByZXR1cm4gSGFzQ3Vz
dG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q29uc3RydWN0b3JUZW1wbGF0ZSJ9OwogfQogCitzdWIgSGVhZGVyTmVlZHNQcm90b3R5cGVEZWNs
YXJhdGlvbgoreworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKworICAgIHJldHVybiBJc0RP
TUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlIn0gfHwgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSJ9
OworfQorCiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsNTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9u
KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZShKU0M6OkV4ZWNT
dGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0
aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
CitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVj
dCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0
QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVz
dEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNl
OworICAgIHN0YXRpYyBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25z
dHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFz
aCB0YWJsZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0
QWN0aXZlRE9NT2JqZWN0VGFibGVJbmRleFs0XSA9IHsKQEAgLTgyLDcgKzEzMCw3IEBAIHZvaWQg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmYKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEFj
dGl2ZURPTU9iamVjdDo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBA
IC0xMDUsMTEgKzE1Myw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RBY3Rp
dmUKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
VGFibGUgPSB7IDIsIDMsIGZhbHNlLCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJs
ZVZhbHVlcywgMCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGVJbmRleCB9Owog
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RB
Y3RpdmVET01PYmplY3RQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVE
T01PYmplY3RQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CkBAIC0xMjksNiArMTcyLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01PYmpl
Y3Q6OmNyZWF0ZVAKICAgICByZXR1cm4gSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRQcm90
b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBnZXRET01Qcm90b3R5cGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKwogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCiB7CiAgICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFj
dGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpTVGVzdEFjdGl2ZURPTU9iamVjdF9oCiAj
ZGVmaW5lIEpTVGVzdEFjdGl2ZURPTU9iamVjdF9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CkBAIC05Niw0OSAr
OTQsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEFjdGl2
ZURPTU9iamVjdCopOwogVGVzdEFjdGl2ZURPTU9iamVjdCogdG9UZXN0QWN0aXZlRE9NT2JqZWN0
KEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
ICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpT
VGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBK
U1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3Qg
QmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENv
bnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFj
dGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDkgKzM1LDU3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZ1bmN0aW9ucwog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCiAv
LyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3Ry
dWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKK307CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RDdXN0b21OYW1l
ZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwor
CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0
YXRpYyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBIYXNo
IHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlclRhYmxlSW5kZXhbMl0gPSB7CkBAIC03Niw3ICsxMjQsNyBAQCB2b2lk
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6CiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9
CiAKQEAgLTk2LDExICsxNDQsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
Q3VzdG9tCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlVGFibGUgPSB7IDEsIDEsIGZhbHNlLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxl
SW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgJkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUpIH07CiAKLUpTT2Jq
ZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1Rlc3RDdXN0b21OYW1lZEdldHRlcj4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xMjAsNiArMTYzLDExIEBAIEpTT2Jq
ZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXQKICAgICByZXR1cm4gSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5o
CShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEg
KzIxLDggQEAKICNpZm5kZWYgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAogI2RlZmluZSBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlcl9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIK
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlND
OjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0M6OkpTQ2VsbCopOwpAQCAtMTAwLDQ5ICs5OCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29u
dGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKIFRlc3RDdXN0b21OYW1l
ZEdldHRlciogdG9UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3Mg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNl
OwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0g
ICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVy
ZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAg
ICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21O
YW1lZEdldHRlckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdEV2
ZW50Q29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgpAQCAtMzgsNiArMzksNTYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9y
QXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENv
bnN0cnVjdG9yQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KyAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
CisgICAgc3RhdGljIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6
OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3Ry
dWN0RGF0YSYpOworfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC0xMDAsNyArMTUxLDcgQEAgdm9pZCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAt
MTM1LDExICsxODYsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRD
CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVU
YWJsZSA9IHsgMywgNywgdHJ1ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxl
VmFsdWVzLCAwLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVJbmRleCB9Owog
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9
IHsgIlRlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFdmVudENvbnN0
cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwpAQCAtMTU5LDYgKzIwNSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6Y3JlYXRlCiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+KHZtLCBn
bG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3ko
SlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihjZWxsKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcl9oCiAjZGVmaW5lIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JfaAogCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVk
ZSAiVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzks
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV2ZW50
Q29uc3RydWN0b3IoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03NCw3ICs3Miw2IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OwogfTsKIAogY2xhc3MgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvck93bmVyIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk3LDUyICs5NCw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVy
Q29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXZlbnRDb25zdHJ1Y3RvciopOwogVGVzdEV2ZW50Q29u
c3RydWN0b3IqIHRvVGVzdEV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3Mg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSogY3Jl
YXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
Ci19OwotCi1jbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1
YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFS
RV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwot
fTsKLQogYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVj
dG9ySW5pdCYsIEpTRGljdGlvbmFyeSYpOwogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSAr
NDQsNTcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25BZGRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvblJlbW92
ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVu
dChKU0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNz
IEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpT
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qg
eworcHJpdmF0ZToKKyAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RFdmVudFRh
cmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAvKiBI
YXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rl
c3RFdmVudFRhcmdldFRhYmxlSW5kZXhbMl0gPSB7CkBAIC04NSw3ICsxMzMsNyBAQCB2b2lkIEpT
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlzCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5
cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV2ZW50VGFy
Z2V0OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTExNCwxMSAr
MTYyLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50VAogc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlID0geyA0LCA3
LCBmYWxzZSwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldFByb3RvdHlw
ZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
RXZlbnRUYXJnZXQ+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwpAQCAtMTM4LDYgKzE4MSwxMSBAQCBKU09iamVjdCogSlNUZXN0RXZlbnRU
YXJnZXQ6OmNyZWF0ZVByb3RvCiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0UHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdEV2ZW50VGFyZ2V0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwog
dm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAg
ICBKU1Rlc3RFdmVudFRhcmdldCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEV2ZW50
VGFyZ2V0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMTcw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpT
VGVzdEV2ZW50VGFyZ2V0X2gKICNkZWZpbmUgSlNUZXN0RXZlbnRUYXJnZXRfaAogCi0jaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAi
VGVzdEV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFBy
b3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzM4LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTEwNCw0OSArMTAyLDYgQEAgaW5s
aW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudFRhcmdldCopOwog
VGVzdEV2ZW50VGFyZ2V0KiB0b1Rlc3RFdmVudFRhcmdldChKU0M6OkpTVmFsdWUpOwogCi1jbGFz
cyBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRUYXJnZXRQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAg
ICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToK
LSAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJF
X0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDE3MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVz
dEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtMzUsNiArMzYsNTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25Db25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwg
c3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAg
ICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4
Y2VwdGlvbkNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9
OworCiAvKiBIYXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJ
bmRleCBKU1Rlc3RFeGNlcHRpb25UYWJsZUluZGV4WzJdID0gewpAQCAtNzMsNyArMTIxLDcgQEAg
dm9pZCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6ZmluaXNoQwogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEV4Y2VwdGlvblBy
b3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXhj
ZXB0aW9uOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAgLTkzLDEx
ICsxNDEsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXhjZXB0CiBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlID0geyAxLCAx
LCB0cnVlLCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV4Y2Vw
dGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEV4Y2VwdGlvblByb3RvdHlwZSIsICZCYXNl
OjpzX2luZm8sICZKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3RF
eGNlcHRpb25Qcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RXhjZXB0aW9uPih2bSwg
Z2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0x
MTcsNiArMTYwLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RFeGNlcHRpb246OmNyZWF0ZVByb3RvdHkK
ICAgICByZXR1cm4gSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5lcnJvclByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0
KiBKU1Rlc3RFeGNlcHRpb246OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFeGNlcHRp
b24+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJv
eShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RFeGNlcHRpb24qPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0
aW9uLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIx
LDkgQEAKICNpZm5kZWYgSlNUZXN0RXhjZXB0aW9uX2gKICNkZWZpbmUgSlNUZXN0RXhjZXB0aW9u
X2gKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5o
IgogI2luY2x1ZGUgIlRlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yUHJv
dG90eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICsz
OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRl
UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEV4Y2VwdGlv
bigpOwpAQCAtOTYsNDkgKzk1LDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdy
YXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RFeGNlcHRpb24qKTsKIFRlc3RFeGNlcHRpb24qIHRvVGVzdEV4Y2VwdGlvbihK
U0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJsaWMg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25G
aW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvblByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNl
cHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0RXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpT
Qzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXBy
aXZhdGU6Ci0gICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFeGNlcHRp
b25Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAko
cmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2
ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZS5oIgogCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTMx
LDYgKzMyLDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9Owor
CitjbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGlj
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyog
SGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvclRhYmxlSW5k
ZXhbMV0gPSB7CkBAIC01NSw3ICsxMDMsNyBAQCB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3RvCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6c2VsZih2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6
Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC03NSwxMSArMTIzLDYg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdlbmVyYQogc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGUgPSB7IDEs
IDEsIHRydWUsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGVUYWJsZVZhbHVlcywg
MCwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKIGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpzX2luZm8gPSB7
ICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZT4odm0sIGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTk5LDYgKzE0MiwxMSBAQCBKU09iamVj
dCogSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Y3JlCiAgICAgcmV0dXJuIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCog
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZV9oCiAjZGVmaW5lIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVfaAogCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAgfkpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OwogfTsKIAogY2xhc3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZU93bmVyIDogcHVibGljIEpT
Qzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFw
cGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopOwogVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUqIHRvVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoSlNDOjpKU1ZhbHVl
KTsKIAotY2xhc3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBy
ZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9u
RmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewot
cHJpdmF0ZToKLSAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDQoSlNDOjpFeGVjU3RhdGUqKTsK
ICNlbmRpZgorCiAvLyBBdHRyaWJ1dGVzCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVO
QUJMRShDb25kaXRpb24yMykKQEAgLTEyMSw2ICsxMjIsNTggQEAgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbAogdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxOb2RlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMg
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05v
bkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qq
KTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSop
OworI2lmIEVOQUJMRShURVNUX0lOVEVSRkFDRSkKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
KyNlbmRpZiAvLyBFTkFCTEUoVEVTVF9JTlRFUkZBQ0UpCit9OworCiAvKiBIYXNoIHRhYmxlICov
CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RJbnRlcmZhY2VU
YWJsZUluZGV4WzRdID0gewpAQCAtMjY2LDcgKzMxOSw3IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3I6OmZpbmlzaEMKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYodm0sIGds
b2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtNDM4LDEx
ICs0OTEsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJmCiBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyAxNywg
NjMsIHRydWUsIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0SW50ZXJmYWNlUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgJkpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSkgfTsKIAotSlNPYmplY3QqIEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2U+KHZt
LCBnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAg
LTQ2Miw2ICs1MTAsMTEgQEAgSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZTo6Y3JlYXRlUHJvdG90
eQogICAgIHJldHVybiBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2Jq
ZWN0KiBKU1Rlc3RJbnRlcmZhY2U6OmdldFByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRl
cmZhY2U+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdEludGVyZmFjZTo6ZGVz
dHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEg
KzIzLDggQEAKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
IAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgog
I2luY2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNiArMzks
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKQEAgLTEyMyw1
NCArMTIxLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJ
bnRlcmZhY2UqKTsKIFRlc3RJbnRlcmZhY2UqIHRvVGVzdEludGVyZmFjZShKU0M6OkpTVmFsdWUp
OwogCi1jbGFzcyBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBC
YXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAg
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2UoSlNDOjpFeGVjU3Rh
dGUqKTsKLSNpZiBFTkFCTEUoVEVTVF9JTlRFUkZBQ0UpCi0gICAgc3RhdGljIEpTQzo6Q29uc3Ry
dWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRh
Jik7Ci0jZW5kaWYgLy8gRU5BQkxFKFRFU1RfSU5URVJGQUNFKQotfTsKLQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOSArMzUsNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRnVuY3Rp
b25zCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKKwog
Ly8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAg
IHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25z
dHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgeworICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9Owor
CiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9y
VGFibGVJbmRleFsxXSA9IHsKQEAgLTYyLDcgKzExMCw3IEBAIHZvaWQgSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lckNvbnN0cnUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
OjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAg
LTg1LDExICsxMzMsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TWVkaWFR
CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGVUYWJsZSA9IHsgMiwgMywgdHJ1ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJv
dG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwpAQCAtMTA5LDYgKzE1MiwxMSBAQCBKU09iamVjdCogSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6CiAgICAgcmV0dXJuIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24gMTcwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5kZWYgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcl9oCiAjZGVmaW5lIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVj
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CiAgICAgfkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoKTsKICAgICBERUNMQVJF
X0lORk87CkBAIC03Miw3ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAg
LTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28K
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwogVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
IHRvVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBy
ZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAg
IHsKLSAgICAgICAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVzdE5h
bWVkQ29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCkBAIC0zNCw2ICszNSw3OCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xh
c3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0
TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisK
K2NsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0
cnVjdG9yV2l0aERvY3VtZW50IEJhc2U7CisKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAg
ICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5m
aW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dG9yOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVj
dG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdl
dENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworfTsKKwog
LyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlSW5k
ZXhbMV0gPSB7CkBAIC01OCw3ICsxMzEsNyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c2VsZih2bSwgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC05Niw3ICsxNjksNyBAQCB2b2lk
IEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xMjIsMTEgKzE5NSw2IEBAIHN0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROYW1lZEMKIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVl
LCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNU
ZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclBy
b3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JQcm90b3R5cGUpIH07CiAKLUpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90
eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkQ29uc3RydWN0b3I+KHZtLCBnbG9iYWxP
YmplY3QpOwotfQotCiB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0x
NDYsNiArMjE0LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGUK
ICAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7
CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisK
IHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
IHsKICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMiArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yX2gKICNk
ZWZpbmUgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCiAKLSNpbmNsdWRlICJET01Db25zdHJ1Y3Rv
cldpdGhEb2N1bWVudC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQxLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2Vs
bCopOwogICAgIH5KU1Rlc3ROYW1lZENvbnN0cnVjdG9yKCk7CiAgICAgREVDTEFSRV9JTkZPOwpA
QCAtNzQsNyArNzEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKIGNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05Nyw3NCArOTMsNiBA
QCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkQ29uc3Ry
dWN0b3IqKTsKIFRlc3ROYW1lZENvbnN0cnVjdG9yKiB0b1Rlc3ROYW1lZENvbnN0cnVjdG9yKEpT
Qzo6SlNWYWx1ZSk7CiAKLWNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBw
dWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6
SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpT
Qzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFw
KSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJu
IHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0g
ICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Iq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LX07Ci0KLWNsYXNzIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IEJhc2U7Ci0KLSAgICBzdGF0aWMgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7
Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1
Y3RvciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFt
ZWRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGNvbnN0cnVj
dG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdG9yOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9JTkZPOwotCi1wcml2YXRlOgotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENv
bnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE5hbWVk
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwot
fTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlz
aW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNTYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
ZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5vZGVQcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3ROb2RlUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5vZGVQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9k
ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5vZGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5vZGVQcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVz
dE5vZGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRl
OgorICAgIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFz
ZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgeworICAgICAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkg
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1Rlc3ROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6
Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1
Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0
aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0Tm9kZUNvbnN0cnVjdG9yVGFi
bGVJbmRleFsxXSA9IHsKQEAgLTY1LDcgKzExNSw3IEBAIHZvaWQgSlNUZXN0Tm9kZUNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb2RlOjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSk7CiB9CiAKQEAgLTkxLDExICsxNDEsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0Tm9kZVByCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE5vZGVQcm90
b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlVmFsdWVz
LCAwLCBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlUHJvdG90eXBlIiwgJkJhc2U6
OnNfaW5mbywgJkpTVGVzdE5vZGVQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0Tm9kZVByb3RvdHlw
ZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQog
dm9pZCBKU1Rlc3ROb2RlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTExLDcgKzE1NiwxMiBAQCBKU1Rlc3ROb2Rl
OjpKU1Rlc3ROb2RlKFN0cnVjdHVyZSogc3RydWN0CiAKIEpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpj
cmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewot
ICAgIHJldHVybiBKU1Rlc3ROb2RlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
SlNUZXN0Tm9kZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpT
Tm9kZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSkpOworICAgIHJldHVybiBKU1Rl
c3ROb2RlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTTm9kZTo6Z2V0UHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROb2RlOjpnZXRQ
cm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Tm9kZT4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b2RlLmgJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSw4IEBA
CiAjaWZuZGVmIEpTVGVzdE5vZGVfaAogI2RlZmluZSBKU1Rlc3ROb2RlX2gKIAotI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIlRlc3ROb2Rl
LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM5LDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
KyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTY2LDUyICs2NSw2IEBA
IHByb3RlY3RlZDoKIH07CiAKIAotY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9kZVByb3RvdHlwZSog
Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3ROb2RlUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vZGVQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROb2RlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1
cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBKU1Rlc3ROb2RlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE5vZGVD
b25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0
Tm9kZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdE5vZGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9J
TkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0Tm9kZShKU0M6
OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5j
cHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGdW5jdGlvbnMKIAogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVG
dW5jdGlvbk5vbmRldGVybWluaXN0aWNaZXJvQXJnRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqKTsK
KwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAgLTU1
LDYgKzU2LDUzIEBAIHZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNT
ZXR0ZXJFeGNlcHRpb25BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIHZvaWQgc2V0SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU+KHZtLmhl
YXApKSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1
cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFz
cyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0
b3IgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC03OSw3ICsxMjcsNyBA
QCB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6CiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY1Byb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
OwogfQogCkBAIC0xMjAsMTEgKzE2OCw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3ROb25kZXQKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1Byb3RvdHlwZVRhYmxlID0geyA3LCAxNSwgdHJ1ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFi
bGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgJkpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKSB9OwogCi1KU09iamVj
dCogSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rl
c3ROb25kZXRlcm1pbmlzdGljPih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTQ0LDYgKzE4NywxMSBAQCBKU09iamVjdCog
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Y3JlYXRlCiAgICAgcmV0dXJuIEpTVGVzdE5vbmRldGVy
bWluaXN0aWNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYzo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vbmRldGVybWlu
aXN0aWM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0
aWM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihj
ZWxsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb25kZXRlcm1pbmlzdGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaAkocmV2aXNpb24gMTcw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
bmRldGVybWluaXN0aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICNpZm5k
ZWYgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY19oCiAjZGVmaW5lIEpTVGVzdE5vbmRldGVybWluaXN0
aWNfaAogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVy
LmgiCiAjaW5jbHVkZSAiVGVzdE5vbmRldGVybWluaXN0aWMuaCIKLSNpbmNsdWRlIDxydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDAsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAgICAg
fkpTVGVzdE5vbmRldGVybWluaXN0aWMoKTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3
MCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogfTsKIAogY2xhc3MgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY093bmVyIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKQEAgLTk1LDQ5ICs5Miw2IEBAIGlubGluZSB2
b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOwog
VGVzdE5vbmRldGVybWluaXN0aWMqIHRvVGVzdE5vbmRldGVybWluaXN0aWMoSlNDOjpKU1ZhbHVl
KTsKIAotY2xhc3MgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0
cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5vbmRldGVybWluaXN0aWND
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAxNzAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShK
U0M6OkV4ZWNTdGF0ZSopOworCiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC0yOTAsNiArMjkx
LDU2IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEoKIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogdm9pZCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0T2JqUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9ialByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSlNUZXN0T2JqUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpTVGVzdE9i
akNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJs
aWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBK
U1Rlc3RPYmpDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgSlNUZXN0T2JqQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0T2JqQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T2Jq
KEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBI
YXNoIHRhYmxlICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rl
c3RPYmpUYWJsZUluZGV4WzE3XSA9IHsKQEAgLTQ1NSw3ICs1MDYsNyBAQCB2b2lkIEpTVGVzdE9i
akNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKHZtLCBn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPYmo6OmdldFByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9i
akNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KQEAgLTExNzQsMTEgKzEyMjUsNiBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzcsIDUxMSwgdHJ1ZSwgSlNU
ZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlSW5k
ZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRl
c3RPYmplY3RQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFi
bGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90eXBlKSB9OwogCi1KU09i
amVjdCogSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE9iaj4odm0s
IGdsb2JhbE9iamVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTE5OCw2
ICsxMjQ0LDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShWTSYKICAg
ICByZXR1cm4gSlNUZXN0T2JqUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNU
ZXN0T2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwogfQogCitKU09iamVjdCogSlNUZXN0T2JqOjpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T2JqPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30K
Kwogdm9pZCBKU1Rlc3RPYmo6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBA
CiAjaWZuZGVmIEpTVGVzdE9ial9oCiAjZGVmaW5lIEpTVGVzdE9ial9oCiAKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0
T2JqLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0T2JqKCk7CkBAIC0xMDksNTIgKzEwNyw2IEBAIGlu
bGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqKik7CiBUZXN0T2Jq
KiB0b1Rlc3RPYmooSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T2Jq
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9i
alByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE9ialByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSlNUZXN0T2JqUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE9iakNvbnN0cnVj
dG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpD
b25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0
T2JqQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0T2JqQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T2JqKEpTQzo6RXhl
Y1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw2MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBBdHRyaWJ1
dGVzCiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlND
OjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
K3ByaXZhdGU6CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRl
ZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMxKEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
MihKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNDOjpFeGVj
U3RhdGUqKTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KEpTQzo6RXhlY1N0YXRlKik7Cisg
ICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxs
KiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Cit9OworCiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1
Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTEyNCw3
ICsxNzgsNyBAQCB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1CiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c2VsZih2bSwgZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCkBAIC0xNTAsMTEgKzIwNCw2IEBAIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVybG8KIHN0YXRpYyBjb25zdCBIYXNoVGFibGUg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVl
LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAsIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAm
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUpIH07CiAKLUpT
T2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpzZWxmKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KHZtLCBnbG9iYWxPYmplY3QpOwot
fQotCiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0xNzQs
NiArMjIzLDExIEBAIEpTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjoKICAg
ICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4odm0s
IGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6
ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
X2gKICNkZWZpbmUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oCiAKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9P
YmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszNyw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycygpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3duZXIgOiBw
dWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewpAQCAtOTUsNTYgKzkyLDYgQEAgaW5saW5lIHZv
aWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Kik7CiBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogdG9UZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyhKU0M6OkpTVmFsdWUpOwogCi1jbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0
dXJlKSB7IH0KLX07Ci0KLWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShKU0M6OkV4
ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIoSlNDOjpFeGVjU3RhdGUqKTsK
LSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzNChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0
YSYpOwotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZp
c2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU01l
c3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCkBAIC00Niw2ICs0Nyw1MyBAQCB2b2lkIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9u
bHlWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKwor
Y2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xh
c3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAgICBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3Qg
QmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KK307CisK
IC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3RvclRhYmxlSW5kZXhbMV0gPSB7CkBAIC03MCw3ICsxMTgsNyBAQCB2b2lkIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtMTEwLDExICsxNTgsNiBAQCBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyA2LCAxNSwgdHJ1
ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1
ZXMsIDAsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxl
SW5kZXggfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCog
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4odm0sIGdsb2JhbE9i
amVjdCk7Ci19Ci0KIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwpAQCAtMTM0LDYgKzE3NywxMSBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50CiAgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3Qq
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0UHJvdG90eXBlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4odm0sIGdsb2JhbE9i
amVjdCk7Cit9CisKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMTcwMTU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsOCBA
QAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVk
ZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00Miw2ICszOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAg
ICB+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiAgICAgREVDTEFSRV9J
TkZPOwpAQCAtMTAxLDQ5ICs5OSw2IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01X
cmFwcGVyV28KIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7CiBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0b1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAg
IHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkgeyB9
Ci19OwotCi1jbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1
Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVy
biBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQotfTsKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcAkocmV2aXNpb24gMTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiAr
NTYsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blN0cmluZ0FycmF5RnVuY3Rpb24yKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRo
U2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKKwogLy8gQXR0cmlidXRlcwogCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwpAQCAtNzIsNiArNzMsNTYgQEAgdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoR2V0dAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIHZvaWQgc2V0SlNUZXN0
VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CisKK2NsYXNzIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0VHlwZWRlZnNQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVz
dFR5cGVkZWZzQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJp
dmF0ZToKKyAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhKU0M6OkV4
ZWNTdGF0ZSopOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworfTsKKwogLyogSGFzaCB0YWJs
ZSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0VHlwZWRl
ZnNUYWJsZUluZGV4WzJdID0gewpAQCAtMTI1LDcgKzE3Niw3IEBAIHZvaWQgSlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3IKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZTo6c2VsZih2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnM6OmdldFByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQpAQCAtMjMyLDEx
ICsyODMsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0VHlwZWRlCiBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlVGFibGUgPSB7IDE3LCA2
MywgdHJ1ZSwgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGVUYWJsZVZhbHVlcywgMCwgSlNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0VHlwZWRl
ZnNQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RUeXBlZGVmc1Byb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sICZKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNUZXN0VHlwZWRl
ZnNQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0VHlwZWRlZnM+KHZtLCBnbG9iYWxP
YmplY3QpOwotfQotCiB2b2lkIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMjU2LDYgKzMw
MiwxMSBAQCBKU09iamVjdCogSlNUZXN0VHlwZWRlZnM6OmNyZWF0ZVByb3RvdHlwCiAgICAgcmV0
dXJuIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2JqZWN0KiBKU1Rlc3RU
eXBlZGVmczo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFR5cGVkZWZzPih2bSwgZ2xv
YmFsT2JqZWN0KTsKK30KKwogdm9pZCBKU1Rlc3RUeXBlZGVmczo6ZGVzdHJveShKU0M6OkpTQ2Vs
bCogY2VsbCkKIHsKICAgICBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTVGVzdFR5cGVkZWZzKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24g
MTcwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAjaWZuZGVmIEpT
VGVzdFR5cGVkZWZzX2gKICNkZWZpbmUgSlNUZXN0VHlwZWRlZnNfaAogCi0jaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVGVzdFR5
cGVkZWZzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzM3LDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogZ2V0UHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNUZXN0VHlwZWRlZnMoKTsKQEAgLTk2LDUyICs5NCw2
IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV28KIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0VHlwZWRlZnMq
KTsKIFRlc3RUeXBlZGVmcyogdG9UZXN0VHlwZWRlZnMoSlNDOjpKU1ZhbHVlKTsKIAotY2xhc3Mg
SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgc3RhdGljIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNUZXN0VHlwZWRlZnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7
Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVz
dFR5cGVkZWZzUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkgeyB9Ci19OwotCi1jbGFzcyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0VHlwZWRlZnNDb25z
dHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgot
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0VHlw
ZWRlZnNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0g
ICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJv
dGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNUZXN0VHlwZWRlZnMoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVj
dERhdGEmKTsKLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0
ZS5jcHAJKHJldmlzaW9uIDE3MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU2F0dHJpYnV0ZS5oIgogCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgImF0dHJpYnV0ZS5oIgpAQCAtMzUsNiArMzYs
NTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmli
dXRlUmVhZG9ubHkoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc2F0dHJp
YnV0ZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworY2xhc3MgSlNhdHRyaWJ1dGVQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU2F0dHJpYnV0ZVBy
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU2F0dHJp
YnV0ZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0
dHJpYnV0ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTYXR0cmlidXRlUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xh
c3MgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Citwcml2YXRlOgorICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNhdHRyaWJ1dGVDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpIEpTYXR0cmlidXRlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KK307CisKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAK
IHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU2F0dHJpYnV0ZUNvbnN0cnVj
dG9yVGFibGVJbmRleFsxXSA9IHsKQEAgLTU5LDcgKzEwNyw3IEBAIHZvaWQgSlNhdHRyaWJ1dGVD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXQKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU2F0dHJpYnV0ZVByb3RvdHlwZTo6c2VsZih2bSwgZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNhdHRyaWJ1dGU6OmdldFByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKIH0KIApAQCAtODIsMTEgKzEzMCw2IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU2F0dHJpYnV0ZVAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNhdHRy
aWJ1dGVQcm90b3R5cGVUYWJsZSA9IHsgMiwgMywgdHJ1ZSwgSlNhdHRyaWJ1dGVQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCwgSlNhdHRyaWJ1dGVQcm90b3R5cGVUYWJsZUluZGV4IH07CiBjb25zdCBD
bGFzc0luZm8gSlNhdHRyaWJ1dGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgImF0dHJpYnV0ZVByb3Rv
dHlwZSIsICZCYXNlOjpzX2luZm8sICZKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTYXR0cmlidXRlUHJvdG90eXBlKSB9OwogCi1KU09iamVjdCogSlNh
dHRyaWJ1dGVQcm90b3R5cGU6OnNlbGYoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNhdHRyaWJ1dGU+KHZtLCBnbG9i
YWxPYmplY3QpOwotfQotCiB2b2lkIEpTYXR0cmlidXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtMTA2LDYgKzE0
OSwxMSBAQCBKU09iamVjdCogSlNhdHRyaWJ1dGU6OmNyZWF0ZVByb3RvdHlwZShWCiAgICAgcmV0
dXJuIEpTYXR0cmlidXRlUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNhdHRy
aWJ1dGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPmVycm9yUHJvdG90eXBlKCkpKTsKIH0KIAorSlNPYmplY3QqIEpTYXR0cmlidXRlOjpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNhdHRyaWJ1dGU+KHZtLCBnbG9iYWxPYmplY3QpOwor
fQorCiB2b2lkIEpTYXR0cmlidXRlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewogICAg
IEpTYXR0cmlidXRlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNhdHRyaWJ1dGUqPihjZWxs
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJp
YnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU2F0dHJpYnV0ZS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjEsMTEgKzIxLDkgQEAKICNpZm5kZWYgSlNhdHRyaWJ1dGVfaAogI2RlZmluZSBKU2F0dHJpYnV0
ZV9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKICNpbmNsdWRlICJhdHRyaWJ1dGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yUHJvdG90
eXBlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICszOCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNhdHRyaWJ1dGUo
KTsKICAgICBERUNMQVJFX0lORk87CkBAIC03Miw3ICs3MSw2IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAogY2xh
c3MgSlNhdHRyaWJ1dGVPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CkBAIC05
NSw0OSArOTMsNiBAQCBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvCiBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgYXR0
cmlidXRlKik7CiBhdHRyaWJ1dGUqIHRvYXR0cmlidXRlKEpTQzo6SlNWYWx1ZSk7CiAKLWNsYXNz
IEpTYXR0cmlidXRlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwot
ICAgIHN0YXRpYyBKU2F0dHJpYnV0ZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgewotICAgICAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTYXR0
cmlidXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU2F0dHJpYnV0ZVByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpIHsgfQotfTsKLQot
Y2xhc3MgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7Ci1wcml2YXRlOgotICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTYXR0cmlidXRlQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNhdHRyaWJ1dGVDb25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIEpTYXR0cmlidXRlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwot
ICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotICAgIH0KLX07Ci0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
cmVhZG9ubHkuY3BwCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYg
KzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU3JlYWRvbmx5LmgiCiAK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJyZWFkb25seS5oIgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KIApAQCAtMzEsNiArMzIsNTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogLy8gQXR0cmlidXRlcwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzcmVhZG9ubHlDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CisKK2NsYXNzIEpTcmVhZG9ubHlQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU3JlYWRvbmx5UHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTcmVhZG9ubHlQcm90b3R5cGUq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNyZWFkb25seVByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTcmVhZG9ubHlQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEpTcmVhZG9ubHlQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpT
Qzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTcmVhZG9ubHlDb25z
dHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Citwcml2YXRlOgorICAgIEpT
cmVhZG9ubHlDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKyAgICBz
dGF0aWMgSlNyZWFkb25seUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAg
eworICAgICAgICBKU3JlYWRvbmx5Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNyZWFkb25seUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNyZWFkb25s
eUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9Cit9OworCiAv
KiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNyZWFkb25seUNvbnN0cnVjdG9yVGFibGVJbmRleFsxXSA9IHsKQEAg
LTU1LDcgKzEwMyw3IEBAIHZvaWQgSlNyZWFkb25seUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U3JlYWRvbmx5UHJvdG90eXBlOjpzZWxmKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBKU3JlYWRvbmx5OjpnZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKQEAg
LTc1LDExICsxMjMsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNyZWFkb25seVBy
CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTcmVhZG9ubHlQcm90b3R5cGVUYWJsZSA9IHsgMSwg
MSwgdHJ1ZSwgSlNyZWFkb25seVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwLCBKU3JlYWRvbmx5UHJv
dG90eXBlVGFibGVJbmRleCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTcmVhZG9ubHlQcm90b3R5cGU6
OnNfaW5mbyA9IHsgInJlYWRvbmx5UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTcmVhZG9u
bHlQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU3JlYWRvbmx5UHJvdG90
eXBlKSB9OwogCi1KU09iamVjdCogSlNyZWFkb25seVByb3RvdHlwZTo6c2VsZihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU3JlYWRvbmx5Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBKU3JlYWRvbmx5UHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwpAQCAtOTksNiArMTQyLDExIEBAIEpTT2JqZWN0KiBKU3JlYWRvbmx5OjpjcmVhdGVQ
cm90b3R5cGUoVk0KICAgICByZXR1cm4gSlNyZWFkb25seVByb3RvdHlwZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIEpTcmVhZG9ubHlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiB9CiAKK0pTT2Jq
ZWN0KiBKU3JlYWRvbmx5OjpnZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNyZWFkb25seT4odm0s
IGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgSlNyZWFkb25seTo6ZGVzdHJveShKU0M6OkpTQ2Vs
bCogY2VsbCkKIHsKICAgICBKU3JlYWRvbmx5KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNy
ZWFkb25seSo+KGNlbGwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCShyZXZpc2lvbiAxNzAxNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBKU3JlYWRvbmx5X2gKICNkZWZpbmUg
SlNyZWFkb25seV9oCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKICNpbmNsdWRlICJyZWFkb25seS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MCw2ICszNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Y3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB+SlNy
ZWFkb25seSgpOwogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTcyLDcgKzcwLDYgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9
OwogCiBjbGFzcyBKU3JlYWRvbmx5T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
ewpAQCAtOTUsNDkgKzkyLDYgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBw
ZXJXbwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIHJlYWRvbmx5Kik7CiByZWFkb25seSogdG9yZWFkb25seShKU0M6OkpTVmFsdWUpOwogCi1j
bGFzcyBKU3JlYWRvbmx5UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OwotICAgIHN0YXRpYyBKU3JlYWRvbmx5UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICB7Ci0gICAgICAgIEpTcmVhZG9ubHlQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNyZWFkb25seVByb3RvdHlwZT4odm0uaGVhcCkpIEpTcmVh
ZG9ubHlQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTcmVhZG9ubHlQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKSB7IH0KLX07Ci0KLWNs
YXNzIEpTcmVhZG9ubHlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Ci1wcml2YXRlOgotICAgIEpTcmVhZG9ubHlDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNyZWFkb25seUNvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU3JlYWRvbmx5Q29uc3RydWN0b3IqIHB0ciA9
IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNyZWFkb25seUNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgSlNyZWFkb25seUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKLSAgICB9Ci19OwotCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAo=
</data>
<flag name="review"
          id="257892"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>